C# 从列表框填充组合框
我有一个表单1中的组合框和表单2中的列表框。列表框项目由xml数据填充。我需要在组合框中显示从form2到form1的列表框项目,如果form2列表框中有任何更改,还需要更新组合框。怎么做?这就是我在form2中所做的,将项目从xml添加到listboxC# 从列表框填充组合框,c#,winforms,C#,Winforms,我有一个表单1中的组合框和表单2中的列表框。列表框项目由xml数据填充。我需要在组合框中显示从form2到form1的列表框项目,如果form2列表框中有任何更改,还需要更新组合框。怎么做?这就是我在form2中所做的,将项目从xml添加到listbox XmlDocument doc = new XmlDocument(); if (File.Exists(path_of_xml)) { doc.Load(path_of_xml); listBox1.Items.Clear()
XmlDocument doc = new XmlDocument();
if (File.Exists(path_of_xml))
{
doc.Load(path_of_xml);
listBox1.Items.Clear();
foreach (XmlNode node in doc.ChildNodes)
{
if (node.Name == "DEVICES")
{
foreach (XmlNode node_of_node in node.ChildNodes)
{
if (node_of_node.Name == "Device")
{
string name = node_of_node["DeviceName"].InnerText;
string ip = node_of_node["IPAddress"].InnerText;
listBox1.Items.Add(name + "-" + ip);
}
}
}
}
} `
据我所知,.NET ListBox没有在ListBox的项集合更改(添加、删除)时触发的任何事件。因此,最简单的方法是实现您自己的(基本概念):
公共类表单2:表单
{
公共事件事件处理程序项已更改;
受保护的虚拟void FireItemChanged(对象o,操作a)
{
var e=项目变更;
调用(这个,新的itemchangedventargs(o,a));
}
专用void附加项(对象o)
{
列表框1.项目。添加(o);
FireItemChanged(o,Action.Added);
}
私有void removietem(对象o)
{
列表框1.项目。移除(o);
FireItemChanged(o,动作。移除);
}
}
公共类ItemChangedEventArgs:EventArgs
{
公共对象项{get;private set;}
公共操作操作{get;private set;}
public ItemChangedEventArgs(对象项、操作)
{
项目=项目;
行动=行动;
}
}
公开枚举操作
{
补充,
远离的
}
因此,不要直接使用列表框,而是使用私有方法
AddItem
和removieItem
。此方法将引发ItemChanged
事件。通过这种方式,您可以收听Form1中的ItemChanged
事件,并在列表框项目发生更改时更新组合框项目。请发布您迄今为止尝试过的任何代码,您需要在组合框中反映哪些更改?我需要在Form1中向组合框显示的相同项目。@o_weismanThat没有更改。这只是用相同的列表填充两个控件。
public class Form2: Form
{
public event EventHandler<ItemChangedEventArgs> ItemChanged;
protected virtual void FireItemChanged(object o, Action a)
{
var e = ItemChanged;
e?.Invoke(this, new ItemChangedEventArgs(o, a));
}
private void AddItem(object o)
{
listBox1.Items.Add(o);
FireItemChanged(o, Action.Added);
}
private void RemoveItem(object o)
{
listBox1.Items.Remove(o);
FireItemChanged(o, Action.Removed);
}
}
public class ItemChangedEventArgs: EventArgs
{
public object Item {get; private set;}
public Action Action {get; private set;}
public ItemChangedEventArgs(object item, Action action)
{
Item = item;
Action = action;
}
}
public enum Action
{
Added,
Removed
}