いつもお世話になっています。
カテゴリーボタンを利用して、実行するSQLの振り分けを考えています。
OnClickエベントを一つのprocedureで済ませたく、Hintで実行するSql文のテキストファイルを指定しようと考えました。
SenderからHintを得ようとしますがうまくゆきません。
ご教授をお願いします。
[テストPro]
procedure TForm1.CategoryButtons1Categories0Items0Click(Sender: TObject);
begin
ShowMessage((Sender as TButtonItem).Hint);
end;
[発生するエラー]
$7C812AFB に最初の偶発例外があります。例外クラス EInvalidCast (メッセージ '無効なクラス型キャスト')。
[環境]
XP
Delphi2007
TButtonItemにHintプロパティは有りますか?
オブジェクトインスペクタからも、VCL リファレンスからもあると理解しています。
普通のボタンの場合です。
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage((Sender as TButton).Hint);
end;
失礼しました。
この場合のSenderはTCategoryButtonsですね。
「無効なクラス型キャスト」ということは、
SenderがTButtonItem(またはその派生クラス)ではないということですね。
Sender.ClassNameを見ると何になっていますか?
また、TBaseButtonItemにキャストするとどうなるでしょうか?
一応調べてみたら、OnClickのSenderにTButtonItemが入ってこないというバグが報告されているようですけど。
http://qc.embarcadero.com/wc/qcmain.aspx/qcmain.aspx?d=70595
CategoryButtonを使った事がないので使ってみましたが
Hintまでたどり着けませんでした。
procedure TForm1.CategoryButtons1Click(Sender: TObject);
begin
ShowMessage((Sender as TCategoryButtons).SelectedItem.Caption);
end;
たどり着きましたが、やってみるとこれは意味がないみたいですね。
Index値を使ってケースで分けた方がいいと思います。
procedure TForm1.CategoryButtons1Click(Sender: TObject);
begin
ShowMessage(
(Sender as TCategoryButtons).Categories[(Sender as TCategoryButtons).
SelectedItem.Index].CategoryButtons.Hint);
end;
procedure TForm3.CategoryButtons1Categories0Items0Click(Sender: TObject);
begin
Caption := TCategoryButtons(Sender).SelectedItem.Hint;
end;
これでHint出るだろ?
ありがとうごさいました。
KHE00221の方法で解決しました。
ツイート | ![]() |