在Form1中,我有一个填充了char数组值(*)的文本框。然后在Form2中我更改其中一个数组值(将*更改为某个字母),我必须更新Form1文本框。但是当我按下按钮时 - 没有任何反应。 Form2代码段:
private void button2_Click(object sender, EventArgs e)
{
....
....
letter = (char)Form1.number;
textbox1.Text = letter.ToString(); //shows me the letter I'm replacing '*' with
}
private void button3_Click(object sender, EventArgs e)
{
frm1 = new Form1();
Form1.charArray[Convert.ToInt32(frm1.numericUpDown2.Value)] = letter; //which array value I'm changing
frm1.textBox2.Text = String.Empty;
for (int i = 0; i < frm1.numericUpDown1.Value; i++)
{
frm1.textBox2.Text += Form1.charArray[i];
}
}
答案 0 :(得分:1)
不是编辑您正在讨论的Form1
窗口,而是在事件处理程序中创建一个 new (但不可见)窗口并对其执行操作。
<强>解决方案:强>
由于您已经在使用某些字段(charArray
,number
),因此必须让此方法“访问”已存在的Form1
实例!
选项1:
正如您对charArray
和number
所做的那样,请向Form1
添加静态字段(类似public static Form1 instance;
),并为其指定正确的实例。例如,将Form1.instance = this;
放在Form1
的构造函数中。
选项2:
无论您在何处创建并显示Form2
窗口(我猜您的代码中都有类似new Form2().Show()
的内容,我敢打赌它可以访问您的Form1
实例 - 也许您甚至可以这样做从在 Form1
中),您可以将Form1
的正确实例作为构造函数参数传递,即更改Form2
的构造函数,使其接受参数输入Form1
,然后拨打new Form2(theRightInstanceOfForm1)
。
要点:
虽然“选项2”绝对是更清晰的选项,但我猜它会给你带来比“选项1”更多的麻烦:你不仅已经定义了几个静态字段(所以如果添加另一个静态字段真的没有区别),如果您正在使用Visual Studio Designer来设计Form2
,它会在您更改其构造函数后立即中断...