Autor Beitrag
darksign
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58



BeitragVerfasst: Mi 23.05.07 09:38 
Hallo! Ich habe eine Form mit mehreren ComboBoxen und einem Grid! Nun möchte ich folgendes:

Die ComboBoxen werden nach einen Klick in das Grid befüllt! Gibt es eine Möglichkeit, dass ich eine schon befüllte ComboBox(d.h. ein Element ist ausgewählt) nachträglich wieder auf leer setze(also itemindex auf -1)! Ich hätte mir das so vorgestellt:

Ich wähle die befüllte ComboBox aus, und drücke dann "Esc", dann wird die ComboBox auf "leer" gesetzt! Nur wie kann ich herrausfinden, welche ComboBox ich ausgewählt habe? (mit Focused funktioniert es nicht!)

danke im vorraus
JensLaskowski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 168

Win XP
BDS 2006 Architect
BeitragVerfasst: Mi 23.05.07 09:42 
Schau mal bei der ComboBox auf die Erreignisse . Da müsste ein Erreignis geben das onKeyPress heißt.

Dasmit müsste es funktionieren.

Mit freundlichen Grüßen
JensLaskowski
chaoskeeper
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 23.05.07 09:55 
also wenn ich (bitte nicht nachahmen) mehrere gleiche Componente der gleichen Prozedur unterziehn muss, dann arbeite ich mit der netten "TAG" eigenschaft die es in jeder Componente gibt.

z.B., gib jeder Combobox, welche zurückgesetzt werden muss den Tag "10".
so

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure ResetControls;
var I:integer;
begin
  for I:=0 to frmMain.ControlCount-1 do begin
    if(frmMain.Controls[I].Tag=10) then begin
      // was auch immer du tun willst, hier:
      (frmMain.Controls[I] as TCombobox).ItemIndex:=-1;
    end;
  end;
end;


man muss hierbei beachten dass dieser Code rausfliegt sobald es keine Combobox ist, da gibt es eine zusätzliche Kontrolle die du durchführen kannst (typeof oder so) um ganz sicher zu gehn.

UND dies funktioneiert nur wenn die Comboboxen direkt auf dem hauptfenster sind, falls sie sich auf einem Panel,PageControl, etc befindet muss man den Code natürlich anpassen


Zuletzt bearbeitet von chaoskeeper am Mi 23.05.07 09:57, insgesamt 1-mal bearbeitet
darksign Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58



BeitragVerfasst: Mi 23.05.07 09:56 
hallo!

ja, ich weiß, dass es so ein Event gibt, aber ich habe 11 verschiedene ComboBoxen, und ich will jetzt nicht 11 Events machen! Gibts keine Möglichkeit, dass ich genau eine KeyEvent-Funktion schreibe, und wenn ich ne bestimmte Taste drücke, soll auch eine bestimmte ComboBox leer gesetzt werden (nämlich diejenige, welche ausgewählt wurde)
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mi 23.05.07 10:13 
Es ist nicht nötig, für jede ComboBox ein eigenes Event zu machen. Ein Event hat immer einen Parameter Sender, der das Objekt enthält, das das Event ausgelöst hat.

Am besten ist wohl das OnKeyPress-Event dafür geeignet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm.ComboBoxKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #27 then // #27 ist ASCII-Code für Escape
  begin
    (Sender as TComboBox).ItemIndex := -1;
  end;
end;


Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
Andreas Schilling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 1

WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
BeitragVerfasst: Mi 23.05.07 10:14 
Für eine Combobox diese Procedure auf onkeydown einfügen und allen anderen auch zuweisen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm.TComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = 46 then (sender as TCombobox).ItemIndex := -1;
end;
darksign Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58



BeitragVerfasst: Mi 23.05.07 10:22 
danke, genau nach sowas hab ich gesucht! :-)