Listbox
-
Kannst du mir das bitte anhand eines Beispiels zeigen? Also ich meine die ganze Codezeile.
Danke!
-
Hast du schon eine Controlvariable für die Listbox?
Sonst gib mir bitte die ID.
-
Wie legt man eine Kontrollvariable an? Also die ID ist IDC_LIST_PORT.
-
Bruschnik schrieb:
Wie legt man eine Kontrollvariable an?
VC6 oder neuer?
((CListBox*)GetDlgItem(IDC_LIST_PORT))->AddString(_T("Gucke da...")); ((CListBox*)GetDlgItem(IDC_LIST_PORT))->AddString(_T("...ein Text"));
Sollte gehen, habs grade nicht getestet.
-
Nee noch das gute alte VC6

-
Wenn die Werte von Anfang an in der Listbox stehen soll dann schreibe ich doch die Zeile in CDialog::DoDataExchange(pDX);
oder?
-
Nein, auf keinen Fall!
Schreib es in OnInitDialog.
-
estartu schrieb:
Nein, auf keinen Fall!
Schreib es in OnInitDialog.
Kann man so pauschal nicht sagen. Wenn die Daten der Listbox sich nicht aus einem stabilen Vorrat ergeben, sondern sich als die eigentlichen Ergebnisdaten des Dialoges deuten lassen, dann gehört es IMHO schon in DoDataExchange.
Beispiel: CStringArray wird übergeben und der Dialog erlaubt Add/Delete per Userinterface.
Das man DoDataExchange dann natürlich speziell anpassen muss versteht sich...
-
Ich habe es jetzt hier eingefügt:
{
CDialog::OnInitDialog();// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
// wenn das Hauptfenster der Anwendung kein Dialogfeld ist
SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden
SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
((CListBox*)GetDlgItem(IDC_LIST_PORT))->AddString(_T("Gucke da..."));return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}und erhalte immer folgende Fehlermeldung
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\MYPROJECTS\Relais_neu\Relais_neuDlg.cpp(326) : warning C4091: '' : Ignoriert auf der linken Seite von 'void', wenn keine Variable deklariert wurde
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\MYPROJECTS\Relais_neu\Relais_neuDlg.cpp(326) : fatal error C1004: Unerwartetes Dateiende gefunden
Fehler beim Ausführen von cl.exe.
Browse-Informationsdatei wird erstellt...
BSCMAKE: error BK1506 : Datei '.\Debug\Relais_neuDlg.sbr' kann nicht geoeffnet werden: No such file or directory
Fehler beim Ausführen von bscmake.exe.
-
Martin Richter schrieb:
Das man DoDataExchange dann natürlich speziell anpassen muss versteht sich...
Das würde mich jetzt aber wirklich mal interessieren.

Ich habe das noch nie gebraucht, noch nie irgendwo gelesen oder gehört.@Bruschnik: Ich kann die Zeile so compilieren, der Fehler ist woanders.
Doppelklick mal auf die Fehlermeldung und zeig den Code dort.Das klingt nach einer } zuviel.
-
estartu schrieb:
Martin Richter schrieb:
Das man DoDataExchange dann natürlich speziell anpassen muss versteht sich...
Das würde mich jetzt aber wirklich mal interessieren.

Ich habe das noch nie gebraucht, noch nie irgendwo gelesen oder gehört.Nicht?

Ich muss sagen, dass ich das doch relativ häufig benutze. Z.B. für eigene Controls die halt noch irgendwas zusätzlich anzeigen. Es ist dann einfach sehr angenehm wenn Alles, wie gewohnt, mit UpdateData() funktioniert

-
Bruschnik schrieb:
erhalte immer folgende Fehlermeldung
...Relais_neuDlg.cpp(326) : warning C4091: '' : Ignoriert auf der linken Seite von 'void', wenn keine Variable deklariert wurde
Wäre toll gewesen, wenn du dazugeschrieben hättest, welche Zeile die 326 ist.
-
estartu schrieb:
Martin Richter schrieb:
Das man DoDataExchange dann natürlich speziell anpassen muss versteht sich...
Das würde mich jetzt aber wirklich mal interessieren.

Ich habe das noch nie gebraucht, noch nie irgendwo gelesen oder gehört.Ich verwende das sehr oft. Ausgangspunkt ist einfach der Ansatz, dass DoDataExchange alle Daten zwischen Datenmember und Dialog Controls austauscht.
Alle statischen Daten werden (feste Werte in ComboBoxen, Listen mit Checkboxen) werden in OnInitDialog vorbelegt.In DoDataExchnage gibt es dann so etwas.(Pseudocode)
if (pDX->m_bSaveAndValidate) { // Clear the collection and read result from control m_setIds.clear(); for (each selected list item) { m_setIds.insert(m_ctrl.GetItemData(hItem)); } } else { // Select all items in the control that are in our set for (each item in Set) { m_ctrl.SelectItemBySetData(); } }Dadurch bleibt DoDadaExchange der Bereich in dem die Daten wirklich hin und her geschaufelt werden und nicht einen Bereich in dem man Edit Controls austauscht und einen anderen in dem man die komplexeren Daten ausliest.
Ich hoffe das macht das ganze klarer!