CComboBox (Pull-Down-Menü) verstecken!
-
Hallo,
mein Problem ist, dass ich nicht weiss, wie ich ein CComboBox-Feld verstecken kann. Ich hab schon versucht mir ein Zeiger mit GetDlgItem zu holen und in ein CComboBox-Feld zu konvertieren, und dann die ShowDropDown-Methode anzuwenden:
((CComboBox*)GetDlgItem(IDC_COMBO9))->ShowDropDown(FALSE);
jedoch hat das auch nicht viel gebracht...
weiss jemand Rat von Euch, wie ich eine DropDown-List verstecken kann, so das es nicht mehr auf dem Dialog angezeigt wird?
Gruss,
chullain
-
hä?
Also tut mir leid ich versteh nicht was du verstecken willst! Wenn du die Dropdownliste verstecken willst brauchst ja kein DropDown nehmen!
Wenn du die ganze Combo verstecken willst, wieso erzeugst du sie nicht erst wenn du sie wirklich brauchst?
Sorry vielleicht steh ich auch nur aufm Schlauch!
-
der hintergrund ist folgender.
Am Anfang, wenn ich mein Dialog aufrufe, wird eine Datenbank ausgelesen und alle Spalten einer bestimmten Tabelle werden dann für ein Datensatz in dem Dialog angezeigt. Wobei hingegen in meiner Drop-Down-Liste ein best. Feld (z.B. der Index) von allen Datensätzen ausgegeben wird. Nun hab ich die Möglichkeit ein Index auszuwählen, und anhand von diesem wird dann die Datenbank neu ausgelesen und alle anderen Felder in dem Dialog neu befüllt.Jetzt habe ich in meinem Dialog eine "NEU"-Funktion, mit der ich einen neuen Datensatz in meine Tabelle aufnehmen kann. So werden beim Druck auf den "NEU"-Button alle Felder in dem Dialog geleert, damit ich Eingaben tätigen kann.
Mein Gedanke war, da der "Index" auch von mir eingegeben werden soll, die Drop-Down-Liste, sprich die CComboBox zu verstecken und an dieser Stelle ein normales CEdit-Feld zu erstellen...
...das wollte ich deswegen machen, weil ich Probleme habe, mit dem Auslesen von der CComboBox...das Problem ist, wenn ich die ComboxBox leere, mit ResetContent, und jetzt eine Neueingabe tätige, weiss ich nicht, wie ich es auslesen soll, den der Selektionsindex (nSel) steht auf -1, wenn ich den Text mit GetLBText auslesen möchte...
...oder gibt es da Abhilfe?...puh, das war jetzt viel, ich hoffe, ich konnte Dir das Problem klarer darstellen
Gruss,
chullain
-
Die ganze ComboBox kannst du wie alle Steuerelemente so "verstecken":
GetDlgItem(ID_DER_COMBOBOX)->ShowWindow(FALSE);
-
Danke
-
Moment mach es doch einfach so dass du der Combobox eine Membervariable vom Ty CString zuweist ( geht auch zusätzlich zu CCombo) und dann kannst du den Wert dieser Member genau gleich verwenden wie bei einem Editfeld. So kannst du dann auch was in der Combo als eingabe was reinschreiben, das aber dann nicht in der Combo drin stehen muss. Die Member vom Typ CString kannst du also mit UpdateData(true) einlesen und wenn du ihr was zugewiesen hast kannste machen Updatedata(false) dann steht das drin, ohne dass es im Dropdown auftaucht. Ist wesentlich eleganter als die versteck variante!
Bei mir hab ich ähnliches, wenn ich jetzt eine Artikelnummer neu eingeben will in die Combobox, dann kann ich einfach statt über dropdown in das Feld clicken und meine neue Artikelnummer eingeben. Bei IDs vielleicht nicht so relevant, aber auch sehr schön, wenn du beispilsweise folgende Einträge hast:201
211
321
341
401Und du gibst oben ne 3 ein geht dein Focus auf 321 wenn du das meintest ENTER und als Text steht nun oben 321 in meinem Fall kann es dann sein ich geb 23 ein und er springt mir auf 231_111_111_111_R_05 wenn ich nämlich dann dazu das nächste eingeben will gib ich 23 ENTER BACKSPACE 6 ein und hab mir viel Tipparbeit gespart. Ich hoffe ich hab es einigermaßen verständlich erklärt. Einfach nochmal melden.
-
...hey, das ist nicht mal so schlecht, deine Idee
...danke, nochmal
...aber noch was anderes, wenn ich meine ComboBox befülle, dann will ich, dass die Reihenfolge eingehalten wird, wie ich auch reingeschrieben habe, jedoch sortiert mir das Programm die Reihenfolge nach Alphabet. Wie kann ich das abstellen, im Dialogeditor hab ich schon nachgeguckt, aber da gibts kein "Häkchen", dass ich das ausklicken kann...es gibt ne Varibale CB_SORT oder so, die wahrscheinlich gesetzt wurde, aber ich hab ja mein ComboBox nicht selbst erstellt alias Create(...).
Wie kann ich die Sortierung unterbinden?
Gruss,
chullain
-
Hm, ich tippe mal du fügst einen String mit AddString hinzu! Wenn du allerdings mit Setitemdata einen immer höheren Wert zugewiesen hast, sprich bei jedem mal ++ dann sagt dir ja der INdex in welcher Reihenfolge das eingetragen wurde. Wenn du nun an stelle von addString mal InsertString versuchst, kannst du ja den Index angeben an dem es eingefügt werden soll. Wenn du nun den Index aus SetItemData nimmst sollte es klappen!
-
danke, klappt jetzt wunderbar, habs mit InsertString gemacht...
Gruss,
chullain
-
Boah ich bin überrascht von mir selbst
ohne nachlesen in der MSDN und ohne es je probiert zu haben!
Na da freut es mich umso mehr wenn es jetzt klappt!