名前 題名 ▼ takiさん > フォームに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; GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link