ListView und ComboBox Problem



  • hi,

    ich habe eine form in der eine combobox und dadrunter eine listview angezeigt werden. nun frage ich mich wie ich es am sinnvollsten umsetzen kann das bei einem doppelklick event in der listbox der text in der combobox wird.

    ich habe mir dazu eine eigene klasse MyListView geschrieben die von ListView erbt geschrieben:

    public class MyListView : ListView
    

    in dieser fange ich das doppelklicken ab:

    protected override void OnDoubleClick(EventArgs Ea)
    

    das problem bei der sache ich will das diese gesamte form in einer bestimmten anzahl von tabs erstellt wird.

    das ganze sieht dann ungefähr so aus:
    http://img204.imageshack.us/img204/5528/untitledcl7.jpg

    würde mich über ansatz vorschläge freuen 🙂



  • Hmm, wo ist denn das Problem? Füg doch Deiner ListView-Klasse einfach eine Referenz auf die Combobox hinzu und aktualisier diese Referenz in der 'OnDoubleClick'-Methode.



  • sorry bin nicht sehr geübt in c# das ist das problem 😉
    danke für den tip habe es wie unten beschrieben gelöst
    sollte dies dann ungefähr so aussehen?

    public class ListViewEx : ListView
    {
        ...
    
        public ComboBox refComboBox;
    
        protected override void OnDoubleClick(EventArgs Ea)
        {
            ...
            refComboBox.Items.Add(strParentDirectory);
        }
    
        ...
    }
    

    und in der form:

    private ComboBox ComboBox1;
    private MyListView MyList1;
    
    ..
    
    MyList1.refComboBox = ComboBox1;
    


  • dmt schrieb:

    sollte dies dann ungefähr so aussehen?

    So ähnlich. Allgemein gibt es die Regel, Felder nie direkt public zu machen sondern immer hinter einer Property zu verstecken. Das hat den Vorteil, dass man evtl. etwas an der Implementierung ändern kann, ohne dass sich die Schnittstelle ändert.

    Also eher so:

    public class ListViewEx : ListView
    {
        // …
    
        private ComboBox m_RefComboBox;
    
        public ComboBox RefComboBox
        {
            get { return m_RefComboBox; }
            set { m_RefComboBox = value; }
        }
    
        protected override void OnDoubleClick(EventArgs Ea)
        {
            // …
            RefComboBox.Items.Add(strParentDirectory);
        }
    
        // …
    }
    
    // und in der Form:
    private ComboBox ComboBox1;
    private MyListView MyList1;
    
    MyList1.RefComboBox = ComboBox1;
    


  • ok danke für deine hilfe



  • dmt schrieb:

    hi,

    ich habe mir dazu eine eigene klasse MyListView geschrieben die von ListView erbt geschrieben:

    public class MyListView : ListView
    

    in dieser fange ich das doppelklicken ab:

    protected override void OnDoubleClick(EventArgs Ea)
    

    Warum eigendliche eine eigene Klasse ableiten? (oder gibt es noch andere Gründe dafür? ausser dem hier besprochenen?

    Du könntest das doch auch so machen, dann hast Du das Problem mit dem Zugriff auf die Combobox gar nicht.

    partial class YourForm : Form
    {
       ComboBox box = new ComboBox()
       ListView lv = new Listview();
    
       public YourForm()
       {
          InitializeComponents()
          lv.MouseDoubleClick += new MouseEventHandler(lv_MouseDoubleClick);
       }
    
       void lv_MouseDoubleClick(object sender, MouseEventArgs e)
       {
           // Nur der Vollstöändigkeit halber, in dem Beispiel ist listview == lv
           ListView listview = sender as ListView;
    
           box.Items.Add(listview.SelectItem);
       }
    

Anmelden zum Antworten