属性不适用于从另一个表单获取值

时间:2018-04-23 06:05:50

标签: c#

我正在尝试为串行端口开发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);
    }

1 个答案:

答案 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
}