Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表框填充组合框_C#_Winforms - Fatal编程技术网

C# 从列表框填充组合框

C# 从列表框填充组合框,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()

我有一个表单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();
    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
}