C++/cli 中的 MouseButtons::Left

2 c++-cli

我想检查一下左侧按钮是否被按下。

我在Msdna上红了:

if(e->Button == MouseButtons.Left) {...}
//or
if(e->Button == ::MouseButtons.Left) {...}
Run Code Online (Sandbox Code Playgroud)

但它们都没有编译。

Han*_*ant 6

这是C++语言的一个烦恼,由C++/CLI继承。它将类型名称和类成员名称放在同一个符号表中。当您使用 C++/CLI 而不是 C# 或 VB.NET(将类型标识符分开的语言)编写 Winforms 代码时,这是您经常会遇到的问题。

MouseButtons 枚举类型和 Form 类的 MouseButtons 属性之间存在歧义,它们都在此处的范围内。IntelliSense 不再帮助您获得正确的语法,这可能就是您最终得到的结果。而不是 :: 不再有机会获得像样的编译器错误消息。您可以通过完整编写枚举类型名称来解决歧义:

     if (e->Button == System::Windows::Forms::MouseButtons::Left) {
         // etc...
     }
Run Code Online (Sandbox Code Playgroud)

诸如此类的问题可能是 C++/CLI 从未流行起来的原因之一。话又说回来,C# 是一种集体行为。受到推崇的。