DOBON.NET DOBON.NETプログラミング掲示板過去ログ

継承フォームからイベント作成

環境/言語:[VS2005 C#]
分類:[.NET]

基本となるフォーム(ファンクション、デザインの統一など)を作成して
そのフォームを継承して各機能画面を作成しているのですが
ファンクションキー、ツールボタンのクリックやイベントを
継承先で受け取る方法で悩んでいます。

通常デリゲートイベントを作成して
フォームのKeyDownで取得したキーにより関連付けしたメソッドを
呼び出しますが
継承フォームになるとどうなるのか悩んでいるところです。
仮想メソッド(Virtual)ではどうでしょう。
#と言いながらVBで書きます。m(_ _)m

Public Class BaseForm1

  ' 基底クラスは通常のイベントハンドラ
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' 仮想メソッドの呼び出し
    Me.OnButton1Click(e)
  End Sub

  ' 仮想メソッド Overridable→Virtual
  Protected Overridable Sub OnButton1Click(ByVal e As System.EventArgs)
    ' 基底クラスでの処理
  End Sub

End Class

Public Class MyForm1
  Inherits BaseForm1

  ' 必要ならオーバーライド
  Protected Overrides Sub OnButton1Click(ByVal e As System.EventArgs)
    MyBase.OnButton1Click(e)
    ' 派生クラスでの処理
  End Sub

End Class
ありがとうございます。
試してみます 結果また返信します。
こんにちは
以下 試したソースです。
おかげさまで継承先でイベントも発生しましたが
しかし継承元の
public event EventHandler Push, Push2, Push3;
のように1対1でイベントを作成しないといけないんですが
ここを効率よく書けないものでしょうか?

namespace BaseForm
{
public delegate void EventHandler();

public partial class BaseForm : Form
{
public event EventHandler Push, Push2, Push3;

public BaseForm()
{
InitializeComponent();
Push += new EventHandler(aaa);
Push2 += new EventHandler(aaa2);
Push3 += new EventHandler(aaa3);

}

protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.F1) { OnPush("1"); }
if (e.KeyCode == Keys.F2) { OnPush("2"); }
if (e.KeyCode == Keys.F3) { OnPush("3"); }

base.OnKeyDown(e);

}

public void OnPush(string KeyCode)
{
if (KeyCode == "1") { Push(); }
if (KeyCode == "2") { Push2(); }
if (KeyCode == "3") { Push3(); }

}

protected virtual void aaa(){}
protected virtual void aaa2() { }
protected virtual void aaa3() { }

}
}
----------------------------------------------------------------
継承先

protected override void aaa()
{
MessageBox.Show("F1");
}

protected override void aaa2()
{
MessageBox.Show("F2");
}

protected override void aaa3()
{
MessageBox.Show("F3");
}
#ちょっと自分が不安。

↓だけでいいような気が。
分けたいならOnPush1、OnPush2とか。

> protected override void OnKeyDown(KeyEventArgs e)
> {
> if (e.KeyCode == Keys.F1) { OnPush(e); }
> if (e.KeyCode == Keys.F2) { OnPush(e); }
> if (e.KeyCode == Keys.F3) { OnPush(e); }
>
> base.OnKeyDown(e);
>
> }
>
> protected virtual void OnPush(KeyEventArgs e)
> {
> }
>
> ----------------------------------------------------------------
> 継承先
>
> protected override void OnPush(KeyEventArgs e)
> {
> if (e.KeyCode == Keys.F1) { MessageBox.Show("F1"); }
>
> base.OnPush(e);
> }
>

#(string KeyCode)について
独自のイベントの引数を作る場合(string KeyCode)は、System.EventArgsを継承して独自の引数クラスを作成します。
http://msdn2.microsoft.com/ja-jp/library/ms229011(VS.80).aspx

DOBON.NET | プログラミング道 | プログラミング掲示板