![]() |
Combobox-abhängig - Checkbox auf true setzen
in Form.create habe ich Groupboxen erstellt und darauf labels, edits, comboboxen und Checkboxen platziert.
Mein Problem besteht nun darin, dass wenn ich in Combobox3 z.B. Rechnung auswähle, dann sollen die beiden Checkboxen auf true gesetzt werden. Er ruft auch die richtige Funktion auf, in der die Checkboxen auf true gesetzt werden, es kommt keine Fehlermeldung, aber die Häckchen werden dort nicht angezeigt. warum? Das ist der Quellcode an der stelle:
Delphi-Quellcode:
if pos('Rechnung', TComboBox(Sender).Text) > 0 then begin
for i := low(a_chk) to high(a_chk) do begin a_chk[i].Checked:= true; Form2.Update; end; |
Re: Combobox-abhängig - Checkbox auf true setzen
Dann sind es vermutlich nicht die Checkboxen die du erwartest sondern ganz andere. Das Füllen dieser Liste vielleicht überprüfen oder Debuggen um welche Checkboxen es sich handelt.
|
Re: Combobox-abhängig - Checkbox auf true setzen
Hi,
da hilft nur debuggen. Setz einen Breakpoint auf die Zeile
Delphi-Quellcode:
und prüfe ob der Debugger da stoppt und ob und welche Checkbox in dem array aufgerufen wird.
a_chk[i].Checked:= true;
Dann stellt ich die Frage, ob dein dyn. Array auch gesetz ist (SetLength). Wenn nicht, dann wird zwar die Funktion angesprungen aber high liefert -1 und die schleife wird nicht ausgeführt. Gruß oki |
Re: Combobox-abhängig - Checkbox auf true setzen
Hast Du die Checkboxen in einem Array angelegt, dann sollte Dein Ansatz eigentlich funktionieren
Ansonsten solltest Du mit FindComponent arbeiten. Dazu findest Du genügend Beispiele im Forum. Grüße Klaus |
Re: Combobox-abhängig - Checkbox auf true setzen
Ja, ich habe die beiden (es sind nur zwei) in einem Array angelegt und er springt in die Funktion und geht bei durch und setzt beide auf true.
Set Length ist auch gesetzt wenn ich ganz am Anfang, wo ich die Checkboxen der Groupbox zuordne, sie auf true setze, dann werden die Hacken auch angezeigt, aber wenn ich das jetzt erst mache, wenn ich aus der Combox einen Eintrag ausgewählt habe, dann funktioniert es nicht |
Re: Combobox-abhängig - Checkbox auf true setzen
Hallo Susanne,
spielt sich alles auf Form2 ab? Warum hast du den Kopf des event handlers in deinem Code-Beispiel weggelassen? Hast du Code für das OnClick-Event der CheckBoxen? Was passiert dort? Grüße vom marabu |
Re: Combobox-abhängig - Checkbox auf true setzen
auf form2 ist eine Groupbox und auf der befinden sich die beiden Checkboxen
ich habe kein Onclick-Event für die Checkboxen in FormCreate mache ich das: ich prüfe von den Koordinaten her in welche Groupbox die Checkbox gehört und setze dann entsprechend diejenige Groupbox als parent
Delphi-Quellcode:
SetLength(a_chk,i_chkCnt);
for i := low(a_chk) to high(a_chk) do begin for iii := low(a_Gbx) to high(a_Gbx) do begin i_GbX := a_Gbx[iii].Left; i_GbY := a_Gbx[iii].Top; i_GbH := a_Gbx[iii].height + i_GbY; i_GbB := a_Gbx[iii].width + i_GbY; left:= IniFile.ReadInteger(sl_chk[i],'x',8); top:= IniFile.ReadInteger(sl_chk[i],'y',8); if (Left >= i_GbX) and (Left<= i_GbB) and (Top >= i_GbY) and (Top<= i_GbH) then begin a_chk[i] := TCheckBox.Create(a_gbx[iii]); a_chk[i].Name := IniFile.ReadString(sl_chk[i],'field id',''); a_chk[i].Parent := a_gbx[iii]; a_chk[i].Caption:= IniFile.ReadString(sl_chk[i],'name',''); a_chk[i].Left := Left - a_Gbx[iii].Left; a_chk[i].Top := Top - a_Gbx[iii].Top; a_chk[i].Width := IniFile.ReadInteger(sl_chk[i],'cx',8); a_chk[i].Height := IniFile.ReadInteger(sl_chk[i],'cy',8); a_chk[i].BringToFront; break; end else begin a_chk[i] := TCheckBox.Create(Form2); a_chk[i].parent:= self; a_chk[i].Left := Left; a_chk[i].Top := Top ; a_chk[i].Caption:= IniFile.ReadString(sl_chk[i],'name',''); a_chk[i].Width := IniFile.ReadInteger(sl_chk[i],'cx',8); a_chk[i].Height := IniFile.ReadInteger(sl_chk[i],'cy',8); end; end; in FormCreate weise ich dann noch der Combobox diese Funktion zu:
Delphi-Quellcode:
das funktioniert auch soweit. Dann habe ich das ganze über Sendmessage jetzt versucht. In der Messagebox sagt er: checked!, aber ich sehe nichts davon. wo ist noch der Fehler - was habe ich vergessen.
for i := low(a_Cmb) to high(a_Cmb) do begin
if a_Cmb[i].Name = 'BELART' then a_Cmb[i].onselect := ComboExit; end;
Delphi-Quellcode:
procedure TForm2.ComboExit(Sender: TObject);
var i : Integer; begin if pos('Rechnung', TComboBox(Sender).Text) > 0 then begin for i := low(a_chk) to high(a_chk) do begin SendMessage(a_chk[i].Handle, BM_SETCHECK, Integer(cbChecked), 0); case SendMessage(a_chk[i].Handle, BM_GETCHECK, 0, 0) of BST_CHECKED: ShowMessage('Checked!'); BST_INDETERMINATE: ShowMessage('Indeterminate!'); BST_UNCHECKED: ShowMessage('Unchecked!'); end; end; end; end; |
Re: Combobox-abhängig - Checkbox auf true setzen
Hi,
kann es sein, dass du die Checkbox checkst, wobei dein Ereignis mit Aufruf ComboExit diesen Vorgang über SendMessage wieder rückgängig macht? Für mich sieht das jedenfalls so aus, dass du zweimal checkst und sich somit in der Ansicht nichts ändert. Gruß oki |
Re: Combobox-abhängig - Checkbox auf true setzen
Auch hi,
kann es sein, dass die CheckBoxen genau wie die Label aus dem ![]() Der Fehler wird dann eher im erzeugenden Code zu suchen sein. Freundliche Grüße |
Re: Combobox-abhängig - Checkbox auf true setzen
Die Checkboxen werden auch zur Laufzeit erzeugt - das ist richtig.
Aber die Meldung bringt doch, dass die Checkboxen gecheckt sind, warum zeigt er es dann nicht an? mit den Checkboxen arbeite ich auch nur an den beiden Stellen, die ich schon gepostet habe, sonst nirgends. Und auf true setze ich sie auch nur an dieser einen stelle. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz