- - PR -
ButtonコントロールのDialogResultプロパティを拡張したい
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-12-04 10:51
VB2008で開発しています。
子画面がありまして、その画面にはいくつかのボタンが配置されています。 それぞれのボタンを押下すると、その子画面が終了するのですが、 DialogResultに用意されたプロパティ値以外の値を返したい場合があります。 Buttonコントロールを継承して DialogResultプロパティをオーバーライドするなどして、 対応できないものかと考えているのですが、 私の力では難しかったです。 具体的には、DialogResultプロパティの型を新しい型に変更してみたのですが、 それでは、継承できないとエラーとなってしまいます。 そのため、元となったEnum値(System.Windows.Forms.DialogResult)を 継承して拡張してみようかと思ったのですが、 どのように記載して良いものかわからなくなってしまいました。 現在のソースです。
私の考え方は間違っているのでしょうか? もしそうであれば、ぜひご指摘ください。 またどのように解決していったら良いか、 アドバイスいただけますと、とても助かります。 ぜひ、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-12-04 11:22
まず正直な感想は、そんな場合なんてあるものなのでしょうか。 というところです。 つまりこれは特殊な場合ですね。
DialogResult で対応できない時点で特殊なので、DialogResult に拘る必要はないと思います。 独自のプロパティで良いのではないでしょうか。 Shadows (new) で隠せないこともないですが、メリットは感じません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-12-04 12:01
ご回答ありがとうございます。 素直に新しいプロパティを作成することに致しました。 せっかくなので、もう一つ教えて頂きたいのですが、 Clickイベントを継承して、DialogResultと同じような動きをさせたいと考えています。 その場合に、Button側からその元となったFormを閉じたいのですが 画面を閉じるためには、どのようなプログラムを書けば良いのでしょうか? もちろん各フォームのボタンのクリックイベントで Me.Closeを書けば済む話なのですが、 可能であればButton側にその処理をさせたいのです。 もしご存じであれば、教えて頂けませんか? ぜひ、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-12-04 12:37
Button の Parent プロパティをたどって親 Form を探す方法や、
Button の派生クラスに親 Form をセットするプロパティを用意する方法が 簡単だと思います。 そしてクリックされたときに、その Form を Close すればいいかと。 _________________ Nakamura Blog [ メッセージ編集済み 編集者: なかむら 編集日時 2008-12-04 12:38 ] | ||||||||
|
投稿日時: 2008-12-04 13:08
ありがとうございます。 Parentプロパティを使用して閉じることができました。 とても助かりました。
| ||||||||
|
投稿日時: 2008-12-04 17:13
元の DialogResult を Shadows するなら DialogResult に None 以外の何かを予め入れておけば勝手に閉じるというモノグサ法もあります。 見た目わかりにくくなりますが、親を意識しなくても良いですね。
これではダメです。 コンテナ コントロールに入っていた場合にキャストミスします。 せめて FindForm メソッドを使いましょう。 Nothing のチェックもしておきましょう。 Parent プロパティで辿っていくのであれば型チェックも必要です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-12-05 09:35
見た目がわかりにくいため、これはなるべく避けたいと思っておりました。
コンテナコントロールのことを考えておりませんでした。 ご教示頂きありがとうございます。 とても勉強になりました。 [ メッセージ編集済み 編集者: サンジ 編集日時 2008-12-05 09:36 ] |
1