2017-11-26 19 views
-1

私は1つのform1にコンボボックスを持ち、form2にはリストボックスを持っています。リストボックスの項目はxmlデータで埋められます。 Form2からForm1へのコンボボックスのリストボックス項目を表示し、form2リストボックスで行った変更があればコンボボックスも更新する必要があります。どうやってするの?これは私の知る限りは、.NETのListBoxは、リストボックスの変更のアイテムコレクション発射されるすべてのイベントを持っていない知っているように..私はXMLからリストボックスに項目を追加するためのForm2に何をしたかコンボボックスをリストボックスから作成する

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);         
       } 
      } 
     } 
    } 
}   ` 
+1

これまでに試したコードを投稿してください。 –

+0

コンボボックスにどのような変更を反映させる必要がありますか? –

+0

私はform1のコンボボックスに表示する必要がある同じ項目です。@ o_weisman –

答えて

0

です(削除を追加)。だから、最も簡単な方法は、あなた自身の(基本概念)を実現するために、次のようになります。これにより

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 
} 

は、直接リストボックス使用し、プライベートメソッドの代わりにAddItemRemoveItemを使用しないでください。このメソッドはItemChangedイベントを発生させます。こうすれば、Form1からItemChangedイベントを聞くことができ、listBox項目が変更された場合にComboBox項目を更新できます。

関連する問題