![]() |
Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
Ist wahrscheinlich nur eine Kleinigkeit. Und zwar will ich in der ComboBox einen Eintrag auswählen, der ist aber letztendlich nur ein Alias für einen anderen Text. Wähle ich in der Liste zB. Apfel, soll ins Text-Feld Obst.
Das Ersetzen selbst ist in kein Problem, zuletzt aber wird das Feld Text dann doch noch von dem Item-String überschrieben. |
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
Hallo, ich bin nicht sicher, ob ich Dein Anliegen richtig verstanden habe:
Du wählst mit Hilfe einer Combobox einen Eintrag und in ein anderes Textfeld soll z.B. die zugehörige Kategorie? Oder ist die Kategorie ebenfalls in der Liste enthalten? Dann hilft ja vielleicht die Eigenschaft ".ItemIndex" weiter... Aber offen gestanden fühlt sich das irgendwie falsch an. Wenn ich als Anwender etwas auswähle, erwarte ich nicht, dass danach etwas anderes dort steht. So etwas würde ich - falls notwendig - immer mit zwei Elementen machen. Eben die Liste der Elemente und ein Feld für die zugehörige Kategorie. |
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
Zitat:
Gut, ich liefere ein besseres (konstruiertes) Beispiel, vielleicht erkennt man dann den Sinn. Ich habe Edit-Komponente in die der Anwender ein Pfad eingeben kann. Soweit so gut. Jetzt bringe ich etwas Komfort ins Spiel und ersetzte die Edit-Komponente durch eine ComboBox, die hat auch ein Text-Feld. Jetzt kann der Anwender aber die Box aufklappen und da stehen Begriffe wie Desktop, Eigene Dateien, Eigene Bilder, usw. Wählt der Anwender Eigene Bilder aus, bekommt er, so ist es zumindest geplant, den Pfad zu dem Eigene Bilder Ordner in das ComboBox-Textfeld geschrieben. Ich glaube die Verwirrung würde sich in Grenzen halten. Also nichts wildes, nur dem Anwender ein wenig Tiparbeit abnehmen. Allerdings, das Ganze hat jetzt länger gedauert als ich mir das vorgestellte habe, so dass ich das Ganze wohl über eine Edit-Komponente und PopUpMenü löse. Trotz dem, auch wenn es jetzt nur noch informativ ist, würde es mich dennoch interessieren wie sowas geht. |
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
Ins onChange sowas wie
Delphi-Quellcode:
?
if ComboBox.text = 'Apfel' then ComboBox.text := 'Obst';
|
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
Theoretisch ja. Ich hab das inzwischen über PopupMenü gelöst, somit ist es nicht mehr dringend. Interessant wäre es trotzdem zu wissen wie man es abfängt, denn in den jeweiligen Ereignissen habe ich es geändert, zuletzt wird es aber dennoch überschrieben.
|
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
Ach Du willst das Item komplett austauschen, nicht nur den Anzeigetext solange es ausgewählt ist?
|
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
Gerade das Beispiel des Startbuttons zeigt, dass nicht jeden M... nachmachen sollte, nur um eventuell ein Bedienelement zu sparen. :wink: Ist nur eine ganz persönliche Haltung. Ein Kompromiss könnte sein, das Ergebnis der Auswahl schon mal beim Selektieren als Hint oder in der Statusleiste anzuzeigen.
|
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
@Popov:
Soll/darf der Benutzer den Text ändern oder ist der nur zur Anzeige gedacht? Wenn es nur ums Anzeigen geht, dann mit einer OwnerDraw-Combobox;
Delphi-Quellcode:
...
ComboBox1.Items.Add('Apfel=Obst'); ComboBox1.Items.Add('Kirsche=Obst'); ComboBox1.Items.Add('Paprika=Gemüse'); ... procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var combo:TComboBox; s :String; begin combo:=TComboBox(Control); if (odComboBoxEdit in State) then s:=combo.Items.ValueFromIndex[Index] else s:=combo.Items.Names[Index]; combo.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top, s); //if (odSelected in State) then combo.Canvas.DrawFocusRect(Rect); end; |
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
Wenn die Anfangselemente static sind, weiß man doch meist den Index und kann das Element darüber einfach austausch im onChange?
Ich bin grade unterwegs und hab hier kein Delphi. Aber das müsste mit einer Zeile Code gehen... |
AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
ComboBox1DrawItem?
Das würde ich als falschen Weg ansehn. Der Anzeige-Text in die Items und dann entweder über ItemIndex den Wert bestimmen oder über das Datenobjekt jedes Items ( cb.Objects[cb.ItemIndex] ) den internen Wert übergeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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