任何人都可以帮我解决以下问题吗? : 我的winform应用程序中有两个表单。在form1中,我有一个用于打开form2的按钮。 在form2中,我有一个Listbox从XML获取他的项目:
private void FillListBox()
{
string filename = @"employee.xml";
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlNodeList xnList = doc.SelectNodes("/Information/username");
foreach (XmlNode xn in xnList)
{
ListboxUsername.Items.Add(xn.InnerText);
}
}
在form1中,我有一个组合框也可以从同一个XML文件中获取他的项目:
public void FillCombobox()
{
comboboxPersonen.Items.Clear();
string filename = @"emplyee.xml";
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlNodeList xnList = doc.SelectNodes("/Information/username");
foreach (XmlNode xn in xnList)
{
comboboxUsername.Items.Add(xn.InnerText);
}
}
在form2中,我可以编辑listboxUsername中的xmlnodelist。关闭form2时,我想要使用comboboxUsername中最新的项目。像asp.net中的回发,但在winforms应用程序中。有什么建议吗?
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
//acces comboboxusername in form1 to update it with recent xml list items
}
谢谢你的时间。
答案 0 :(得分:1)
如果您将Form2作为模式对话框打开,则可以在表单解除后访问该表单,如下所示:
private void cmdOpenForm2_Click( object sender, EventArgs e )
{
using ( var dlg = new Form2() )
{
if ( dlg.ShowDialog(parent) == DialogResult.OK )
{
// do stuff with dlg:
foreach(var itm in dlg.ListboxUsername.Items )
blah blah
}
}
}
答案 1 :(得分:0)
您可以使用
获取打开的表单Application.OpenForms
您可以使用以下方式获取所需的表格:
foreach(Form f in Application.OpenForms)
{
if (f.Name == "Form2")
{
//Do Stuff..
}
}
}
答案 2 :(得分:0)
使用Form1中的回调事件。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Open Form2
Form2 f = new Form2();
// Set callback
f.SetCallbackFromForm1(FillComboBox);
f.ShowDialog(this);
}
private void FillComboBox()
{
comboBox1.Items.Add("Sample1");
comboBox1.Items.Add("Sample2");
comboBox1.Items.Add("Sample3");
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
FormClosed += Form2_FormClosed;
}
// This is callback var
private Action callbackFromForm1;
// Set callback
public void SetCallbackFromForm1(Action callback)
{
callbackFromForm1 = callback;
}
void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
// When form closed, our callback will be called.
callbackFromForm1();
}
}
如果你需要在关闭时将一些对象(数据)从form2传输到form1,你可以使用必要的参数创建回调。