Проблема проста:
У меня есть несколько объектов в форме, и я хочу поднять событие объекта, у которого есть "перед ним" другой объект. Практически я хочу делегировать событие следующему объекту, идущему за ним.
void EditorNode::onButtonDownClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
// here I need to call the event of another object - a picturebox
drawCanvas->OnMouseDown( *e);
}
Я не уверен, что это правильный способ сделать это. Я также получаю следующую ошибку.
'System::Windows::Forms::Control::OnMouseDown': candidate function(s) not accessible
Как мне продолжить? Каков наилучший способ сделать это?
Объекты компилятора, потому что OnMouseDown() является защищенным методом. Довольно преднамеренный, он мешает вам стрелять в ногу. Вы, конечно, нацелитесь на это оружие, у объекта e
нет правильных значений свойств. Свойства Location
, X
и Y
неверны, они относятся к области клиентского интерфейса.
Вам нужно будет добавить общедоступный метод для любого класса, представляющего объект drawCanvas, чтобы вы могли вызывать OnMouseDown(). И позаботьтесь о предоставлении объекту MouseEventArgs правильных значений, которые обычно требуют, чтобы методы PointToScreen и PointToClient переводили значение координаты. Если это объект PictureBox, вам необходимо извлечь его из этого, чтобы вы могли добавить этот общедоступный метод. Все и все очень сильный намек на то, что вы делаете это неправильно.