AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Combobox ItemIndex=-1; Text ändern im Event

Ein Thema von StTüff · begonnen am 20. Jul 2007 · letzter Beitrag vom 23. Jul 2007
Antwort Antwort
Seite 1 von 3  1 23      
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#1

Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 09:05
Hallo zusammen!

Ich benutze eine Combobox, um darin das Dateiformat einer dargestellten Datei zu verwalten. Bekannte Formate werden als Items geladen. Wird eine Datei mit unbekanntem Format geladen, kann diese (mit Einschränkungen) trotzdem Angezeigt werden. Dann bleibt die Combobox auf dem Index -1 und der Text wird in 'nicht gültig' geändert.
Soweit so gut, funktioniert prima.
Jetzt wollte ich aber die eigentliche Funktion für die die Combobox vorgesehen ist programmieren: Eine Formatkonvertierung. Das habe ich auch gemacht und auch das funktioniert. Ich habe allerdings ein Problem, wenn der Anwender den Vorgang abbricht und die alten Werte der Combobox wiederhergestellt werden sollen.
Folgende Situation:
1. Es wird eine Datei mit unbekanntem Format geladen => Combobox: ItemIndex:=-1 und Text:= 'nicht gültig'
2. Anwender wählt einen Eintrag in der Combobox für die Konvertierung aus.
3. Im Event (OnChange, oder OnSelect) wird eine Abfrage ausgelöst, ob die Konvertierung wirklich gemacht werden soll.
4a. "Ja": Alles prima (Konvertierung wird durchgeführt und Combo steht auf dem richtigen Eintrag.
4b. "Nein": Die alten Werte in der Combobox müssen wiederhergestellt werden (also ItemIndex:=-1 und Text:='nicht gültig').

4b funktioniert leider nicht. Zwar wird der Index auf -1 gesetzt und auch der Text lässt sich ändern, wird aber danach (vermutlich durch die Eventbehandlung des Objekts) noch mals mit '' überschrieben.

Ich habe schon versucht das mit "abort" zu verhindern. Leider kein Erfolg. Auch alle möglichen Tips aus dem Forum zu ähnlichen Themen haben mich leider nicht weiter gebracht.

Hat jemand eine Idee, oder kann mir sagen, ob es ein Event gibt, dass ausgelöst wird, wenn die Bearbeitung abgeschlossen ist (so dass nichts mehr überschrieben wird, oder wie ich die "Weiterbearbeitung" verhindern kann.

Vielen Dank und viele Grüße,

StTüff
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 09:12
Zeig doch mal den Event-Handler.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 09:15
Gerne:
Delphi-Quellcode:
procedure TForm1.CoBo_VersionChange(Sender: TObject);
begin
  if MessageDlg('Soll die Konvertierung durchgeführt werden?', mtConfirmation,
    [mbyes, mbCancel], 0)=mrYes
  then
  begin
    ...Konvertierung...
  end else
  begin
    CoBo_Version.ItemIndex :=-1;
    CoBo_Version.Text:='Test';
  end;
end;
Gruß,

StTüff
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 09:21
Hai StTüff,

eventuell ist ja das Delphi-Referenz durchsuchenOnCloseUp besser für dich geeignet. Dieses wird aufgerufen wenn die Auswahlliste der TComboBox geschlossen wird.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 09:27
Hallo,

ich würde den Zustand der Daten nicht nur in der ComboBox, sondern zusätzlich in einer property der Form oder bei Bedarf auch in einer globalen Variable festhalten. Wird die Aktion ordnungsgemäß ausgeführt, dann kannst du die neue Einstellung in die Variable übertragen, andernfalls initialisierst du die ComboBox neu.

Für die eigentliche Benutzeraktion gilt wie immer: Sie sollte durch eine TAction ausgeführt werden können, d.h. nur Komponenten kommen in Frage, die über die Eigenschaft Action verfügen. Ich würde einen Button oder ein MenuItem bevorzugen und eine ComboBox nur für Einstellungen verwenden.

Grüße vom marabu
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 09:28
Hallo Sharky!

Das habe ich auch schon versucht. Hilft leider nicht. Aus der PalmOS-Programmierung kenne ich so was wie "Handled=true" um die weitere Verarbeitung zu verhindern. Gibt es so was auch hier (wie gesagt: "abort" hilft auch nicht).

Gruß,

StTüff
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 09:41
Hallo Marabu!

Erst mal Danke für die Antwort.
Mir hilft es leider nichts, die Aktion über einen Button oder ähnliches auszulösen, da ich ja an einer Stelle das Format, in das konvertiert werden soll vorgeben muss. Wenn nun die Änderung des Comboboxinhalts (bzw. die Auswahl) keine Aktion auslösen würde, dann wäre der Inhalt nicht mehr konsisten mit dem Tatsächlichen Format.
Ich könnte natürlich hergehen und nach dem Tastendruck ein weiteres Formular öffnen, bei dem die Zielversion vorzugeben ist und das Formular dann wieder schließen. Das halte ich aber für sehr umständlich und nicht gerade bedienerfreundlich.
Bei der Neuanlage einer Datei ist es so realisiert und dort passt das auch ganz gut. Wenn aber das Format gewechselt werden soll, dann hätte ich das schon ganz gern durch eine einfache Auswahl in der Combobox gemacht (was ja auch funktionieren würde, wenn ich nicht die Abbruchsmöglichkeit vorsehen hätte wollen).

Es muss doch eine Möglichkeit geben, wie ich die Werte (die ich natürlich so gespeichert habe, wie Du es auch vorgesschlagen hast) in der Combobox wiederherzustellen.
Aus meiner Sicht sind zwei Wege denkbar:
1. Die weitere Ausführung verhindern.
oder
2. Auf ein Event regieren, dass erst eintritt, wenn die objektseitigen Änderungen schon durchgeführt wurden, so dass nichts mehr überschrieben wird.

Die Frage ist nur wie....

Gruß,

StTüff
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#8

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 10:15
Nimm anstatt dem OnChange das OnSelect Ereignis der CB. Dieses wird nur gefeuert, wenn der Nutzer in der Auswahlliste einen Eintrag auswählt, nicht aber, wenn durch Programmcode oder Nutzereingaben der Text des Edits verändert wird.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 10:19
Hallo Stephan,

ich würde das technische Problem so lösen: Die ComboBox würde ich mit dem Style csDropDownList betreiben, bei den Items würde ich dem Item 0 den Text 'nicht gültig' zuweisen, auf die Verwendung von ItemIndex -1 würde ich verzichten.

Delphi-Quellcode:
procedure TDemoForm.ComboBoxChange(Sender: TObject);
begin
  with Sender as TComboBox do
    if MessageDlg('Okay?', mtConfirmation, mbOkCancel, 0)
      then self.ComboIndex := ItemIndex
      else ItemIndex := self.ComboIndex;
    end;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: Combobox ItemIndex=-1; Text ändern im Event

  Alt 20. Jul 2007, 10:32
Hallo Sidorion!

Das löst mein Problem leider nicht, da das Event ja zur richtigen Zeit ausgelöst wird. Lediglich der Text lässt sich nicht ändern. Trotzdem vielen Dank!


Hallo Marabu!

Daran habe ich auch schon gedacht. Dann habe ich aber das Problem, dass der Anwender das Format "nicht gültig" auswählen kann, was vielleicht auch etwas komisch ist (vor allem was mache ich, wenn der das dann auch macht...).

Eine weitere mögliche Lösung ist, dass ich dann die Combobox einfach leer lasse und die Information in ein separates Label o.Ä. packe. Geht, ist aber nicht gerade die Ideallösung.

Gruß,

Stephan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz