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

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

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

Re[4]: 継承元フォームでボタンイベントキャンセル


(過去ログ 75 を表示中)

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

■44466 / inTopicNo.1)  継承元フォームでボタンイベントキャンセル
  
□投稿者/ sas (1回)-(2009/12/09(Wed) 20:21:52)

分類:[.NET 全般] 

WinXP(SP2)、VisualBasic2005

ボタンなどを配置した継承フォームを作成しており、ボタンをクリックした時に継承先フォームでの
ボタンクリックイベントを中断したいのですが、どうすればよいのでしょうか?


(継承元フォーム)
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click
ここで、継承先フォームのクリックイベントを処理しないようにイベントキャンセルしたい
End Sub

(継承先フォーム)
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click
業務使用に応じた処理を記載
End Sub


継承先フォームでそれぞれ記述していけば簡単なのですが、共通処理でもあるため継承元で制御できればと考えています。
よろしくお願いします。
引用返信 編集キー/
■44467 / inTopicNo.2)  Re[1]: 継承元フォームでボタンイベントキャンセル
□投稿者/ たくボン (300回)-(2009/12/09(Wed) 20:47:53)
No44466 (sas さん) に返信
> WinXP(SP2)、VisualBasic2005
> 継承先フォームでそれぞれ記述していけば簡単なのですが、共通処理でもあるため継承元で制御できればと考えています。
> よろしくお願いします。

継承先でボタンイベントを個別に書くのではなく、継承元でイベントを定義しておいて発火、継承先はそのイベントに処理を書く。
これなら、継承元でクリックイベントを感知して、継承先にイベントを発火させるかどうかは継承元で制御可能。
引用返信 編集キー/
■44468 / inTopicNo.3)  Re[2]: 継承元フォームでボタンイベントキャンセル
□投稿者/ sas (3回)-(2009/12/09(Wed) 20:59:16)
No44467 (たくボン さん) に返信
> ■No44466 (sas さん) に返信
>>WinXP(SP2)、VisualBasic2005
>>継承先フォームでそれぞれ記述していけば簡単なのですが、共通処理でもあるため継承元で制御できればと考えています。
>>よろしくお願いします。
>
> 継承先でボタンイベントを個別に書くのではなく、継承元でイベントを定義しておいて発火、継承先はそのイベントに処理を書く。
> これなら、継承元でクリックイベントを感知して、継承先にイベントを発火させるかどうかは継承元で制御可能。


たくボン さん、返信ありがとうございます。

すいません、返信頂いた内容がイメージできなかったのですが、継承先に記述しているイベント処理を継承元に記述すると
いう事でしょうか?
継承先に記述しているボタンイベントとは、データベース更新などの各PGそれぞれの個別使用となるため、それを継承元に
記述する事はできません。

継承元に「e.Handled = True」のような記述を行い、継承先でのイベントをキャンセルできないのでしょうか?
引用返信 編集キー/
■44492 / inTopicNo.4)  Re[3]: 継承元フォームでボタンイベントキャンセル
□投稿者/ たくボン (301回)-(2009/12/10(Thu) 10:09:24)
No44468 (sas さん) に返信
>>■No44466 (sas さん) に返信
> すいません、返信頂いた内容がイメージできなかったのですが、継承先に記述しているイベント処理を継承元に記述すると
> いう事でしょうか?
> 継承先に記述しているボタンイベントとは、データベース更新などの各PGそれぞれの個別使用となるため、それを継承元に
> 記述する事はできません。

継承元で共通の処理をして、その結果からイベントを発生させるかどうかを判断するなら、こんな感じ。
Form1にBtnRegistのボタンを配置。

Public Class Form1
    Public Event Regist As EventHandler
    Private Sub btnRegist_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegist.Click
        '条件を満たす場合のみイベントを発火
        If hoge_check Then RaiseEvent Regist(Me, New EventArgs)
    End Sub
    '共通処理のチェック
    Function hoge_check() As Boolean
        Return True
    End Function
End Class

一回コンパイルして、継承フォームForm2を追加。

'Form1を継承
Public Class Form2
    Private Sub Form2_Regist(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Regist
        '各画面で個別の登録処理
    End Sub
End Class

これなら、hoge_check()が真の場合のみ、各画面にRegistイベントが発火されるから共通チェックなんかはこれで統一するのがいいかも。

 
> 継承元に「e.Handled = True」のような記述を行い、継承先でのイベントをキャンセルできないのでしょうか?

こっちのパターンをするなら、CancelEventArgs:EventArgs、CancelEventHandler:EventHandlerみたいなイベントを用意してイベントを発火。

どっちのパターンを使用するかは、システムの構成によって判断してください。

引用返信 編集キー/
■44530 / inTopicNo.5)  Re[4]: 継承元フォームでボタンイベントキャンセル
□投稿者/ sas (5回)-(2009/12/11(Fri) 11:48:18)
No44492 (たくボン さん) に返信

たくボン さん、返信ありがとうございます。

教えて頂いた方法で、やりたかった事が実現できました。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -