我有一个Windows窗体应用。主窗体有一个文本框和一个用于启动另一个窗体的按钮。启动另一个表单时,两个表单都在屏幕上(但启动的表单是模态的)。子表单有一个文本框和按钮,按下按钮时,我希望主表单(父表单)上的文本框更新为子表单上文本框中的值。
如何实现此功能?
答案 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;
}
我没有编译代码;所以可能有错误:)
}