如何检查按钮是否悬停,并输出消息
本文关键字:悬停 输出 消息 是否 按钮 何检查 检查 | 更新日期: 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
以了解谁在调用事件处理程序 - 然后创建不同的消息。
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";
} ...
我假设这是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;
}