我想检查左按钮是否是按下的按钮。
我对Msdna说道:
if(e->Button == MouseButtons.Left) {...}
//or
if(e->Button == ::MouseButtons.Left) {...}
但是没有人编译。
答案 0 :(得分:2)
这是C ++语言的烦恼,由C ++ / CLI继承。它将类型名称和类成员名称放在同一个符号表中。当您使用C ++ / CLI而不是C#或VB.NET编写Winforms代码时,您经常会遇到这种情况,这些语言将类型标识符分开。
MouseButtons枚举类型和Form类的MouseButtons属性之间存在歧义,它们都在此范围内。 IntelliSense停止帮助您获得正确的语法,这可能是您最终的结果。而不是::不再有机会得到一个体面的编译器错误消息。您可以通过完整编写枚举类型名称来解决歧义:
if (e->Button == System::Windows::Forms::MouseButtons::Left) {
// etc...
}
这些问题可能是C ++ / CLI从未如此流行的一个原因。再说一遍,C#是一种集体行为。推荐使用。
答案 1 :(得分:0)
您需要将事件挂钩到您想要的控件上:
this->control->MouseDown += new System::Windows::Forms::MouseEventHandler(this, &Form1::control_MouseDown);
并像这样处理:
void control_MouseDown(Object* sender, System::Windows::Forms::MouseEventArgs* e) {
if(e->Button == MouseButtons::Left) {
//code here
}
}