第二种形式是单击按钮时弹出的,用户可以为方法输入一些参数,将输入保存在变量中,然后将结果解析为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 )
}
}
}
}
如您在此处看到的,用户输入的值分别为Height
,Width
和Framerate
。如我所解释的,它将其解析为一个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
用于其他地方。
答案 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。