Autor Beitrag
Quake User
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
  alt: integer = -1;  // Global oder entsprechend
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Mo 03.01.11 01:21 
Ich suche natürlich eine Lösung, ohne eine globale Variable zu verwenden.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 03.01.11 01:26 
Natürlich :roll:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Mo 03.01.11 01:29 
user profile iconTilman hat folgendes geschrieben Zum zitierten Posting springen:
Natürlich :roll:
In dem Fall steht TCombobox.tag zur Verfügung...


Wie soll ich das nutzen?
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Mo 03.01.11 01:35 
user profile iconTilman hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 03.01.11 02:18 
Wie meinst du das? :gruebel:
ausblenden Delphi-Quelltext
1:
MyComboBox.ItemIndex := MyComboBox.Tag;					
Ich würde allerdings ein privates Feld im Formular verwenden.
Quake User Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.