在我的C#WinForms程序中,我有一些按钮,我已经为它们分配了一些shourtcuts.快捷方式工作正常,但按钮的文本属性中的下划线在用户点击ALT键之前不会显示.如何更改此默认行为?
那么这是我的下划线
Button1.Text = "&EDIT";
Run Code Online (Sandbox Code Playgroud)
谢谢.
我如何关闭我的C#WinForms程序,同时有一些控件,如树视图,按钮和其他东西都存在于它们,他们有焦点,可能是他们有相同的键盘快捷键?
例如,在我的树视图中,如果按ALT + ESC键,节点将被删除.但我希望能够通过按ESC键调用'this.Close()'方法,无论是否有任何控件都有焦点.
谢谢.
我戴着蒙面文本框遇到了一些麻烦.
如何隐藏默认情况下显示在文本框中的下划线?!
此外,我希望用户能够输入最多3位数(他/她可以输入至少1位和最多3位数).怎么设置?
我有以下类作为DataSourceListBox:
class SeparatorChars
{
/// <summary>
/// Text to describe character
/// </summary>
public string Text { get; set; }
/// <summary>
/// Char value of the character
/// </summary>
public char Value { get; set; }
/// <summary>
/// Represent object as string
/// </summary>
/// <returns>String representing object</returns>
public override string ToString()
{
return Text + " '" + Value + "'";
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,默认情况下这将使用Valuejust作为添加到字符串的常规字符,例如,如果我Tab像这样定义此类:
var TabSeparator = new SeparatorChars {Text = …Run Code Online (Sandbox Code Playgroud) 我ListBox在winforms应用程序中有两个,我为它们分配了一个数据源,如下所示:
private void MakeMeasurementUnits()
{
var units = new List<MeasurementUnit>
{
new MeasurementUnit {Name = "Current", SiUnit = "A"},
new MeasurementUnit {Name = "Voltage", SiUnit = "V"},
new MeasurementUnit {Name = "Time", SiUnit = "s"},
new MeasurementUnit {Name = "Temprature", SiUnit = "°C"}
};
lbxXunit.DataSource = units;
lbxYunit.DataSource = units;
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是(或者可能是因为这是我的第一次!!),在我点击其中一个lisboxes的项目的形式,第二个列表框中的相同项目也被选中.这是默认行为吗?怎么预防这个?如果这是默认行为,那么有用的是什么?
我找到了快速补救措施来制作两个不同的数据源(与另一个名称相同)
我正在研究一个比较两条曲线的程序(由二极管输出产生的电压/电流曲线).
我想计算这两条曲线之间的面积(蓝色曲线是第一个二极管,RED是第二个曲线).

每条曲线有51个数据点(它们总是具有相同数量的数据).我现在正在做的是这样的:
public double CalculateArea(double[,] pin1, double[,] pin2)
{
double voltageArea = 0;
double currentArea = 0; //Current (Vertical axis) not yet!
double max = 0;
double min = 0;
for (int i = 0; i < pin1.GetLength(0); i++)
{
max = Math.Max(Math.Abs(pin1[i, 0]), Math.Abs(pin2[i, 0]));
min = Math.Min(Math.Abs(pin1[i, 0]), Math.Abs(pin2[i, 0]));
voltageArea += max - min;
}
return voltageArea;
}
Run Code Online (Sandbox Code Playgroud)
这段代码以某种方式工作,记住我对Current(垂直轴)什么都不做.如果结果接近0,例如0.05,那么曲线之间的差异是可以得到的.但我确信这不是正确的方法,我完全不知道我写的方法的结果是什么......似乎只是电压点之间的区别.
如果你能帮助我改进这种方法,我真的很高兴.
可能重复:
如何将列表<>转换为多维数组?
我想double[,]为此目的有一个数组形式,因为我不知道这个数组的长度是多少,我想先做List一个然后再使用List<T>.ToArray()它转换为double[,]:
public double[,] FilterClampedData(double[,] data)
{
var finalData = new List<double[]>();
//Do some stuff on parameter
return finalData.ToArray(); ///Does not compile :(
}
Run Code Online (Sandbox Code Playgroud) 有没有办法检查我正在寻找的节点,使用XPATH是否包含子节点?
我有一个xml文件,一个特定的节点有时会有孩子,有时候它没有!如何检查这个,所以我不会得到太多NullReferenceExceptions!?
检查以下示例:
var text = xml.SelectSingleNode("/Document/Tests/Test").InnerText;
Run Code Online (Sandbox Code Playgroud)
如果我正在使用的当前xml文件确实Test在Tests其工作正常的节点,但在另一个xml文件中该Tests节点不包含任何东西,它只是在那里没有明显的原因!?
XPATH中是否有命令执行此操作?就像是!!:
"/Document/Tests[NodeExist(Test)]
我有两种形式,一种是MainForm第二种形式DebugForm.MainForm有一个按钮,用于设置和显示DebugForm,并将引用传递给已打开的SerialPort:
private DebugForm DebugForm; //Field
private void menuToolsDebugger_Click(object sender, EventArgs e)
{
if (DebugForm != null)
{
DebugForm.BringToFront();
return;
}
DebugForm = new DebugForm(Connection);
DebugForm.Closed += delegate
{
WindowState = FormWindowState.Normal;
DebugForm = null;
};
DebugForm.Show();
}
Run Code Online (Sandbox Code Playgroud)
在DebugForm中,我附加了一个方法来处理DataReceivedserialport连接的事件(在DebugForm的构造函数中):
public DebugForm(SerialPort connection)
{
InitializeComponent();
Connection = connection;
Connection.DataReceived += Connection_DataReceived;
}
Run Code Online (Sandbox Code Playgroud)
然后在该Connection_DataReceived方法中,我更新DebugForm中的TextBox,即使用Invoke进行更新:
private void Connection_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
_buffer = Connection.ReadExisting();
Invoke(new EventHandler(AddReceivedPacketToTextBox));
}
Run Code Online (Sandbox Code Playgroud)
但我有一个问题.当我关闭DebugForm,它抛出一个ObjectDisposedException上Invoke(new EventHandler(AddReceivedPacketToTextBox));线.
我怎样才能解决这个问题?欢迎任何提示/帮助!
UPDATE …
我已将证书和密码提供给接受ssl连接的服务器.我试图建立与此服务器的连接,但身份验证失败,主要是因为我不知道如何使用我给出的文件和密码.
这是我的代码:
X509Certificate certificate = new X509Certificate(
@"c:\mySrvKeystore", KEY_PASSWORD);
public static bool ValidateCertificate(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors errors)
{
if (errors == SslPolicyErrors.None)
return true;
Console.WriteLine("Certificate error: {0}", errors);
return false;
}
public void RunClient(string address, int port)
{
Console.WriteLine("Starting client...");
var client = new TcpClient(address, port);
Console.WriteLine("Client connected.");
var stream = new SslStream(client.GetStream(),false,
ValidateCertificate, null);
try
{
stream.AuthenticateAsClient(address);
Console.WriteLine(stream.IsAuthenticated ? "Client authenticated." : "Client is not authenticated.");
//TODO constantly read from server!
}
catch (AuthenticationException ae) …Run Code Online (Sandbox Code Playgroud)