Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - markierten Comboboxtext ändern


der organist - Fr 17.10.08 17:56
Titel: markierten Comboboxtext ändern
hi Leutz,

ich möchte in meinem Programm die Möglichkeit haben, die Sprache zu wechseln. Probleme habe ich bei den Comboboxen:


Delphi-Quelltext
1:
2:
if Combobox1.Text = 'Schwar' then
  Combobox1.Text := 'Black';


funzt nur leider nicht....

{und das Forum nützt da gerade auch wenig...ca 25 min Zeitaufwand}
Ich hab auch schon Dinge mit Items.[Combobox.ItemIndex] probiert, aber alles in allem hat das nichts geholfen.


Fabian E. - Fr 17.10.08 18:24

Doch genau so sollte es klappen... Bei mir jedenfalls...
Liegt es vielleicht an deinem "Schwar"? Und nicht "Schwarz"?


der organist - Fr 17.10.08 19:14

nö, ich denke nicht, denn ich habe den Text hier nicht reinkopiert, SChreibfehler


Delete - Fr 17.10.08 19:19

Bei einer Combobox macht es IMHO nicht viel Sinn, den Text zu ändern, man muss dann schon andere Items laden und ggf. den ItemIndex wiederherstellen.


LexXis - Fr 17.10.08 19:19

Für den Fall, dass du den Text des ausgewählten Eintrags ändern willst:

Was du brauchst sind ComboBox.ItemIndex und ComboBox.Items.Strings
Bastel damit mal ein wenig rum :)

mfg


//EDIT: Ich geb meinem Vorredner allerdings zu 100% recht. Lieber die ComboBox leeren und neu füllen.
//EDIT 2:

Delphi-Quelltext
1:
2:
ComboBox.Items.Strings[ComboBox1.ItemIndex] := 'Black';
ComboBox.Text := 'Black';


Funktioniert doch einwandfrei o_O


der organist - Fr 17.10.08 19:33


Delphi-Quelltext
1:
2:
3:
4:
5:
//Ich möchte den Text ändern können, damit man nahtlos zwischen den SPrachen hin und her wechseln kann
//Das mit dem Index und Co, z.B.so?

if Combobox1.Items[Combobox.ItemIndex] = 'Schwarz' then
  Combobox1.Text := 'Black';


LexXis - Fr 17.10.08 19:39

user profile iconder organist hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
if Combobox1.Text = 'Schwarz' then
begin
  Combobox1.Text := 'Black';
  ComboBox1.Items.Strings[ComboBox1.ItemIndex] := 'Black';
end;


Aber ich kann mich nur wiederholen: Lösche lieber den Inhalt deiner ComboBox und befülle sie komplett neu! Alles andere ist IMHO nur Rumgefrickel.


der organist - Fr 17.10.08 19:42

ok, ich habe sie neu befüllt, aber wie kriege ich die alte Auswahl nur in der anderen Sprache wieder?

EDIT: Ich glaub die Frage war völlig überflüssig, ich hab ne Lösung gefunden, sollte die nich funzen, melde ich mich wieder (und das läuft nicht über den Text wie vorher)


LexXis - Fr 17.10.08 19:45

Es lebe der ItemIndex und eine Variable zum "zwischenspeichern".. ;)

Gutes Weiterkommen


Delete - Fr 17.10.08 19:53


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
type
  TLanguage = (lDeutsch,lEnglish);

  TForm1 = class(TForm)
  ...
  private
    { Private-Deklarationen }
    iLanguage: TLanguage;
    procedure ChangeLanguage;
  ...
  end;

...

implementation

{$R *.dfm}

const sDeutsch: array[0..3of string = ('Schwarz','Weiß','Gelb','Blau');
      sEnglish: array[0..3of string = ('Black','White','Yellow','Blue');

procedure TForm1.Button1Click(Sender: TObject);
begin
  ChangeLanguage;
end;

procedure TForm1.ChangeLanguage;
var OldIndex, i: Integer;
begin
  OldIndex := ComboBox1.ItemIndex;
  ComboBox1.Items.BeginUpdate;
  try
    ComboBox1.Items.Clear;
    case iLanguage of
      lDeutsch: begin
                  for i := Low(sEnglish) to High(sEnglish) do
                    ComboBox1.Items.Add(sEnglish[i]);
                  iLanguage := lEnglish;
                end;
      lEnglish: begin
                  for i := Low(sDeutsch) to High(sDeutsch) do
                    ComboBox1.Items.Add(sDeutsch[i]);
                  iLanguage := lDeutsch;
                end;
    end;
  finally
    ComboBox1.Items.EndUpdate;
    ComboBox1.ItemIndex := OldIndex;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  iLanguage := lEnglish;
  ChangeLanguage;
end;


Das ist nur eine schnell dahingetippte Möglichkeit, man könnte auch Ressourcestrings verwenden etc.


der organist - Fr 17.10.08 19:54

Danke, hat funktioniert.