我正在尝试为串行端口开发Windows表单应用程序。我的申请表中有不同的表格。所以传感器数据的写入值以不同的形式显示。我要做的是当我改变传感器写入数据的值时,它必须改变传感器的值。我以同样的形式尝试了它。但是当我尝试另一个表格时,它会显示这个例外:
System.FormatException:'输入字符串格式不正确。'
我尝试使用属性。我的代码如下:
在配置表单中,我创建了一个属性,并以相同的形式调用按钮
public partial class config : Form
{
public string _txtRsltDensity
{
get { return txtRsltDensity.Text; }
set { txtRsltDensity.Text = value; }
}
private void btnRsltDensity_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
int val = Convert.ToInt32(_txtRsltDensity);
bool res = Int32.TryParse(_txtRsltDensity, out val);
if (res == true && val > -1 && val < 2)
{
f1.Density();// this is function created in main form
}
}
}
首先在主窗体中创建了一个传感器命令,然后我创建了一个函数来在传感器中写入新值
public string cmdMake(int cmd, int rw)
{
int cmdLen = 0;
string param = "";
string strCmd = "D";
AsciiCode ascCode = new AsciiCode();
strCmd = strCmd + Convert.ToInt32(numSlave.Value).ToString("X2");
if (rw == CMD_RD) {
strCmd = strCmd + "07" + cmd.ToString("X2");
strCmd = strCmd + dterr_chk.CalCRC16(strCmd);
}
else
{
switch (cmd)
{
case 13:
config C = new config();
param = dtConv.DblToStr(double.Parse(C.txtRsltDensity.Text), 0, 2, 0);// here show the exception may be because the value of textbox is zero
break;
}
cmdLen = 7 + param.Length;
strCmd = strCmd + cmdLen.ToString("X2") + cmd.ToString("X2") + param;
strCmd = strCmd + dterr_chk.CalCRC16(strCmd);
}
strCmd = strCmd + ascCode.STR_CRLF;
return (strCmd);
}
答案 0 :(得分:2)
我想我理解你的问题。想象一下这是你的主要形式:
private Button1_Click(object sender, EventArgs e)
{
config c = new config();
c.Show();
}
private string cmdMake(int cmd, int rw)
{
config c = new config();
double val = double.Parse(c.Property);
}
您有两个配置实例。为了比喻:你有两辆相同品牌和型号的车,但它们是不同的车。对一个的任何更改都不会在另一个中生效,因为它们是不同的汽车。
您可以将配置移动到主表单的范围内,这将为您提供config
的单个实例:
public class MainForm : MainForm
{
config c = new config();
private Button1_Click(object sender, EventArgs e)
{
c.Show();
}
private string cmdMake(int cmd, int rw)
{
double val = double.Parse(c.Property);
}
}
现在,解析可能是一个问题。您应该使用TryParse
- 如果数字无效,它将返回false
而不是抛出异常。
你可以像这样使用它:
dobule val;
if (!double.TryParse(c.Property, out val))
{
// parsing c.Property failed. do something to handle it
}