2016-07-18 12 views
0

Windowsフォームプロジェクトでは、動的に作成されたコントロールのいくつかのプロパティを設定するこのメソッドがあります。この場合、ユーザーがマウスをマウスの上に置いたときにツールチップを表示する必要があります。これは、1つのことを除いては問題なく動作しますが、w ["text"]の値をcontrol_MouseEnterに渡す方法はわかりません。 ControlオブジェクトのTagメンバーにテキストを設定する方法についてランタイムパスデータのコントロールを作成する

private void SetProp(ref Control obiekt, Dictionary<string, string> w) 
    { 
     obiekt.Name = w["id"]; 
     obiekt.Location = new Point(Convert.ToInt16(w["wspx"]), Convert.ToInt16(w["wspy"])); 
     obiekt.Height = Convert.ToInt16(w["wys"]); 
     obiekt.Width = Convert.ToInt16(w["szer"]); 
     if (w["text"] != "") 
     { 
      obiekt.MouseEnter += new EventHandler(control_MouseEnter); 
      obiekt.MouseLeave += new EventHandler(control_MoouseLeave); 
     } 
    } 

private void control_MouseEnter(object sender, EventArgs e) 
    { 
     toolTip.Show("how to pass a value here ??", (Control)sender, 5000); 
    } 

答えて

0

w ["text"]の値をcontrol_MouseEnterに渡す必要はありません。

あなたは(Control.Tagプロパティを介して、例えば)を直接対象のコントロールを使用してデータをリンクまたは間接的に(例えば、グローバル変数/辞書経由)、またはローカルデータ - を作成するために、匿名デリゲートやクロージャを使用しますかコンテキスト:

obiekt.MouseEnter += (s,e) => { 
    tooltip.Show(w["text"], (Control)s, 5000); 
}; 

は何とかのEventArgsを使用する方法はありますか?

いいえ、できません。 argsは、マウスイベントが発生した時点でコントロールのコード内でインスタンス化されるため、EventArgsの作成をイベントサブスクリプションポイントから制御することはできません。

+0

これは良い解決策に思えます。ありがとうございました。 – jankes

0

どのように?

thth。 object.Tag = w["text"];のように、イベントハンドラで表示

+0

ありがとう、これは実際に期待どおりに動作します。それが唯一の解決策ですか?何とかEventArgsを使用する方法はありますか? – jankes

関連する問題