【问题标题】:Getting Form2 variable to Form1 (User text input in TextBox)将 Form2 变量获取到 Form1(TextBox 中的用户文本输入)
【发布时间】:2015-02-26 12:10:16
【问题描述】:

计划: 我想要求使用第二个 Form2 的用户输入一些文本。 当这个 Form2 关闭时,我想在 Form1 上的文本框中显示输入文本...

在按钮事件上,在 Form2 上我可以到达 Form1 的文本框:

Form1 form1 = new Form1();

还有:

form1.myText = "Test Name";

然后我关闭 Form2:

this.Close();

但是值“测试名称”没有出现在 form1 的文本框中... 我没有收到错误。

【问题讨论】:

  • 永恒的 Winforms 问题。加form1.Show(); 你不能通过反复试验来学习面向对象的编程。使用书籍或课程来学习基础知识。
  • @HansPassant 假设他说但值“测试名称”没有出现在 form1 的文本框中,我认为表单确实出现了。否则,您可能是对的。
  • @Nomistake 那么你不应该创建一个新的!
  • @DionV。好的,我这样做是为了访问 form1 中的文本框,但我想这不是正确的方法......谢谢
  • @HansPassant “你无法通过反复试验来学习面向对象编程。使用书籍或课程来学习基础知识”Waaaauw!

标签: c# .net winforms visual-studio


【解决方案1】:

当您调用new Form1() 时,会创建Form1 的新实例。您有两个 Form1 对象。这就是你的代码不起作用的原因。

如果您想加快速度,请将Form1 作为变量添加到Form2 类中。

public Form1 form1;

然后你可以在显示Form2之前设置它。

Form2 form2 = new Form2();
form2.form1 = this;
form2.Show();

记得删除这部分:Form1 form1 = new Form1();

现在您的代码应该可以工作了。

【讨论】:

  • 好的,在新解决方案上进行了测试。现在我将尝试在现有的上实现它...谢谢
  • 当然。当您启动您的应用程序 Form1 时创建。 Form2 不知道 Form1 的存在。这就是我设置form2.form1 = this 的原因。 this 表示创建的 Form1。
【解决方案2】:

在 Form2 上创建事件处理程序,并在从 Form1 打开 Form2 时挂钩此事件。在 form2 中,使用您自己的 eventargs 触发此事件,其中包含您需要在 Form1 中显示的文本。

另一个解决方案是行动。在 Form2 中创建属性 Action 并在打开 Form2 时设置此操作。当 Form2 关闭时,触发此操作,例如 _action.Invoke(textWhichUneed);

【讨论】:

    【解决方案3】:

    您应该在关闭之前进行赋值。例如

    form1.myText = "Test Name";
    this.Close();
    

    另外 form1 不应该被创建,而是通过。怎么把form1传给form2?

    【讨论】:

    • 这就是我所做的和描述的:-)
    • 如何访问 form1?
    • 能说下或者给个好的链接怎么传吗?我创建了一个新的,这就是导致问题的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    相关资源
    最近更新 更多