ListBox で選択項目が変更されたタイミングを捉えるには?


まこと  2008-04-14 06:03:41  No: 30491

基本的な質問で恐縮なのですが、どなたかお教えください。
TComboBoxには、OnChangeというイベントがあり、選択項目が
変わった瞬間を捉えて任意の処理を行うことが出来ます。
  これと同じように、TListBoxでも選択項目が変わった瞬間
を捉えて任意の処理を行いたいのですが、どのようにすれば
分かるのでしょうか?

環境: WinXP SP2 + Delphi6 Personal


みんみん  2008-04-14 06:48:32  No: 30492

TListViewを使うのはどうでしょう?
ViewStyleプロパティに vsListをセットすれば、
TListBoxと同様に使えると思います。

選択項目の変化は、OnSelectItemイベントで捉えられます。


オレのセリフ  2008-04-14 09:11:04  No: 30493

真琴:「OnChangeが欲しいって、こういうの、"ナイモノねだり"っていうンじゃない?」
広海:「ナイものは自分で作っちゃえば イイじゃん、ねェ」
真琴:「えっ?、自分で?…どうやって作るの?」
広海:「そんなコト、オレに聞くなょ、聞く相手が違うだろぅ」
真琴:「なぁ〜んだ、めずらしく知ってるのかと思ったら…」
広海:「"めずらしく"って、その言い方…、あぁ、また傷ついたぁ」
春子:「もう…、同じ手は何回も使えないわよ、ヒロミくん」
広海:「あ、そぅ?」
真琴:「カイトさん、OnChangeを作るって、そんなコトできるの?」
海都:「う〜ん…、できないコトはないけど…」
広海:「もったいぶってないで、ほら、サッサと教えてあげなよ」
海都:「アンタにそんなコト言われるスジあいはナイね」
広海:「マコト、ほら、オマエからも頼めョ」
真琴:「オネガイ、カイトさん、アタシも知りたいの」
海都:「…ん、じゃぁ、こうしてみたら?」

type
  TListBox = class(StdCtrls.TListBox)
  private
    FOnChange: TNotifyEvent;
    procedure CNCommand(var Msg: TWMCommand); Message CN_COMMAND;
  published
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    .....
    procedure FormCreate(Sender: TObject);
  private
    procedure ListBox1Change(Sender: TObject);
    .....

implementation

{TListBox}
procedure TListBox.CnCommand(var Msg: TWMCommand);
begin
  inherited;
  case Msg.NotifyCode of
    LBN_SELCHANGE: if Assigned(FOnChange) then FOnChange(Self);
  end;
end;

{TForm1}
procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1.OnChange := ListBox1Change;
end;

procedure TForm1.ListBox1Change(Sender: TObject);
begin
  Caption := Caption + '*';
end;
........

真琴:「ふ〜ん、ホントにできちゃうんだぁ…"ナイモノねだり"もするもんだネ」
広海:「ねっ、カンタンだろ? マコト」
海都:「おぃ、それは、オレのセリフだろぅ」


まこと  2008-04-15 06:25:11  No: 30494

返信が遅れましたm(_ _)m

>みんみん様
最初はそれで考えていました。でも、やはりListBoxはGUIプログラムの
基本となるコンポーネントですので、今後のことも考えたうえで質問さ
せていただいたところでした。

>オレのセリフ様
  今、サンプルプロジェクトで確認させていただいたところ、うまくい
きました。本当にどうもありがとうございます。
  ただ、まだこのコードの内容が理解しきれていないため、もう少し
動作確認とコード内容の理解が進んだところで解決とさせていただき
たいと思います。(Form1上に単純に置いただけのStdCtrls.ListBoxが、
この新しく定義したListBoxとして解釈されて動作するという理屈
そのものがまだよく分かっていません。動作したときは本当に驚きでした。)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加