2017-11-26 7 views
-1

Ich habe Combobox in einer Form1 und Listbox in Form2. Die Listbox-Elemente werden mit XML-Daten gefüllt. Ich muss die Listbox-Elemente in der Combobox von Form2 zu Form1 zeigen und auch die Combobox aktualisieren, wenn Änderungen in der Listbox Form2 vorgenommen werden. Wie es geht? das ist, was ich in der form2 tat die Elemente aus xml listbox hinzuzufügen ..Füllen Combobox von 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);         
       } 
      } 
     } 
    } 
}   ` 
+1

Bitte geben Sie den Code ein, den Sie bisher versucht haben –

+0

Welche Änderungen müssen Sie in der Combobox vornehmen? –

+0

Die gleichen Artikel, die ich in der Form1 der Combobox anzeigen muss .. @ o_weisman –

Antwort

0

Soweit ich das .NET ListBox wissen hat keine Ereignisse, die ausgelöst werden, wenn das Element Sammlung der List-Box Änderungen (hinzufügen, entfernen) So wäre der einfachste Weg, um Ihr eigenes (Grundkonzept) zu implementieren:

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 
} 

Damit nicht direkt die List-Box verwenden, verwenden Sie die privaten Methoden AddItem und RemoveItem statt. Diese Methode wird das Ereignis ItemChanged auslösen. Auf diese Weise können Sie das Ereignis ItemChanged von Form1 abhören und die ComboBox-Elemente aktualisieren, wenn die listBox-Elemente geändert werden.

Verwandte Themen