| Autor |
Beitrag |
Quake User
      
Beiträge: 159
|
Verfasst: So 02.01.11 16:14
Ich verwende bspw. eine ComboBox zur Auswahl von A,B,C. Nun habe ich eine Sicherheitsabfrage eingebaut, die fragt ob der Nutzer wirklich von A nach B wechseln möchte. Falls nicht, wird der Wechseln nicht durchgeführt. Leider welchselt die ComboBox trotzdem Ihren Text.
Das liegt daran, dass ich auf das OnChange Ereignis reagiere. nach OnChange hat die ComboBox natürlcih schon einen anderen Text. Aber ich sehe auch keinen anderen Event, den ich nutzen könnte. (bspw. OnBevorChange)
Was ist hier der eleganteste Weg?
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: So 02.01.11 16:29
Hm, so würde es gehen, aber sehr elegant ist es nicht, vielleicht fällt jemandem noch was besseres ein.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| alt: integer = -1; implementation
{$R *.dfm}
procedure TForm1.ComboBox1Change(Sender: TObject); var neu: Integer; begin neu := ComboBox1.ItemIndex; combobox1.ItemIndex := alt; if (messageBox(handle,'Wirklich?','Ja?',36) = IDYES) then begin alt := neu; ComboBox1.ItemIndex := neu; label1.Caption := combobox1.Text; end; end; |
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Quake User 
      
Beiträge: 159
|
Verfasst: Mo 03.01.11 01:21
Ich suche natürlich eine Lösung, ohne eine globale Variable zu verwenden.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 03.01.11 01:26
Natürlich
In dem Fall steht TCombobox.tag zur Verfügung und kann benutzt werden, oder du musst dir halt die Mühe machen eine neue Komponente von TCombobox abzuleiten, das ist auch gar nicht schwer. Würde ich aber in dem Fall nur machen wenn ich die Combobox an mehr als einer Stelle brauche, sonst lohnt sich das kaum.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Quake User 
      
Beiträge: 159
|
Verfasst: Mo 03.01.11 01:29
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 03.01.11 01:32
Nun, Tag ist ein 32-Bit Integer, und wenn du keine Globale Variable einsetzen willst, dann kannst du eben Tag dazu verwenden.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Quake User 
      
Beiträge: 159
|
Verfasst: Mo 03.01.11 01:35
Tilman hat folgendes geschrieben : | | Nun, Tag ist ein 32-Bit Integer, und wenn du keine Globale Variable einsetzen willst, dann kannst du eben Tag dazu verwenden. |
Aha, hast Du dazu ein Bsp. ?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 03.01.11 02:18
Wie meinst du das?  Delphi-Quelltext 1:
| MyComboBox.ItemIndex := MyComboBox.Tag; | Ich würde allerdings ein privates Feld im Formular verwenden.
|
|
Quake User 
      
Beiträge: 159
|
Verfasst: Di 04.01.11 03:22
Kein weiteren Vorschläge? Es gibt keine Möglichkeit für einen Abbruch nach der Auswahl in einer ComboBox?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 04.01.11 06:53
Ich nehme an das einfachste ist, eine eigene Komponente abzuleiten und darin auf CN_COMMAND zu reagieren. Denn wie du ja im Delphi-Quelltext siehst, bekommst du bei einer Änderung der Auswahl im NotifyCode dieser Message ein CBN_SELCHANGE.
Darin kannst du dann vor der Zuweisung des Anzeigetextes die Abfrage machen (in einem neuen Ereignis am besten) und ggf. den alten Wert wiederherstellen. Da hast du dann auch den Vorteil, dass du direkt unter private deiner neuen Komponente die letzte Auswahl speichern kannst.
|
|