PDA

Показать полную графическую версию : [решено] ComboBox


Dodakaedr
07-06-2015, 18:24
Имеется кнопка которая меняет весь текст программы. Подскажите как менять текст пунктов(Items) combobox'a при смене языка? Как задать новый текст?

Iska
07-06-2015, 19:08
Подскажите как менять текст пунктов(Items) combobox'a при смене языка? »
Удалить все пункты и добавить заново — так не подходит?

Dodakaedr
07-06-2015, 19:14
Удалить все пункты и добавить заново — так не подходит? »
Как вариант попробую. И теперь еще один вопрос возник: так как список будет очищаться соответственно и выбор будет обнуляться. Как сохранить выбранный пункт при смене языка?

K.A.V.
07-06-2015, 20:15
Как сохранить выбранный пункт при смене языка? »
Переменные отменили?
1. Перед очисткой пунктов получайте ID (1,2,3 и т.д.) текущего выбранного пункта (CB_GETCURSEL сообщение, если пишите на winapi)
2. Очищаете пункты (CB_RESETCONTENT, если пишите на winapi)
3. Заполняете пунктами (CB_ADDSTRING, если... :))
4. Устанавливаете ту позицию, которую определили перед очисткой пунктов (CB_SETCURSEL, если... :))

Dodakaedr
07-06-2015, 20:42
если пишите на winapi »
нет, не на winapi.

opel431
07-06-2015, 21:13
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
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
В окончательном виде исключить и другую возможную ошибку!



// или
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;




© OSzone.net 2001-2012