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

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

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

Re[2]: ボタンクリック時イベントハンドラで引数を渡す方法


(過去ログ 62 を表示中)

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

■36092 / inTopicNo.1)  ボタンクリック時イベントハンドラで引数を渡す方法
  
□投稿者/ ゆる (3回)-(2009/05/20(Wed) 19:53:01)

分類:[.NET 全般] 

Visual c#2008

いつも勉強させて頂いておりますm(_ _)m

ボタンクリック時のイベントで引数を渡したいのですが、うまくいかず悩んでいます。
イメージとしては、例えば

Private イベント名(int XXID←引数)
{
MessageBox.Show("ID=" + xxID);
}


といったソースがフォームにあって、
ボタンのボタンクリック時イベントに「イベント名(10)」といったように設定して
任意の引数を渡したいのですが、方法がよくわかりません。

VBAではイベントのプロパティに「=イベント名(10)」と書けば良かったのですが…。
いろいろ検索してみて
「System.EventArgsクラスを継承して、
自分が渡したい情報を記録できるクラスを作り出して、これを使う。」

といったようなことが書いてあったのですが、具体的な方法が判らず悩んでいます。
ご教授頂ければ幸いです。

どうかよろしくお願いいたします。



引用返信 編集キー/
■36093 / inTopicNo.2)  Re[1]: ボタンクリック時イベントハンドラで引数を渡す方法
□投稿者/ ゆる (4回)-(2009/05/20(Wed) 19:55:03)
申し訳ございません分類間違えました_| ̄|○
c#ですm(_ _)m


引用返信 編集キー/
■36101 / inTopicNo.3)  Re[1]: ボタンクリック時イベントハンドラで引数を渡す方法
□投稿者/ s2n (2回)-(2009/05/20(Wed) 21:59:22)
No36092 (ゆる さん) に返信
> ボタンクリック時のイベントで引数を渡したいのですが、うまくいかず悩んでいます。
> イメージとしては、例えば
>
> Private イベント名(int XXID←引数)
> {
> MessageBox.Show("ID=" + xxID);
> }

VisualStudioで自動生成したイベントの場合
private void button1_Click(object sender, EventArgs e)
{

}
のようになると思いますが、クリックしたボタンの情報を取得したいのでしょうか?
この場合は、senderがButtonコントロールになるのでキャストすればボタンの情報を取得できますが・・・
string buttonName = ((Button)sender).Name; // ボタンの名前



引用返信 編集キー/
■36102 / inTopicNo.4)  Re[2]: ボタンクリック時イベントハンドラで引数を渡す方法
□投稿者/ επιστημη (1941回)-(2009/05/20(Wed) 22:15:05)
επιστημη さんの Web サイト
↓こんなんでええのかの。

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication01
{
    // ほげハンドラはobjectとほげイベント引数を引数にとる
    public delegate void HogeHandler(object sender, HogeEventArgs e);

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            HogeListener listener = new HogeListener(); // ほげリスナを用意し
            Hoge += listener.OnHoge; // ほげリスナのほげハンドラをほげイベントにアタッチ
        }

        // ほげイベント
        public event HogeHandler Hoge;

        // ボタン押されたらほげる。
        private void button1_Click(object sender, EventArgs e)
        {
            if ( Hoge != null )
            {
                Hoge(this, new HogeEventArgs(textBox1.Text)); // ほげっ!
            }
        }
    }
}

// ほげイベント引数
public class HogeEventArgs : EventArgs
{
    private string message_;
    public HogeEventArgs(string msg)
    {
        message_ = msg;
    }
    public string Message
    {
        get { return message_; }
    }
}

// ほげリスナ
public class HogeListener
{
    // ほげハンドラ
    public void OnHoge(object sender, HogeEventArgs e)
    {
        Show(e.Message);
    }
    // メッセージボックスだす
    private void Show(string msg)
    {
        MessageBox.Show("Message = " + msg);
    }
}

引用返信 編集キー/
■36112 / inTopicNo.5)  Re[2]: ボタンクリック時イベントハンドラで引数を渡す方法
□投稿者/ ゆる (5回)-(2009/05/21(Thu) 00:56:38)
s2nさま επιστημηさま
早速のご回答、ありがとうございます。

s2nさま
object sender とはそういうことだったのですね、勉強になりました!
コントロール名の末尾を切り出すとかTabIndexを用いるとか、
使い方次第で1つのハンドラで複数のボタンからの処理を分岐させることができそうです。

επιστημηさま
丁寧なソースまでくださいまして、ありがとうございます!
「EventArgsクラスを継承して、自分が渡したい情報を記録できるクラスを作り出して使う。」
って、こういうことなのですねφ(・_・")メモメモ
じっくり勉強させて頂きます。


どうにかやりたいことが実現できそうです、
ありがとうございましたm(_ _)m



解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -