由于某些奇怪的原因,解析int不起作用

时间:2020-08-11 00:31:39

标签: c# winforms

第二种形式是单击按钮时弹出的,用户可以为方法输入一些参数,将输入保存在变量中,然后将结果解析为int(因此可以在内部使用它我的方法)。现在,解析后,该值似乎是NULL,与用户在文本框中输入的内容相反。

  var displayproperties = new int[3];
            using (Form2 form = new Form2())
            {
                try
                {
                    if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        int i = 0;
                        while (i == 0) 
                        {
                        if (form.click) // ok button is clicked
                        {
                            // parse values
                            displayproperties[0] = int.Parse(form.Height);
                            displayproperties[1] = int.Parse(form.Width);
                            displayproperties[2] = int.Parse(form.Framerate);
                            goto break_0; // break out of loop ( loop is to check when button is clicked )
                        }
                    }
                }
            }

如您在此处看到的,用户输入的值分别为HeightWidthFramerate。如我所解释的,它将其解析为一个int,并将其存储在displayproperties int数组中。 这是第二种形式:

 public string Height { get; set; }
        public string Width { get; set; }
        public string Framerate { get; set; }

        public bool click = false; 
        public Form2()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e){}
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            Height = height.Text; 
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            Width = width.Text; 
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            Framerate = framerate.Text; 
        }

        public void OK_Click(object sender, EventArgs e)
        {
            click = true;            
        }

最终,将值传递给此类: public Class1(int width, int height) 但是,我收到一个超出范围的异常,说该值必须大于零。不用说,我输入的值肯定大于零(分别为800、600、60),其中60用于其他地方。

1 个答案:

答案 0 :(得分:1)

由于我的评论建议对您有用,因此我将其添加为答案。

从您所说的看来,您似乎没有在任何地方设置DialogResult,因此从不输入条件语句是因为不满足条件。

您应该设置对话框结果并关闭OK_Click中的表单:

public void OK_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
    this.Close();       
}

然后您应该从主表单中删除多余的代码:

var displayproperties = new int[3];
using (Form2 form = new Form2())
{
    try
    {
        if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            // parse values
            displayproperties[0] = int.Parse(form.Height);
            displayproperties[1] = int.Parse(form.Width);
            displayproperties[2] = int.Parse(form.Framerate);
        }
    }
}

对话框结果将用作您的click属性,因此不再需要此属性。顺便说一句,我建议改用TryParse,以便您可以主动检查输入值是否为有效整数,而不是在抛出异常之前将其保留。

一个例子:

string a = "hello"; // substitute user input here
int result;
if (!int.TryParse(a, out result))
{
    MessageBox.Show($"{a} isn't a number!");
    return;
}

MessageBox.Show($"Your integer is {result}");

如果您不熟悉编程,建议您熟悉如何使用调试器。在单步执行代码时设置断点并检查值将很快发现问题所在。微软为此提供了tutorial