如何检查按钮是否悬停,并输出消息

本文关键字:悬停 输出 消息 是否 按钮 何检查 检查 | 更新日期: 2023-09-27 18:31:42

我在应用程序中有 40 个按钮,我需要自定义悬停,这些悬停将显示在状态字段中。我创建了一个用于添加特定消息和要删除的函数,因此在悬停时,它会调用该函数,并且与离开按钮相同。

我想要 40 条不同的消息,一种方法是检查鼠标悬停在哪个按钮上。

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

有没有办法检查是否悬停?并在 if 语句中检查它?

决定添加更多信息,以便更容易理解我的观点。

鼠标悬停时向列表视图添加消息。

    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 测试和检查女巫按钮悬停,然后将消息输出到指定的按钮。 和IM使用Visual Studio和Windows窗体, 对不起,没有提到。

如何检查按钮是否悬停,并输出消息

有一个

Control.MouseHover事件。您可以实现:

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

对于所有按钮,将MouseHover的事件处理程序设置为在 IDE 中button_MouseHover,或在代码中执行此操作:

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

通过检查 sender 参数,您可以知道哪个按钮正在调用事件处理程序。

更新

根据您在问题中的更新,我认为您可以将messAdd用作所有按钮MouseEnter事件的事件处理程序,并使用messdel作为MouseLeave的事件处理程序。同样,您不需要为所有按钮创建这两个方法的副本,您只需要为所有按钮分配相同的事件处理程序方法,并检查sender以了解谁在调用事件处理程序 - 然后创建不同的消息。

senderButton对象。只需将其投射到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";
} ...

我假设这是WinForms,因为您没有另行指定。

您可以创建一个 int hoveredId,表示悬停的按钮(值-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;
}