【问题标题】:Execute a Form2 method on Form2, whenever Form1 textBox value is changed每当 Form1 textBox 值发生更改时,在 Form2 上执行 Form2 方法
【发布时间】:2015-04-22 13:43:27
【问题描述】:

我希望我的“主表单”中的“婴儿”表单能够自我更新,每当我的主表单发生更改时,让我们通过示例说明这一点:

我的“宝贝”形态:

  public partial class Ventoemparedes : Form
{
    private Form1 Opener { get; set; }


    public Ventoemparedes(Form1 opener)
    {
      Initializecomponent();

      //stuff i wanna do whenever Form1 textBox.Text changes
      method1();
    }

    private void method1()
    { //does stuff
    }
}

我的主要形式:

public partial class Form1 : Form
{
  public Form1()
    {
      InitializeComponent();
    }

   private void textBox1_TextChanged(object sender, EventArgs e)
    {
        //execute method1 on Ventoemparedes somehow???
    }

    private void button1_Click(object sender, EventArgs e)
    {

        Ventoemparedes mostra = new Ventoemparedes(this);
        mostra.ShowDialog();

    }
}

在Form1 上,我有一个button 和一个textBox。 button 显示 Form2 窗口。 我想要做的是,每当 Form1 textBox 值发生变化时,method 写入 Form2 就会被执行,从而更新我的 Form2 窗口。

它应该表现得像“刷新”。

这样的事情还有可能吗?

我不太精通部分类和表单交互,所以如果这很容易做到,我深表歉意。

【问题讨论】:

  • 以一种形式发起事件并以另一种形式订阅它
  • 说明不清楚,

标签: c# winforms partial-classes


【解决方案1】:
  1. 在主表单中创建“婴儿”表单全局变量

    公共部分类 Form1 : Form {
    Ventoeemparedes mostra; ...

  2. 在'baby'表单上添加公共方法TextBoxFromMainChange和内部调用method1

    public void TextBoxFromMainChange() { this.method1(); }

  3. 终于在主窗体上的文本框更改调用'baby'窗体方法TextBoxFromMainChange

    private void textBox1_TextChanged(object sender, EventArgs e) { mostra.TextBoxFromMainChange(); }

【讨论】:

  • 我很惊讶得到答案 :) 谢谢。出了点问题,因为它给了我一个未处理的错误:(puu.sh/hmSq1/48dcd2b983.jpg“对象引用未设置为对象的实例”谢谢你的回答:)如果我在没有打开婴儿表单的情况下更改textBox 值,就会发生这种情况.如果我打开它,错误会有所不同,它会将我指向mostra.TextBoxFromMainChange(); 并说Object reference not set to an instance of an object. Use the "new" keyword to create a object instance.
  • @ng80092b 是的,你说你想在 button1 点击时打开婴儿表单,所以如果你在文本框中输入而不打开表单,你会得到空引用异常。如何防止这种情况?在文本框中更改首先检查“mostra”变量是否不为空,然后调用 mostra.TextBoxFromMainChange(); 'if(mostra !=null) { mostra.TextBoxFromMainChange(); }'
  • 即使打开了婴儿表单,我也会遇到类似的错误,puu.sh/hmTfK/6d7dbdd91e.png。此外,当我有 `if(mostra != null) 条件时,它根本不会更新任何内容,无论它是否打开了婴儿窗口
  • @ng80092b 在 mostra.TextBoxFromMainChange() 上设置断点并检查 mostra 对象属性
  • 感谢您的努力,我确信这接近解决方案,但是这段代码有问题,我将方法 1 更改为简单地显示 MessageBox 打招呼,它可以正常工作Form2,当我更改 Form1 的文本框时失败
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多