MouseButtons ::左边是c ++ / cli

时间:2011-03-04 16:39:37

标签: c++-cli

我想检查左按钮是否是按下的按钮。

我对Msdna说道:

if(e->Button == MouseButtons.Left) {...}
//or
if(e->Button == ::MouseButtons.Left) {...}

但是没有人编译。

2 个答案:

答案 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
    }
}