使用从主窗体启动的子窗体上的变量更新mainform上的文本框

时间:2010-08-23 12:23:41

标签: c# winforms

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

如何实现此功能?

4 个答案:

答案 0 :(得分:2)

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

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

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

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

希望这有帮助。

答案 1 :(得分:1)

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

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

你的主表单现在可能有类似的代码(如果我错过了某些内容,请暂时不要使用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;

答案 2 :(得分:1)

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

如果您希望在不关闭子窗体的情况下执行此操作,则可以在主窗体上创建一个函数来更改文本框。然后子表单将调用该函数。

答案 3 :(得分:1)

实现这种情况的最佳方法是clockWize和Hans Passants的建议。 那怎么样?

形式为您的文本框写一个属性,就像这样。

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

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

}