【问题标题】:Can't edit Form1 textbox from Form2 [duplicate]无法从 Form2 编辑 Form1 文本框 [重复]
【发布时间】:2015-08-31 08:07:28
【问题描述】:

在 Form1 中,我有一个用 char 数组值 (*) 填充的文本框。然后在 Form2 中,我更改了一个数组值(将 * 更改为某个字母),并且我必须更新 Form1 文本框。但是当我按下按钮时 - 没有任何反应。 Form2代码sn-p:

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

【问题讨论】:

  • 您没有编辑对您可见的Form1-instance。相反,您在此处创建一个新的并更改它(但永远不要显示它 - 这将导致两个 Form1-windows 可见)
  • 所以我必须像 Form1.textBox2.Text += Form1.charArray[i] 一样编辑行?
  • 如果您声明 textBox2 static 并为其分配正确的值,这可能会起作用...阅读我的答案以获取更多选项:)

标签: c# winforms


【解决方案1】:

不是编辑您正在谈论的Form1-window,而是在您的事件处理程序中创建一个(但不可见)并执行您的操作。

解决方案:

正如您已经在处理某些字段(charArraynumber),您必须让此方法“访问”已经存在的 Form1 实例!

选项 1: 正如您对charArraynumber 所做的那样,将静态字段添加到Form1(类似于public static Form1 instance;),并为其分配正确的实例。例如,将Form1.instance = this; 放在Form1 的构造函数中。

选项 2: 无论您在哪里创建和显示您的 Form2-window(我猜您的代码中有类似 new Form2().Show() 的东西,我敢打赌它可以访问您的 Form1 实例 - 也许您甚至可以从 within Form1),您可以将Form1 的正确实例作为构造函数参数传递,即您更改Form2 的构造函数,使其接受Form1 类型的参数,然后调用new Form2(theRightInstanceOfForm1)

总结: 尽管“选项 2”绝对是更干净的选项,但我想它会给您带来比“选项 1”更多的麻烦:您不仅已经定义了几个静态字段(因此添加另一个字段并没有真正的区别),如果您正在使用 Visual Studio 设计器来设计 Form2,一旦您更改其构造函数,它就会中断...

【讨论】:

  • 如果可能,我会避免使用选项 1 - 从长远来看,static 字段会给您带来更多麻烦。选项 2 是要走的路,恕我直言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多