MouseButtons :: Left в c ++ / cli - PullRequest
0 голосов
/ 04 марта 2011

Я хотел бы проверить, нажата ли левая кнопка.

Я красный на Msdna:

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

Но никто из них не компилируется.

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

Это раздражает язык C ++, унаследованный C ++ / CLI. Он помещает имена типов и имена членов класса в одну таблицу символов. Это то, с чем вы будете часто сражаться, когда будете писать код Winforms в C ++ / CLI вместо C # или VB.NET, языков, в которых идентификаторы типов разделены.

Существует двусмысленность между типом перечисления MouseButtons и свойством MouseButtons класса Form, они оба здесь находятся в области видимости. IntelliSense перестает помогать вам в правильном синтаксисе, который, вероятно, так вы и сделали. вместо :: Больше не оставляя шансов получить достойное сообщение об ошибке компилятора. Вы устраняете неоднозначность, записывая полное имя типа enum:

     if (e->Button == System::Windows::Forms::MouseButtons::Left) {
         // etc...
     }

Подобные проблемы, вероятно, являются одной из причин того, что C ++ / CLI никогда не становился очень популярным. Опять же, C # скорее классовый акт. Рекомендуется.

0 голосов
/ 04 марта 2011

Вам нужно подключить событие к нужному элементу управления:

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...