C# イベント & フォーム 基本編
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
static void Main()
{
Application.Run(new Form());
}
}
コンソールアプリケーションから入力すると、
using System.Drawing;
using System.Windows.Forms;
に赤線で動かせない。
ウィンドウズフォームアプリケーション なら問題なく動く。
原因は、
「ライブラリ」が参照されてない
参照設定→追加→.net
using System.Drawing; → System.Drawing
using System.Windows.Forms; →System.Windows.Forms.dll
どうやら
ウィンドウズフォームアプリケーション でプロジェクトを作った場合。
テンプレート的にライブラリを自動追加して設定してくれているみたい。
Java で swing 触った時も
基本的には
ライブラリ呼び出す→プロパティ設定→出力
みたいな流れだったので、今回はそこからいくべし。
本来のイベント + イベントハンドラーの実装手順は
イベントハンドラー
→イベント発生時に実行されるメソッド
非常に参考になる
↓
コントロール作成 butto1 = new Buttone();
↓
コントロールのプロパティを設定 button1.Location = new Point(10, 10)
↓
イベントハンドラの作成
button1.Click += new EventHandler(Button1_Click)
void Button1_Click(object sender, EventArgs e)
{
this.count++;
this.button1.Text = this.count.ToString();
}
↓
コントロールをフォームに追加
Contorols.Add(button1);
void Button1_Click(object sender, EventArgs e)
sender →イベントの発生元のオブジェクトが入っている
今回の場合だと
object sender → Buttonクラスのオブジェクト
EventArgs e →クリックの情報など
sender の設定次第では
で複数のボタンでも クリックされたボタンのオブジェクトを取得することも可能。
前に挑んだ電卓で見たなこれ
仮に
private void button1_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
}
であれば、
Button btn にはボタンの実体が入る。
にしてもこれ
引数 とか 基本的なルール知らないとどうにもならないなー
疑問は ()sender なんだが?
参考
[c#]複数のコントロールで共通のイベントハンドラを呼び出すには
// senderをButton型として扱う btn = (Button)sender;
公式では
private void button1_Click(object sender, System.EventArgs e) { }
イベントハンドラー とは イベントに関連付けられたメソッド
上記の例は Button コントロール の Click イベントの
イベントハンドラー
概要図は
Button コントロール
|_Click イベント
|_Click-(イベントハンドラー)かな?
objeck sender
はsender イベントを発生させたオブジェクトへの参照を提供
EventArgs e
では処理されるイベント今回で言えばClick イベント用のオブジェクトをわたす