Как проверить, какая кнопка мыши была нажата во время события MouseClick в c ++ / cli?

Это должно работать так в C #, но что эквивалентно в C ++ / cli?

private void CustomControl_MouseClick(object sender, MouseEventArgs e) 
{        
   if (e.Button == MouseButtons.Right) 
   { 
     ... do something
   } 
} 

MouseButtons.Right, MouseButtons :: Right и MouseButtons-> Right, похоже, не компилируются. Он всегда говорит

error C2039: 'Right' : is not a member of 'System::Enum'

Вот мой код c ++ / cli:

System::Void WindowTest::pictureBoxTest_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
    {
        if (e->Button == MouseButtons::Left)
        {
        // do something
            }
}

person marc40000    schedule 18.11.2011    source источник
comment
Публикация кода C # не имеет значения ... почему бы вам не опубликовать код C ++ / CLI, который у вас есть?   -  person Marlon    schedule 18.11.2011


Ответы (1)


здесь, похоже, не хватает :: перед вашим MouseButtons::Right

  void panel1_MouseDown( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ e )
  {
     // Update the mouse path with the mouse information
     Point mouseDownLocation = Point(e->X,e->Y);
     String^ eventString = nullptr;
     switch ( e->Button )
     {
        case ::MouseButtons::Left:
           eventString = "L";
           break;

        case ::MouseButtons::Right:
           eventString = "R";
           break;

        case ::MouseButtons::Middle:
           eventString = "M";
           break;

        case ::MouseButtons::XButton1:
           eventString = "X1";
           break;

        case ::MouseButtons::XButton2:
           eventString = "X2";
           break;

        case ::MouseButtons::None:
        default:
           break;
     }
     if ( eventString != nullptr )
     {
        mousePath->AddString( eventString, FontFamily::GenericSerif, (int)FontStyle::Bold, (float)fontSize, mouseDownLocation, StringFormat::GenericDefault );
     }
     else
     {
        mousePath->AddLine( mouseDownLocation, mouseDownLocation );
     }

     panel1->Focus();
     panel1->Invalidate();
  }
person N_A    schedule 18.11.2011
comment
Но почему? MouseButtons объявлен в System.Windows.Forms. Разве не :: впереди означает, что мне нужны кнопки MouseButton в глобальном пространстве имен? - person marc40000; 18.11.2011
comment
Я не могу счесть этот ответ правильным прямо сейчас. Я уже пробовал это. Мне нужно подождать минут 10 или около того ... - person marc40000; 18.11.2011
comment
@ marc40000: Да, это то, что это значит. Во всяком случае, это должно быть System::Windows::Forms:: перед MouseButtons. - person ildjarn; 18.11.2011
comment
Я не уверен, но предполагаю, что это потому, что вы используете это пространство имен - person N_A; 18.11.2011
comment
Отсюда я предполагаю, что :: без пространства имен означает, что он неявно ссылается на пространство имен cli. msdn.microsoft.com/en-us/library/d87eee3k (VS.80) .aspx - person N_A; 18.11.2011
comment
@mydogisbox: :: без предшествующего идентификатора всегда относится к глобальному пространству имен. Пространство имен cli всегда находится в области видимости C ++ / CLI, но все же отличается от глобального пространства имен. В любом случае MouseButtons не входит в пространство имен cli, поэтому я не понимаю, какое у него значение. - person ildjarn; 18.11.2011
comment
@ildjarn в соответствии со страницей, которую я связал, :: необходим, когда существует конфликт имен между глобальным пространством имен и определяемым пользователем символом. Использование вверху включает любое пространство имен в глобальное пространство имен. Что-то должно противоречить пространству имен System::Windows::Forms::, поэтому требуется :: указать, что символ не является локальным. - person N_A; 18.11.2011
comment
@mydogisbox: Согласен, я просто отмечаю, что это не имеет ничего общего с пространством имен cli. ; -] - person ildjarn; 18.11.2011
comment
@ildjarn достаточно честно. Я просто гадал с первым утверждением. - person N_A; 18.11.2011