eine Checkbox durch seine Beschriftung sieht aus wie eine schreckliche Idee oben betrachten.
Es ist in der Tat machbar:
Index := CheckListBox.Items.IndexOf('Prog 1');
if (Index >= 0) and CheckListBox.Checked[Index] then
begin
{ checked }
end
else
begin
{ does not exist or unchecked }
end;
Aber es ist nicht der richtige Ansatz.
Der Zweck von TCheckListBox
ist es, eine Liste von Kontrollkästchen aus einigen Daten in einer Schleife zu generieren. Was ist in der Tat die way you are using it.
Ihr Versuch, das Kontrollkästchen anhand seiner Beschriftung zu suchen, zeigt an, dass Sie einen Code für jedes Kontrollkästchen schreiben möchten. Das widerspricht dem Zweck der TCheckListBox
.
Verwenden Sie stattdessen bei der Verarbeitung einer Benutzerauswahl den gleichen Ansatz, da beim Erstellen der Liste eine Schleife verwendet wird.
Die code I have shown you to generate the checkbox list, generiert nach dem Zweck eine Liste der zugehörigen Pfade mit den gleichen Indizes in Dirs: TStringList
.
Also diese Liste iterieren zusammen mit den Kontrollkästchen die Pfade zu verarbeiten:
{ Iterate the path list }
for Index := 0 to Dirs.Count - 1 do
begin
{ Is the associated checkbox checked? }
if CheckListBox.Checked[Index] then
begin
{ Process the path here }
MsgBox(Format('Processing path %s', [Dirs[Index]]), mbInformation, MB_OK);
{ In your case, you delete the folder }
DelTree(Dirs[Index], True, True, True);
end;
end;
Die oben ist eigentlich ähnlich dem Code, haben Sie bereits in meiner vorherigen Antwort.
Und es ist das gleiche Konzept, ich habe Ihnen in Ihrer noch eine andere Frage gezeigt: Inno Setup - Check if multiple folders exist.
Sollten einzelne Kontrollkästchen wirklich eine spezielle Verarbeitung erfordern (dh sie nicht über eine Liste von qualitativ gleichen Elemente darstellen), ist der richtige Weg, ihren Index an der Zeit, die Sie erzeugen an sie erinnern:
if ShouldAddItem1 then
Item1Index := CheckListBox.AddCheckBox(...)
else
Item1Index := -1;
if ShouldAddItem2 then
Item2Index := CheckListBox.AddCheckBox(...)
else
Item2Index := -1;
if (Item1Index >= 0) and CheckListBox.Checked[Item1Index] then
{ Process item 1 }
if (Item2Index >= 0) and CheckListBox.Checked[Item2Index] then
{ Process item 2 }
Wird 'CheckListBox.Items.IndexOf ('Item caption')' helfen, den Index zu finden? – Victoria
Können Sie uns etwas Hintergrund geben? Wofür brauchst du es speziell? [Meine Antwort auf Ihre vorherige Frage] (https://stackoverflow.com/a/44254371/850848) zeigt Ihnen, wie Sie die Checkboxen bearbeiten. –
Sie stellen tatsächlich immer wieder ähnliche Fragen: https://Stackoverflow.com/q/44274005/850848 - Es sieht so aus, als ob Sie das Problem von einer falschen Seite betrachten - Was wollen Sie also tun, wenn Sie eine Referenz bekommen? das Kontrollkästchen? Zeig uns etwas Code! Ein Kästchen nach seiner Überschrift zu suchen, sieht nach einer schrecklichen Idee aus. –