using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using CallBackLib;
namespace CallBack
{
/// <summary>
/// Form1 の概要の説明です。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btnDelegateCallBack;
private System.Windows.Forms.Button btnCallback;
private System.Windows.Forms.Button btnDeleg;
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows フォーム デザイナ サポートに必要です。
//
InitializeComponent();
//
// TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
//
}
/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.btnDeleg = new System.Windows.Forms.Button();
this.btnDelegateCallBack = new System.Windows.Forms.Button();
this.btnCallback = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// btnDeleg
//
this.btnDeleg.Location = new System.Drawing.Point(56, 48);
this.btnDeleg.Name = "btnDeleg";
this.btnDeleg.Size = new System.Drawing.Size(184, 23);
this.btnDeleg.TabIndex = 0;
this.btnDeleg.Text = "デリゲート呼び出し";
this.btnDeleg.Click += new System.EventHandler(this.button1_Click);
//
// btnCallback
//
this.btnCallback.Location = new System.Drawing.Point(56, 112);
this.btnCallback.Name = "btnCallback";
this.btnCallback.Size = new System.Drawing.Size(192, 23);
this.btnCallback.TabIndex = 2;
this.btnCallback.Text = "デリゲートによるコールバック";
this.btnCallback.Click += new System.EventHandler(this.btnCallback_Click);
//
// btnDelegateCallBack
//
this.btnDelegateCallBack.Location = new System.Drawing.Point(56, 168);
this.btnDelegateCallBack.Name = "btnDelegateCallBack";
this.btnDelegateCallBack.Size = new System.Drawing.Size(184, 23);
this.btnDelegateCallBack.TabIndex = 1;
this.btnDelegateCallBack.Text = "デリゲート→デリゲートコールバック";
this.btnDelegateCallBack.Click += new System.EventHandler(this.btnDelegateCallBack_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.btnCallback,
this.btnDelegateCallBack,
this.btnDeleg});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
// ClassLib のインスタンスを作る。
CallBackLib.ClassLib classLib = new CallBackLib.ClassLib();
// ClassLib のメソッド(ClassLibMethod)のデリゲートを作る。
DelegForStr delegateForClassLibMethod = new DelegForStr(classLib.ClassLibMethod);
// ClassLib のメソッドをデリゲートより呼び出す。
string result = delegateForClassLibMethod("Hello ");
// 結果を書く。
Console.WriteLine(result);
}
public void MyCallBack()
{
Console.WriteLine("MyCallBack has been called back!");
}
/// <summary>
/// コールバックをセットする方法(パターン1)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCallback_Click(object sender, System.EventArgs e)
{
// ClassLib のインスタンスを作る。
CallBackLib.ClassLib classLib = new CallBackLib.ClassLib();
// MyCallBack のデリゲートを作る。
CallBackLib.CallBack myCallBack = new CallBackLib.CallBack(MyCallBack);
// ClassLib にコールバックをセットする。
classLib.SetCallBack(myCallBack);
// MyCallBack のデリゲートを引数として呼び出す。
classLib.CallCallBack();
}
/// <summary>
/// コールバックメソッドをデリゲートのパラメータで渡す方法(パターン2)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDelegateCallBack_Click(object sender, System.EventArgs e)
{
// ClassLib のインスタンスを作る。
CallBackLib.ClassLib classLib = new CallBackLib.ClassLib();
// MyCallBack のデリゲートを作る。
CallBackLib.CallBack myCallBack = new CallBackLib.CallBack(MyCallBack);
// ClassLib のメソッド(CallBackCaller)のデリゲートを作る。
DelegForCallBack delForCallBack = new DelegForCallBack(classLib.CallBackCaller);
// MyCallBack のデリゲートを引数として呼び出す。
delForCallBack(myCallBack);
}
}
}
|