Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как правильно работать с ComboBox


Автор: Serhik_z 1.8.2005, 12:26
Как правильно работать с ComboBox
В ComboBox находится Текст (Items TStrinds Line)
1.А100
2.А200---
3.А300
4.А400
5.А500
6.А600
При выборе (2.A200---) в Edit чтоб добавилось число 289 и т.д.
Line | Text
1.А100 | 089
2.А200 | 289
3.А300 | 489
4.А400 | 689
5.А500 | 889
6.А600 | 1089
Что то вроде такого.
Edit1.Text:=ComboBox1.Text'089' если ComboBox1.Items.Strings.Line1; // в Line1 - A100
Edit1.Text:=ComboBox1.Text'289' если ComboBox1.Items.Strings.Line2; // в Line2 - A200
Edit1.Text:=ComboBox1.Text'489' если ComboBox1.Items.Strings.Line3; // в Line3 - A300
Edit1.Text:=ComboBox1.Text'689' если ComboBox1.Items.Strings.Line4; // в Line4 - A400
Edit1.Text:=ComboBox1.Text'889' если ComboBox1.Items.Strings.Line5; // в Line5 - A500
Edit1.Text:=ComboBox1.Text'1089' если ComboBox1.Items.Strings.Line6; // в Line6 - A600

Автор: Dimannn 1.8.2005, 13:38
Во первых - в комбо стайл нужно поставить OwnerDrawFixed.
Код

Case Combobox1.ItemIndex of 
  0: Edit1.Text:=ComboBox1.Text+'089'
  1: Edit1.Text:=ComboBox1.Text+'289'

  ...

end;


Автор: Bes 1.8.2005, 13:38
Вот рабочий пример если я правильно понял:

Код

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
     if ComboBox1.Text='a1' then Edit1.Text:=ComboBox1.Text+'49';
     if ComboBox1.Text='a2' then Edit1.Text:=ComboBox1.Text+'69';
     if ComboBox1.Text='a3' then Edit1.Text:=ComboBox1.Text+'89';
end;

Добавлено @ 13:40
2Dimannn:
Действительно надо уточнить, текст зависит от нмера линии или от содержимого....
P.S.
Поздровляю с одновременным постом smile

Автор: Samhein 1.8.2005, 14:31
Наверно так:

Код

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if ComboBox1.Text = 'А100' then
Edit1.Text := ComboBox1.Text + ' | 089'
else if ComboBox1.Text = 'А200' then
Edit1.Text := ComboBox1.Text + ' | 289'
else if ComboBox1.Text = 'А300' then
Edit1.Text := ComboBox1.Text + ' | 489'
else if ComboBox1.Text = 'А400' then
Edit1.Text := ComboBox1.Text + ' | 689'
else if ComboBox1.Text = 'А500' then
Edit1.Text := ComboBox1.Text + ' | 889'
else if ComboBox1.Text = 'А600' then
Edit1.Text := ComboBox1.Text + ' | 1089'
end;


ps
Если не так исправте

Автор: Pakshin A. S. 6.8.2005, 11:16
через case данный вариант заполнения в комбе лучше....
Код

case StrToInt(Copy(ComboBox1.Text, 2, Length(ComboBox1.Text)-1) of
 100:


И т. д...
Добавлено @ 11:20
Ды че мучаться... заведем например массив:
Код

const
 a: array [1..5] of string[10] = ('123', '23', '344', '23444', '543');


И сработаем вот так:
Код

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
 Edit1.Text := ComboBox1.Text + ' | ' + a[ComboBox1.ItemIndex+1]
end;


Надеюсь понятна идея?

Добавлено @ 11:21
По-моему так короче.. меньше писанины в несколько раз!

Автор: Song 8.8.2005, 08:39
Код

procedure TForm1.FormCreate(Sender: TObject);
Const ComboBoxText: String =
 '1.À100|089'#13#10 +
 '2.À200|289'#13#10 +
 '3.À300|489'#13#10 +
 '4.À400|689'#13#10 +
 '5.À500|889'#13#10 +
 '6.À600|1089'#13#10;
begin
 With ComboBox1 Do
  Begin
   Items.Text:=ComboBoxText;
   Style:=csOwnerDrawFixed;
   ItemHeight:=16;
   onSelect:=ComboBoxSelect;
  End; {With}
end;

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
Var S: String;
    n: Integer;
begin
 With TComboBox(Control), Canvas Do
  Begin
   FillRect(Rect);
   S:=Items[Index];
   n:=Pos('|',S);
   IF n > 0 then S:=Copy(S,1,n - 1);
   TextOut(Rect.Left + 2, Rect.Top + 2,S);
  End; {With}
end;

Procedure TForm1.ComboBoxSelect(Sender: TObject);
Var n: Integer;
Begin
 With TComboBox(Sender) Do
  Begin
   n:=Pos('|',Text);
   IF n > 0 then Edit1.Text:=Copy(Text,n + 1,Length(Text));
  End; {With} 
End;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)