-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の異なるメッセージが必要なので、ばかげていますが、関数を介してメッセージ引数を送信する方法がないため、iftestを使用して魔女ボタンをチェックする必要があります次に、その指定されたボタンにメッセージを出力します。Visual StudioとWindowsフォームを使用していますが、言及されていないことをお詫びします。

4

2 に答える 2

4

イベントがありControl.MouseHoverます。次のものを実装できます。

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

すべてのボタンについて、IDEでイベントハンドラーをに設定MouseHoverするbutton_MouseHoverか、コードで実行します。

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

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

アップデート

質問の更新によると、すべてのボタンのイベントのイベントハンドラーとして使用でき、のイベントmessAddハンドラーとして使用できると思います。繰り返しますが、すべてのボタンにこれら2つのメソッドのコピーを作成する必要はありません。すべてのボタンに同じイベントハンドラーメソッドを割り当て、誰がイベントハンドラーを呼び出しているかを確認するだけです。メッセージ。MouseEntermessdelMouseLeavesender

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";
} ...
于 2012-04-20T11:28:58.873 に答える
0

特に指定しなかったため、これはWinFormsであると想定します。

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

次に、各ボタンを次の両方の機能に登録します。

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ステートメントを使用できます。

switch (hoveredId)
{
  case 1:
    string message = "scenario1";
    break;
  case 2:
    scenario2...etc
    break;
}
于 2012-04-20T11:35:12.593 に答える