フォームにComboBoxをたくさん並べていたのですが、
画面がきたないと言われてしまいました。(T_T)
そこで、今度はLabelを並べてLabelをクリックしたら、
ComboBoxを開き、ドロップダウンリストからデータを選択し、
選択した文字列をLabelに表示するという形にしました。
教えてもらいたいことは、エラー処理の方法です。
プログラムはとりあえず動くのですが、Form1.Components[]
命令の使い方に自信がありません。
また、TLabel(コンポーネント).Caption := とか書いていますが、
コンポーネントを予めチェックした方がいいんでしょうね。たぶん。
Form1上にLabelを3個、ComboBoxを1個配置しています。
以下にソースです。
(定義部は省略)
var
AComponentIndex : integer; // Form1の各Labelの番号を記憶
implementation
{$R *.dfm}
// ComboBoxの選択した値をLabelに代入
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
TLabel(Form1.Components[AComponentIndex]).Caption :=
ComboBox1.Items.Strings[ComboBox1.ItemIndex];
ComboBox1.Hide; // 消す
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Hide;
Label1.Caption := '魚'; // 書き換え対象
Label2.Caption := '花';
Label3.Caption := '木';
end;
procedure TForm1.SetDataComboBox;
begin
case AComponentIndex of
0 : ComboBox1.Items.CommaText := 'タイ,マグロ,シャケ';
1 : ComboBox1.Items.CommaText := 'たんぽぽ,すみれ,パンジー';
2 : ComboBox1.Items.CommaText := 'サクラ,ウメ,マツ';
end;
end;
// label1,label2,label3で共有するイベント
procedure TForm1.Label1Click(Sender: TObject);
begin
// クリックしたLabelのComponentIndexを記憶
AComponentIndex := TLabel(Sender).ComponentIndex;
ComboBox1.Text := 'クリックしてください';
// ComboBoxにデータをセット
SetDataComboBox;
// ComboBoxをLabelの位置に合わせる
ComboBox1.Top := TLabel(Sender).Top + TLabel(Sender).Height;
ComboBox1.Left := TLabel(Sender).Left;
ComboBox1.Show;
// 自動で開く
ComboBox1.Perform(CB_SHOWDROPDOWN, 1, 0);
end;
|