我正在寻找类似于以下语句的陈述...
private void buttons_Click(object sender, EventArgs e)
{
if(e.buttons==mousebuttons.right)
//do something
else
//do other thing
}
你知道的,问题在于这是无法实现的,因为e
没有鼠标按钮事件,因为它被调用作为一个按钮点击事件
。
private void buttons_Click(object sender, EventArgs e)
{
if(e.buttons==mousebuttons.right)
//do something
else
//do other thing
}
你知道的,问题在于这是无法实现的,因为e
没有鼠标按钮事件,因为它被调用作为一个按钮点击事件
。
尝试使用 button1_MouseDown
事件代替 buttons_Click
事件,这将解决您的问题。
private void button1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
//do something
}
if (e.Button == MouseButtons.Right)
{
//do something
}
}
似乎无法使用点击事件。但是,MouseDown事件将为您提供一个具有button属性的MouseEventArgs。因此,也许您可以修改您的代码,改用MouseDown而不是click?
var btn = new Button();
btn.Text = "BUTTON";
btn.MouseDown += ((o, e) => {
MessageBox.Show(e.Button.ToString());
});
创建一个布尔类型的类变量,用于左右按钮,默认值为 false。当鼠标按下事件触发时,将变量设置为 true,并检查两个按钮是否都为 true。当鼠标松开事件触发时,将变量设置为 false。
public bool m_right = false;
public bool m_left = false;
private void MainForm_MouseDown(object sender, MouseEventArgs e)
{
m_objGraphics.Clear(SystemColors.Control);
if (e.Button == MouseButtons.Left)
m_left = true;
if (e.Button == MouseButtons.Right)
m_right = true;
if (m_left == false || m_right == false) return;
//do something here
}
private void MainForm_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
m_left = false;
if (e.Button == MouseButtons.Right)
m_right = false;
}
目标: 处理鼠标左键单击和鼠标右键单击。
问题: 当鼠标右键单击时,不会触发单击事件。只有在鼠标左键按下并释放时才会触发。
解决方案:
注意 A. 当鼠标右键在按钮上释放时,无论最初按下时是否在按钮上,都会触发MouseRightButtonUp事件。
注意 B. 这种情况与本文无关,但您应该知道,Button对象的Click事件(按下并释放鼠标左键)处理MouseLeftButtonDown和MouseLeftButtonUp事件,因此当您使用鼠标左键单击Button对象时,这两个事件都不能被处理。如果您确实需要分别处理这些操作,则应订阅PreviewMouseLeftButtonDown和/或PreviewMouseLeftButtonUp事件。
然后你可以选择:
a. 为这两个事件分别编写两个不同的事件处理程序,或者
b. 编写一个事件处理程序,可以同时处理单击和鼠标右键弹起事件。 注意:单击事件需要一个接受类型为RoutedEventArgs的参数的处理程序,而MouseRightButtonUp事件需要一个接受类型为MouseButtonEventArgs的参数的处理程序。RoutedEventArgs和MouseButtonEventArgs都继承自EventArgs。因此,让处理程序接受EventArgs。然后,处理程序应确定它是否已传递了RoutedEventArgs(在这种情况下,它执行所需的左键单击操作)或MouseButtonEventArgs(在这种情况下,它执行所需的右键单击操作)。
代码示例:
myButton.MouseRightButtonUp += MenuItemButton_Click;
myButton.Click += MenuItemButton_Click;
internal void MenuItemButton_Click(object sender, EventArgs e)
{
var clickedButton = sender as Button;
string EventArgsType = e.GetType().ToString();
//Remove leading qualification from Type ("System.Windows." or "System.Windows.Input.")
EventArgsType = type.Substring(EventArgsType.LastIndexOf('.') + 1);
switch (EventArgsType)
{
//Handle R-Click (RightMouseButtonUp)
case "MouseButtonEventArgs":
var MbeArgs = e as MouseButtonEventArgs;
//Do stuff
break;
//Handle L-Click (Click)
case "RoutedEventArgs":
var ReArgs = e as RoutedEventArgs;
//Do stuff
break;
default:
break;
}
}
Type t = e.GetType();
if (t.Equals(typeof(MouseEventArgs)))
{
MouseEventArgs mouse = (MouseEventArgs)e;
if (mouse.Button == MouseButtons.Left)
{
Console.WriteLine("****Left!!");
}
if (mouse.Button == MouseButtons.Right)
{
Console.WriteLine("****Right!!");
}
}
}
EventArgs e
强制转换为MouseEventArgs
。然而,它只能捕获mousebuttons.left
而不能捕获mousebuttons.right
。 - Edper