2018年6月20日水曜日

C#でユーザコントロール側(参照先)からフォーム側(参照元)のメソッドをイベントを介して使用する方法を覚えないで毎度調べているのでメモ

--手っ取り早く済ます方法->

/// フォーム側
namespace HogeSpace
{
    public partial class formHoge : Form
    {
        (中略)
        
        /// ロードされたとき
        private void formHoge_Load(object sender, EventArgs e)
        {
            // ユーザコントロールにイベントハンドラーを設定する
            this.userControlHoge.SetHogeEventHandler += new EventHandler(this.SetHoge);
        }
        
        (中略)
        
        /// ユーザコントロールから使用されるメソッド
        private void SetHoge(object sender, EventArgs e)
        {
            // キャストして確認する
            string str = sender as string;
            if (str  == null) { return; }
            
            // ラベルに表示するとか
            this.lblHoge.Text = str;
        }
    }
}

/// ユーザコントロール側
namespace HogeSpace
{
    public partial class userControlHoge : UserControl
    {
        // イベントハンドラー
        public event EventHandler SetHogeEventHandler = null;
        
        (中略)
        
        /// テキストボックスからフォーカスアウトしたとき
        private void txtHoge_Leave(object sender, EventArgs e)
        {
            // イベントの設定の確認
            if (this.setHogeEventHandler  == null) { return; }
            
            // フォーム側に値を適用する
            this.SetHogeEventHandler (((TextBox)sender).Text, null);
        }
    }
}

<-手っ取り早く済ます方法--


--型を固定したり戻り値を取ったりする方法->

/// フォーム側
namespace PiyoSpace
{
    // イベントの型定義
    // (同じnamespace配下であればどの.csに記載しても大丈夫(のはず))
    public delegate string PiyoEventHandler(int index);    // <-
    
    public partial class formPiyo : Form
    {
        (中略)
        
        /// ロードされたとき
        private void formPiyo_Load(object sender, EventArgs e)
        {
            // ユーザコントロールにイベントハンドラーを設定する
            this.userControlPiyo.GetPiyoEventHandler += new PiyoEventHandler(this.GetPiyo);
        }
        
        (中略)
        
        /// ユーザコントロールから使用されるメソッド
        private string GetPiyo(int index)
        {
            // フォームのリストビューから指定されたインデックスの文字列を返すとか
            string ret = string.Empty;
            try
            {
                ret = this.listViewPiyo.Items[i].ToString();
            }
            catch
            {
                ret = string.Empty;
            }
            
            return  ret;
        }
    }
}

/// ユーザコントロール側
namespace PiyoSpace
{
    public partial class userControlPiyo : UserControl
    {
        // イベントハンドラー
        public event PiyoEventHandler GetPiyoEventHandler = null;
        
        (中略)
        
        /// コンボボックスの選択が変更されたとき
        private void cmbPiyo_SelectedIndexChanged(object sender, EventArgs e)
        {
            // イベントの設定の確認
            if (this.getPiyoEventHandler == null) { return; }
            
            // 選択しているインデックスを取得する
            int index = ((ComboBox)sender).Selectedindex;
            
            // フォーム側から値を取得する
            string str = this.GetPiyoEventHandler (index);
            
            // ラベルに表示してみるとか
            this.lblPiyo.Text = str;
        }
    }
}

<-型を固定したり戻り値を取ったりする方法--


動作しているコードからコピー/編集しました
※編集後のコンパイル/動作確認は行っていません

0 件のコメント:

コメントを投稿