无法从Form2编辑Form1文本框

时间:2015-08-30 23:51:28

标签: c# winforms

在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];
            }
        }

1 个答案:

答案 0 :(得分:1)

不是编辑您正在讨论的Form1窗口,而是在事件处理程序中创建一个 new (但不可见)窗口并对其执行操作。

<强>解决方案:

由于您已经在使用某些字段(charArraynumber),因此必须让此方法“访问”已存在的Form1实例!

选项1: 正如您对charArraynumber所做的那样,请向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,它会在您更改其构造函数后立即中断...