将完整的子表单传递给另一个子表单
本文关键字:表单 另一个 | 更新日期: 2023-09-27 17:50:50
我看到很多页面和问题都涉及将值从一个表单传递到另一个表单。我想做点不一样的事。不是值,而是作为参数传递的整个表单。请不要,这不是MDI表格。
我有一个父窗体与2个按钮。其中一个按钮创建了一个Child1表单。另一个(可选)按钮调用不同的子表单编辑器。
第一个按钮是一个验证按钮,如果有效,将显示Child1表单,并显示一个充满键/值对的列表视图框。第二个是带有自己按钮的编辑器。如果其中一个(提交)按钮被按下,那么第一个Child1表单应该被更新为一个新的keyvaluepair。
我的问题是,我似乎不能得到Child1形式反映的变化。我不知道更新这个Child1表格最好的方法是什么我已经尝试过BeginUpdate with EndUpdate,并刷新它,现在所有的尝试,我已经有点迷路了。我希望有人能帮助我。
我实际上想做的是刷新ChildForm1,说它是一个收件箱,当一些东西被"保存"或从第二个子表单编辑器添加。在第二个子窗体编辑器中单击按钮后,第一个子窗体将刷新。
父形式: public ChildForm1 MyboxofValues;
private void btn1_Click(object sender, EventArgs e)
{
MyboxofValues = new ChildForm1();
MyboxofValues.Show();
}
private void btn2_Click(object sender, EventArgs e)
{
Editor myEditor = new Editor();
myEditor.Show();
}
ChildForm1:
public ChildForm1()
{
InitializeComponent();
updateMe();
}
public void updateMe()
{
listView1.Items.Clear();
if (MainCode.subRows.Count > 0)
{
foreach (KeyValuePair<string, string> element in MainCode.subRows)
{
ListViewItem lvi = new ListViewItem(element.Value);
lvi.SubItems.Add(element.Key);
listView1.Items.Add(lvi);
}
}
}
EditorForm:
private ChildForm1 originalForm = new ChildForm1();
private void btnSubmit_Click(object sender, EventArgs e)
{
originalForm.updateMe();
}
我相信这很容易,但我做不到。如果有人能帮忙,我会很感激,节省我的时间!如果有更好的方法来更新提交结果,也可以,请举例说明?
为了测试的目的,我为ChildForm1创建了一个"刷新"按钮,它可以工作!(它实际上只是调用updateMe())。所以这是一些奇怪的我想,我正在创建一个新的实例的形式,并试图改变这个不存在的(空)形式,而不是实际的ChildForm1。但是我想从编辑器表单中刷新listviewBox
与其让Editor
成为父窗体的"子"窗体,不如让它成为ChildForm
的子窗体(也就是父窗体的孙子)。当然,由于您没有使用MDI,这只是处理问题的一种逻辑方法,仅此而已。
与其让父节点创建Editor
,不如让ChildForm
创建它。当父窗体的第二个按钮被单击时,让它调用一个方法,如ChildForm
的CreateEditor
。当它创建编辑器时,它显然可以存储它以供以后的交互。
如果父表单需要使用Editor
做任何其他事情,它可以通过ChildForm
来完成。
我建议不要从另一个表单更新一个表单,而是将工作数据存储在一个对象中,如视图模型,并始终刷新您的表单。
看一下MVP模式,它对WinForms应用程序很有用。
http://martinfowler.com/eaaDev/ModelViewPresenter.html很大程度上是通过Servy敏锐的帮助。我不知道这是否对其他人有帮助,所以这是对我有用的。:
父窗体,MyBox,这是根据我最初认为它以前是ChildForm1:
public MyBox()
{
InitializeComponent();
updateMe();
}
public void updateMe()
{
listView1.Items.Clear();
if (MainCode.subRows.Count > 0)
{
foreach (KeyValuePair<string, string> element in MainCode.subRows)
{
ListViewItem lvi= new ListViewItem(element.Value);
lvi.SubItems.Add(element.Key);
listView1.Items.Add(lvi);
}
}
}
private void btnCreateEditor_Click(object sender, EventArgs e)
{
plainTextEditor editor = new plainTextEditor(this);
Form1.editorOpen = true;
editor.Show(this);
}
这个表单有一个按钮,它调用编辑器表单,现在看起来像这样:
public partial class Editor : Form
{
private MyBox listviewBoxForm;
public Editor(listviewBoxForm _form1)
{
InitializeComponent();
inboxForm = _form1;
}
}
其实很简单,只是没有马上看出来。我把它弄得比委派等需要的更复杂。