我在应用程序中有40个按钮,我需要在状态字段中显示的自定义悬停。我已经创建了一个添加特定消息的功能和一个要删除的功能,因此在悬停时,它会调用该功能,并且在离开按钮时也是如此。
我想要40条不同的消息,其中一种方法就是检查鼠标悬停在哪个按钮上。
if(button1.hovered == true){
string message = "scenario1";
}
elseif(button2.hovered == true){
scenario2...etc
}
有没有办法检查是否徘徊?并在if语句中检查它?
我决定添加更多信息,以便更容易理解我的观点。
鼠标悬停时将消息添加到listview。
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测试并检查女巫按钮悬停,然后将消息输出到指定的按钮。我正在使用visual studio和windows窗体,抱歉没有提到。
答案 0 :(得分: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
作为所有按钮的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";
} ...
答案 1 :(得分:0)
我将假设这是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;
}