Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] ComboBox (http://forum.oszone.net/showthread.php?t=300863)

Dodakaedr 07-06-2015 18:24 2515762

ComboBox
 
Имеется кнопка которая меняет весь текст программы. Подскажите как менять текст пунктов(Items) combobox'a при смене языка? Как задать новый текст?

Iska 07-06-2015 19:08 2515774

Цитата:

Цитата Dodakaedr
Подскажите как менять текст пунктов(Items) combobox'a при смене языка? »

Удалить все пункты и добавить заново — так не подходит?

Dodakaedr 07-06-2015 19:14 2515776

Цитата:

Цитата Iska
Удалить все пункты и добавить заново — так не подходит? »

Как вариант попробую. И теперь еще один вопрос возник: так как список будет очищаться соответственно и выбор будет обнуляться. Как сохранить выбранный пункт при смене языка?

K.A.V. 07-06-2015 20:15 2515783

Цитата:

Цитата Dodakaedr
Как сохранить выбранный пункт при смене языка? »

Переменные отменили?
1. Перед очисткой пунктов получайте ID (1,2,3 и т.д.) текущего выбранного пункта (CB_GETCURSEL сообщение, если пишите на winapi)
2. Очищаете пункты (CB_RESETCONTENT, если пишите на winapi)
3. Заполняете пунктами (CB_ADDSTRING, если... :))
4. Устанавливаете ту позицию, которую определили перед очисткой пунктов (CB_SETCURSEL, если... :))

Dodakaedr 07-06-2015 20:42 2515787

Цитата:

Цитата K.A.V.
если пишите на winapi »

нет, не на winapi.

opel431 07-06-2015 21:13 2515796

Можно ....для примера

Код:


var
  SelectedItem: Integer;

......
procedure TForm1.FormCreate(Sender: TObject);
begin
 cbb1.Items.Clear;
 cbb1.Items.LoadFromFile('File_En'); // или TStringList (cbb1.Items.AddStrings)
 cbb1.ItemIndex:=0;
end;

procedure TForm1.cbb1Change(Sender: TObject); 
begin
  SelectedItem := cbb1.ItemIndex;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
 cbb1.Items.Clear;
 cbb1.Items.LoadFromFile('File_Ru'); // или TStringList (cbb1.Items.AddStrings)
 cbb1.ItemIndex:=SelectedItem;
end;


El Sanchez 09-06-2015 11:45 2516474

Dodakaedr, не забывайте про проверки. Если вдруг окажется так, что File_En не существует или пустой, то будет плохо с cbb1.ItemIndex:=0. Если File_Ru пустой или File_Ru содержит меньше строк, чем File_En и SelectedItem вдруг выходит за пределы количества строк в File_Ru, то будет плохо с cbb1.ItemIndex:=SelectedItem.
Скрытый текст

Код:

var
  SelectedItem: Integer;

......
procedure TForm1.FormCreate(Sender: TObject);
begin
 cbb1.Items.Clear;
 cbb1.Items.LoadFromFile('File_En'); // или TStringList (cbb1.Items.AddStrings)
 if cbbl.Items.Count > 0 then
  cbb1.ItemIndex:=0;
end;

procedure TForm1.cbb1Change(Sender: TObject);
begin
  SelectedItem := cbb1.ItemIndex;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
 cbb1.Items.Clear;
 cbb1.Items.LoadFromFile('File_Ru'); // или TStringList (cbb1.Items.AddStrings)
 if cbbl.Items.Count > 0 then
  if SelectedItem < cbbl.Items.Count then
    cbb1.ItemIndex:=SelectedItem
  else
    cbb1.ItemIndex:=0;
end;


opel431 09-06-2015 19:21 2516672

В окончательном виде исключить и другую возможную ошибку!
Изменение в одной из строк кода

Код:


// или
var
  SelectedItem: Integer=0; // начальное значение

// или
procedure TForm1.FormCreate(Sender: TObject);
begin
 cbb1.Items.Clear;
 cbb1.Items.LoadFromFile('File_En'); // или TStringList (cbb1.Items.AddStrings)
 if cbbl.Items.Count > 0 then
 begin
  cbb1.ItemIndex:=0;
  SelectedItem := cbb1.ItemIndex; // начальное значение
 end;
end;



Время: 19:40.

Время: 19:40.
© OSzone.net 2001-