Listbox Control Inhalte

fujitsufan

Erfahrenes Mitglied
Hallo,

´ne ganz einfache Frage.

Ich habe ein Listbox Control.
Ich kann da Strings hineinschreiben.

Wie kann ich das ListboxControl wieder leeren?


Vielen Dank.

fujitsufan
 
Hallo Technipion,

ich benutze kein MFC.
Kann es, dass ich total auf dem Schlauch stehe.

Um eine Message abzusetzen muss ich doch zuerst das Handle des Listbox Feldes ermitteln.
Das sieht bei mir so aus:

HWND hListBox1;
this->hListBox1 = GetDlgItem ( this->hDlg , id_ListBox1 );

Dann setze ich die Message ab.
Das sieht bei mir so aus:

SendMessage(this->hListBox1, LB_RESETCONTENT, 0, 0);

Die Parameter 3 und 4 sind nicht so wichtig, nehme ich mal an.


Die Listbox interessiert die Message überhaupt nicht.

Mit freundlichen Grüßen
fujitsufan
 
Hallo fujitsufan

Möglicherweise wird dein Code nicht aufgerufen, ist habe es gerade getestet und die Listbox wird erfolgreich geleert:
C++:
ListBox_ResetContent(GetDlgItem(mWindow, IDC_CP_AVAIL_LIST));

ListBox_ResetContent ist ein Makro aus windowsx.h und sieht so aus:
C++:
#define ListBox_ResetContent(hwndCtl)               ((BOOL)(DWORD)SNDMSG((hwndCtl), LB_RESETCONTENT, 0L, 0L))

Grüsse
Cromon
 
Hallo,

jetzt habe ich die alte Listbox aus dem Dailog rausgeschmissen und eine neu eingefügt.
Siehe da, es funktioniert tadellos. Ich vermute, dass die Message ins Leere feuert.
Warum auch immer, vielleicht ein Konflikt mit der ID des Controls!? Egal, es tut.
Trotzdem vielen Dank!

Jetzt kommt aber schon das nächste Problem.
Ich möchte einen TreeView Node bzw. alle Nodes löschen um die Inhalt des TreeView neu zu gestalten.

Code:
hTreeView = GetDlgItem ( this->hDlg , id_TreeView );
if(Exist(id_TreeView))
{
	TreeView_DeleteAllItems(hTreeView);
}
Funktioniert auch nicht.
Dieses TreeView Contorl ist aber neu erstellt worden.

Habe was aus dem Netz geholt.
Aber was ist "treeView1" ? Ein Zeiger, aber auf was ?
Ich verfüge doch nur über die ID und den Window Handle des Controls.

Code:
// Removes currently selected node, or root if nothing
// is selected.
treeView1->Nodes->Remove(treeView1->SelectedNode);
// Clears all nodes.
treeView1->Nodes->Clear();

fujitsufan
 
Mit Nodes ist das .NET (sieht nach C++ mit CLI aus).

TreeView_DeleteAllItems ist schon richtig. Prüf mal, ob dein GetDlgItem überhaupt ein gültiges Handle zurückgibt. Das Problem hattest du ja schon bei der ListBox offenbar.
 
Hallo,

jetzt geht´s.

Code:
hTreeView = GetDlgItem ( this->hDlg , id_TreeView );
if(Exist(id_TreeView))
{
    TreeView_DeleteAllItems(hTreeView);
}

Ich vermute stark, dass eine Kollision der IDs die Ursache ist.
Ich habe einen anderen Dialog deaktiviert, in dem ein Control die gleiche ID hatte.
Gleiche IDs sind doch zulässig so fern diese in verschiedenen Dialogklassen verwaltet werden, oder !?

Vielen Dank!
fujitsufan
 
Gleiche IDs sind auch so kein Problem, ausser man versucht dann, ein Control anhand der ID zu finden :)

Wenn du doch kein MFC benutzt, müsstest du doch die CreateWindow-Aufrufe selber machen. An der Stelle kannst du das HWND abgreifen, damit ist die Zuordnung eindeutig.
 
Zurück