【问题标题】:Updating textbox on mainform with a variable on a child form that is launched from main form使用从主窗体启动的子窗体上的变量更新主窗体上的文本框
【发布时间】:2010-08-23 12:23:40
【问题描述】:

我有一个 Windows 窗体应用程序。主窗体有一个文本框和一个用于启动另一个窗体的按钮。当另一个表单启动时,两个表单都在屏幕上(但启动的表单是模态的)。子窗体有一个文本框和按钮,当按下按钮时,我希望主窗体(父窗体)上的文本框用子窗体文本框中的值进行更新。

这个功能是如何实现的?

【问题讨论】:

  • 向表单类添加事件。

标签: c# winforms


【解决方案1】:

理想情况下,您希望避免两种形式相互依赖,这可以通过接口来实现:

public interface IMainView
{
  public void UpdateValue(string val);
}

public interface IChildView
{
  public void Show(IMainView parent);
}

让主窗体实现 IMainView,子窗体实现 IChildView,父窗体调用 child.show(this),子窗体调用 parent.UpdateValue(blah);

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果单击按钮时子窗体关闭,您可以在子窗体上放置一个包含文本框值的公共属性。那么主窗体调用 ShowDialog 后就可以读取这个属性了。

    如果您希望在不关闭子窗体的情况下发生这种情况,您可以在主窗体上创建一个函数来更改文本框。然后子窗体会调用该函数。

    【讨论】:

      【解决方案3】:

      实现这种情况的最佳方法是clockWize 和Hans Passants 的建议。 但那又如何呢?

      parent 表单中为您的文本框编写一个属性,如下所示。

      public string TextBoxText
      {
      get { return txtTextBox.Text;}
      set { txtTextBox.Text = value;}
      }
      

      当您打开子窗体时设置所有者。

      ChildForm f = new ChildForm();
      f.Owner = this;
      f.Show();
      

      子窗体按钮点击事件创建一个事件处理程序。

      public Button1_Click(object sender; EventArgs e)
      {
      ParentForm f = (ParentForm)this.Owner;
      f.TextBoxText = txtChildTextBox.Text;
      }
      

      我没有编译代码;所以可能有错误:)

      }

      【讨论】:

        【解决方案4】:

        当按下按钮关闭已启动的表单时,您将返回主表单-已启动表单的文本框仍在范围内。

        关闭表单只是改变对象的状态,而不是处理它。因此,在从主表单启动表单的按钮事件处理程序中,启动模式窗口后的下一行,它可以从它启动的对象访问文本,因为文本框是该表单对象的子对象。除非您在另一个线程中启动模态窗口,否则我不会认为您是模态窗口,否则当它关闭时,它应该转到启动它的按钮事件处理程序中的下一行。

        你的主窗体现在可能有类似这样的代码(有一段时间没有做 winforms,如果我错过了什么,请多多包涵):

        public void Button1_Click(object sender, ClickEventArgs e)
        {
            SomeFormIWantToLaunch launchForm = new SomeFormIWantToLaunch();
            launchForm.ShowDialog(this);
        }
        

        您只需在launchForm.ShowDialog(this); 之后添加类似:

        this.SomeTextBox.Text = launchForm.ATextBox.Text;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-23
          • 1970-01-01
          • 2012-11-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多