C ++ / CLI - конвертировать систему :: объект в ContextMenuStrip - PullRequest
0 голосов
/ 16 мая 2018

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

Я хочу преобразовать System :: Object в ContextMenuStrip.

Пример кода:

System::Void Form1::unzoomToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{

    System::Windows::Forms::ContextMenuStrip ^menu = sender;
    //a value of type "System::Object ^" cannot be used to initialize and entity of type "System::Windows::Forms::ContextMenuStrip ^"

    //Other code here
}

Как это делается в C ++ / CLI?

1 Ответ

0 голосов
/ 26 апреля 2019

По ссылке, размещенной Хансом Пассантом:

Понижение - приведение из базового класса к классу, производному от базового класса. Понижение является безопасным, только если объект, к которому обращаются во время выполнения, фактически обращается к производному объекту класса. В отличие от static_cast, safe_cast выполняет динамическую проверку и выдает InvalidCastException, если преобразование завершается неудачей.

Итак, вы должны использовать:

Windows::Forms::ContextMenuStrip ^menu = safe_cast<Windows::Forms::ContextMenuStrip^>(sender);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...