C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: ShowDialogのオーバーライド?


(過去ログ 129 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■76345 / inTopicNo.1)  ShowDialogのオーバーライド?
  
□投稿者/ ジャイアン (1回)-(2015/06/30(Tue) 17:33:33)

分類:[VB.NET/VB2005 以降] 

≪言語:VB2008≫

こんにちは。いつもここを参考にさせて頂いております。

さて、フォームのShowDialogの際に、色々と処理を追加したいと思い、
このフォームのShowDialogのオーバーライドをしたいと考えましたが、
ShowDialogはOverridableではないと怒られます。

そこで、色々と試した結果、Shadowsというキーワードをつけると、それらしいことができるようですが、
以下の方法で良いのでしょうか?
(MyBaseって継承元を表すという理解でしたが、これでいいのか分かりません。)

    Public Shadows Function ShowDialog(ByVal owner As IWin32Window) As DialogResult
        'ここに処理を追加
             ・
             ・
             ・
        Return MyBase.ShowDialog(owner)
    End Function

よろしくお願いいたします。

引用返信 編集キー/
■76346 / inTopicNo.2)  Re[1]: ShowDialogのオーバーライド?
□投稿者/ ぶなっぷ (31回)-(2015/06/30(Tue) 17:52:49)
ダイアログを表示すると同時に何かをしたいだけであれば、ShowDialogをオーバー
ライドするより以下のイベントで処理する方が一般的かと思います。
  Initialized
  Loaded

引用返信 編集キー/
■76347 / inTopicNo.3)  Re[2]: ShowDialogのオーバーライド?
□投稿者/ ぶなっぷ (32回)-(2015/06/30(Tue) 17:59:29)
フォームでしたね(^^;
Form.Load イベントになるのかな?

引用返信 編集キー/
■76352 / inTopicNo.4)  Re[3]: ShowDialogのオーバーライド?
□投稿者/ ジャイアン (2回)-(2015/07/01(Wed) 12:18:38)
2015/07/01(Wed) 12:25:09 編集(投稿者)

ぶなっぷさん、コメントありがとうございます。
確かに、コンストラクタやLoadイベントで処理ができるのであれば、このようなことを考えることもないのですが、
以下のことを行いたく、今回のご相談をさせて頂いた次第です。

・ShowDialogを呼び出した時、条件により、ShowDialogするまでもなく戻り値のDialogResultを返したい。

新たにShowDialogを行うためのメソッドを追加するという方法もありますが、
元々これらフォームのShowDialogを行っている箇所をすべて新メソッド名で修正しなければならず、
また、これらフォームの既存のShowDialogメソッドを使用禁止することを徹底させるのも大変に思います。

以上、よろしくお願いいたします。

引用返信 編集キー/
■76353 / inTopicNo.5)  Re[4]: ShowDialogのオーバーライド?
□投稿者/ Azulean (499回)-(2015/07/01(Wed) 12:40:00)
No76352 (ジャイアン さん) に返信
> また、これらフォームの既存のShowDialogメソッドを使用禁止することを徹底させるのも大変に思います。

オーバーライドではないので、例えば、Form 型変数に代入してから ShowDialog を読んでいるコードがある、または今後書かれると、あなたが、書いたコードは通りません。
そういう性質のものだという点にも注意してください。
引用返信 編集キー/
■76354 / inTopicNo.6)  Re[4]: ShowDialogのオーバーライド?
□投稿者/ 774RR (271回)-(2015/07/01(Wed) 12:50:10)
private void FormDialog1_Load(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Yes;
    this.Close();
}

としておくと
using (FormDialog1 dlg=new FormDialog1())
{
    DialogResult r=dlg.ShowModal();
    System.Diagnostics.Debug.WriteLine(r.ToString());
}
で Yes が得られるわけだけど、これぢゃダメかな?
DialogResult.Cancel や Ignore なんかも返却できたけど。

引用返信 編集キー/
■76355 / inTopicNo.7)  Re[4]: ShowDialogのオーバーライド?
□投稿者/ ぶなっぷ (33回)-(2015/07/01(Wed) 14:19:58)
> ・ShowDialogを呼び出した時、条件により、ShowDialogするまでもなく戻り値のDialogResultを返したい。

そういうことなら、Form.Load()のイベントハンドラ内でClose();を呼び出せば、ダイアログは表示されないようです。

引用返信 編集キー/
■76356 / inTopicNo.8)  Re[5]: ShowDialogのオーバーライド?
□投稿者/ ぶなっぷ (34回)-(2015/07/01(Wed) 14:26:01)
失礼、すでに774RRさんが回答済みでした。
引用返信 編集キー/
■76362 / inTopicNo.9)  Re[1]: ShowDialogのオーバーライド?
□投稿者/ VB初心者 (1回)-(2015/07/01(Wed) 23:07:58)
2015/07/01(Wed) 23:17:49 編集(投稿者)
2015/07/01(Wed) 23:15:22 編集(投稿者)
2015/07/01(Wed) 23:10:12 編集(投稿者)

No76345 (ジャイアン さん) に返信
> ≪言語:VB2008≫
>
> こんにちは。いつもここを参考にさせて頂いております。
>
> さて、フォームのShowDialogの際に、色々と処理を追加したいと思い、
> このフォームのShowDialogのオーバーライドをしたいと考えましたが、
> ShowDialogはOverridableではないと怒られます。
>

overloads ならできるんですけどね。
↓参考
http://www.atmarkit.co.jp/fdotnet/chushin/introwinform_07/introwinform_07_02.html

あと、フォームのLoadイベントでフォームのCloseはすべきでないと聞きました。
どうしてもフォームを起動直後に閉じる必要がある場合は、私はLoadイベントではなくShownイベントでCloseするようにしています。





引用返信 編集キー/
■76363 / inTopicNo.10)  Re[2]: ShowDialogのオーバーライド?
□投稿者/ 774RR (272回)-(2015/07/02(Thu) 08:17:02)
> あと、フォームのLoadイベントでフォームのCloseはすべきでないと聞きました。
この辺でも議論されてますね。
http://blogs.wankuma.com/jeanne/archive/2006/02/12/21205.aspx

開きたくないならそもそも開かなきゃいい、に1票。
using (FormDialog1 dlg = new FormDialog1())
{
    if (dlg.SomeThingToDo()) r=dlg.ShowDialog();
}

開きたくない判定を Form 自体が持っているのがおかしい、にもう1票。
データベースに接続できないとか、そういう判定が当該 Form の中にあるのは設計がヘン。
だったらそもそも new FormDialog1() 自体しなくていいぢゃん。
if (SomethingToDo())
{
    using 以下略
}

既存コードをできるだけ触りたくないなどの理由により FormDialog1 自体を変更する量を最小限にしたい
ならオイラも Shown や Idle にて処理すべし、に意見修正しておきます。
一瞬 Form が見えちゃいますけど。

引用返信 編集キー/
■76374 / inTopicNo.11)  Re[3]: ShowDialogのオーバーライド?
□投稿者/ ジャイアン (3回)-(2015/07/03(Fri) 16:03:50)
皆さま、ご意見誠にありがとうございました。
また、ご連絡が遅くなり、誠に申し訳ございません。
今後のことも考え、皆さまのアドバイスを参考に、もう一度設計を見直そうと思います。

お付き合い頂き、誠にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -