2012-04-20 2 views
-3

ステータスフィールドに表示されるカスタムホバーが必要なアプリケーションに40個のボタンがあります。特定のメッセージを追加する機能と削除する機能を用意しています。そのため、ホバーすると機能を呼び出し、ボタンを離したままにします。ボタンがホバーされているかどうかをチェックしてメッセージを出力する方法

私は40種類のメッセージが必要ですが、その1つの方法は、どのボタンがマウスによって覆われているかを確認することです。

if(button1.hovered == true){ 
    string message = "scenario1"; 
} 
elseif(button2.hovered == true){ 
    scenario2...etc 
} 

ホバリングされているかどうかを確認する方法はありますか? if文でチェックしますか?

iveもっと多くの情報を追加することに決めたので、私の要点を簡単に得ることができます。

マウスフーバーのときにリストビューにメッセージを追加します。リストボックスから

void messAdd(object sender, EventArgs e) 
    { 


     string now = DateTime.Now.ToString("M/d/yyyy") + " - " + DateTime.Now.ToString("HH:mm:ss tt"); 
     string message = "message 1"; 
     found = false; 

     ListViewItem item = new ListViewItem(message); 
     foreach (ListViewItem z in listView1.Items) 
     { 
      if (z.Text == message) 
      { found = true; } 
     } 

     if (found == false) 
     { 
      item.SubItems.Add(now.ToString()); 
      listView1.Items.Add(item); 
      listView1.EnsureVisible(item.Index); 
     } 
     else 
     { 
      DeleteIfNecessary(message); 
     } 
    } 

削除メッセージマウス休暇:

void messdel(object sender, EventArgs e) 
    { 


     string message = "message 1"; 
     found = false; 

     ListViewItem item = new ListViewItem(message); 
     foreach (ListViewItem z in listView1.Items) 
     { 
      if (z.Text == message) 
      { found = true; } 
     } 

     if (found == true) 
     { 
      DeleteIfNecessary(message); 
     } 

    } 

私は各ボタンのこれらの関数の4を作ることができますが、私は40件の異なるメッセージ、愚かなイエスを必要とするので、それに方法はありません関数を介してメッセージの引数を送信するので、私はifテストを使用し、魔法使いのボタンを確認し、その指定されたボタンにメッセージを出力する必要があります。と私はビジュアルスタジオとWindowsフォームを使用して、申し訳ありませんが記載されています。

+2

WPF:推移しているボタンをチェックすると

private void buttons_MouseEnter(object sender, System.EventArgs e) { Button btn = ((Button)sender); hoveredId = (int)btn.Tag; } private void buttons_MouseLeave(object sender, System.EventArgs e) { Button btn = ((Button)sender); if ((int)btn.Tag == hoveredId) hoveredId = -1; } 

、あなたはswitchステートメントを使用できますか? Winforms? WebForms? Silverlight? WP7?地下鉄? – Oded

+0

Webフォームの場合、HoverMessageプロパティを持つ独自の派生Buttonクラスを作成し、MouseHoverイベントにアタッチしてメッセージを設定できます。 (その後、MouseLeaveイベントで元に戻す) – Balthy

+0

申し訳ありません。 winforms im on :) – 1244

答えて

4

Control.MouseHoverイベントがあります。 IDEでbutton_MouseHoverMouseHoverのイベントハンドラを設定し、

private void button_MouseHover(object sender, System.EventArgs e) 
{ 
    doSomething(sender); 
} 

とあなたのすべてのボタンのために、またはコードでそれを行う:あなたが実装することができ

this.button1.MouseHover += new System.EventHandler(this.button_MouseHover); 

senderパラメータをチェックすることによって、あなたはどの知ることができますボタンがイベントハンドラを呼び出しています。

更新

問題のあなたの更新によると、私はあなたがちょうどあなたのすべてのボタンについてMouseEnterイベントのイベントハンドラとしてmessAddを使用し、MouseLeaveのイベントハンドラとしてmessdelを使用することができると思います。この場合も、すべてのボタンに対してこれら2つのメソッドのコピーを作成する必要はありません。と同じイベントハンドラメソッドをすべてのボタンに割り当て、senderをチェックして、異なるメッセージを作成します。

senderは、Buttonオブジェクトです。 Buttonにキャストし、リストビューでメッセージを追加/削除しようとしているのがButtonであることを知るために、必要なもの(テキスト、タグ、名前など)にアクセスしてください。

アップデート2

Button button = sender as Button; 
if (button == null) { 
    // not a button, do nothing 
    return; 
} 

string message = String.Empty; 
if (sender.Equals(button1)) { 
    message = "message1"; 
} else if (sender.Equals(button2)) { 
    message = "message2"; 
} ... 
+0

私は4つのボタンを持っており、ボタンごとにたくさんのコードがあります。同じ機能を参照していますので、すべてのボタンでtrueなら必要です。 – 1244

+0

@ 1244ボタンごとにたくさんのコードは必要ありません。ボタンは同じイベントハンドラを共有できます。 'sender'が誰であるかを調べることで、イベントハンドラ内の異なるボタンに対して異なることを行うだけです。 – Hailei

+0

は私のコードをもっと今追加しました。より理解できることを願っています! :) – 1244

0

特に指定していなかったので、私は、これはリサイズであると仮定するつもりです。

-1は、どのボタンがホバリングされているかを表すint hoveredIdを作成できます。何も配置されていないことを意味します。ボタンを作成するときは、ボタンのID番号にTagプロパティを設定します。その後

、これらの機能の両方に、それぞれのボタンを登録します。

switch (hoveredId) 
{ 
    case 1: 
    string message = "scenario1"; 
    break; 
    case 2: 
    scenario2...etc 
    break; 
} 
+0

私はこれを試してみましょう:)そしてそれはどうなるのかをよく見てください:) – 1244

+0

は今や私のコードをさらに追加しました。より理解できることを願っています! – 1244

+0

ボタンを押すとすぐにメッセージを更新しますか? –

関連する問題