MFC Listenfelder verknüpfen/gleichhalten???
lima-city → Forum → Programmiersprachen → C/C++ und D
angelegten funktion
auswahl
beginnen
control
daten
dialog
funktion
gen
information
item
klasse
klicken
lokale variable
normalen steuerelementen
schreiten
schwer zwei
stehen
steuerelement
variable
zustand
-
Moin,
habe da eine Frage. Ich habe drei Listenfelder, wenn ich jetzt im ersten z.B. auf den vierten Eintrag klicke, sollen in den anderen beiden feldern auch die vierten Eintr?e markiert sein. Wenn es geht sollten die vielleicht auch alle in einer Reihe stehen (also nebeneinander)...
Kann mir da jemand helfen?
Danke! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Eigentlich ist das nicht schwer. Zwei Informationen fehlen allerdings noch:
1. Welche Klasse benutzt du f?r Listenfelder (z.B. CListBox o. CListCtrl)?
2. Hast du die Listenfelder manuell erstellt oder einfach per Drag&Drop in Visual C++? -
Ich habe CListBoxen und habe die mit den normalen steuerelementen erstellt und dann mit Daten aus einer Datei gef?llt!
-
Um das zu erreichen, was du haben willst, musst du folgende Dinge tun:
1.:
Im Klassenassistenten (Rechtsklick irgendwohin und dann aus dem Men? ausw?hlen) auf den Reiter "Membervariablen" gehen. Hier siehst du in der Tabelle auf der linken Seite die Ressourcenbezeichner f?r die Steuerelemente, unter anderem auch f?r deine Listboxen. Wenn du nicht mehr weisst, wie deine Listboxen genau heissen, dann ?ffne den Dialogeditor, markiere die jeweilige Listbox und dr?ck Enter. Auf dem ersten Reiter m?sste eine der Bezeichnungen als ID stehen. Such dir im Klassenassistenten die Listboxen aus. Markier sie und klick auf "Variable hinzuf?gen". Im drauffolgenden Dialog vergibst du der neuen Variable einen Namen (empfehle die mit m_ctrl... beginnen zu lassen) und stellst unter Kategorie um von Wert auf Control. Mach das f?r jede der Listboxen, die mit der Geschichte was zu tun haben.
2.:
Geh im Klassenassistenten auf den ersten Reiter (Nachrichtenblabla...) und such dir die Listbox aus, die geklickt wird, um die andere zu ?ndern. Markier sie. Markier dann unter "Nachrichten" auf der rechten Seite LBN_SELCHANGE. Dr?ck dann "Funktion hinzuf?gen", vergib der Funktion einen Namen (kannst den angebotenen ruhig ?bernehmen) und klick dann auf "Code bearbeiten".
3.:
Nach Punkt 2 hat sich wieder der Quelltext ge?ffnet. Du bist jetzt in der neu angelegten Funktion. Hier musst du einfach nur dir die aktuelle Auswahl der steuernden Listbox geben lassen und dann die Auswahl der zu steuernden Listbox auf den selben Wert setzen. Beispiel: Wenn ich in Schritt 1 m_ctrlList1 f?r die steuernde Listbox und m_ctrlList2 f?r die zu steuernde Listbox erstellt habe, dann w?rde in der Funktion nur eine Zeile stehen:
m_ctrlList2.SetCurSel(m_ctrlList1.GetCurSel());
Noch paar Erkl?rungen:
Im ersten Schritt lassen wir uns vom Klassenassistenten eine Klasse bereitstellen, mit der wir direkt auf das Control bzw. die Listbox zugreifen k?nnen. Das ist vor allem wichtig, um mehr zu machen als nur Daten mit dem Control auszutauschen.
Im zweiten Schritt lassen wir uns eine Funktion erstellen, die jedes Mal aufgerufen wird, wenn in der Listbox die Auswahl ge?ndert wird. Das sind sogenannte Callback Funktionen, die in der MFC gekapselt sind. -
Ich habs zwar nicht ausprobiert, aber eines musst Du beachten:
Wenn Du dieses "umselektieren" von allen 3 Listboxen aus machen willst, kommst Du leicht in eine Endlosschleife, weil 1 aktualisiert 2 -> dort wird SelChange aufgerufen und aktualisiert 1 -> SelChange .....
Definiere entweder eine NICHT LOKALE Variable
bool m_bChanging,
welche im ersten SelChange abgefragt und auf true gesetzt wird, und damit die anderen SelChanges deaktiviert, oder mach es ?ber die
On_Bn_Clicked (sprich, wenn Du mit der MAUS draufklickst, und nicht im SelChange!!!)
Gucci -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage