Среда:.NET Framework 2.0, VS 2008.
Я пытаюсь создать подкласс определенных элементов управления .NET(label, panel), которые пройдут через определенные события мыши (MouseDown
, MouseMove
, MouseUp
) в свой родительский элемент управления (или, альтернативно, вверху -уровневая форма). Я могу сделать это, создав обработчики для этих событий в экземплярах стандартных элементов управления, например:
public class TheForm : Form
{
private Label theLabel;
private void InitializeComponent()
{
theLabel = new Label();
theLabel.MouseDown += new MouseEventHandler(theLabel_MouseDown);
}
private void theLabel_MouseDown(object sender, MouseEventArgs e)
{
int xTrans = e.X + this.Location.X;
int yTrans = e.Y + this.Location.Y;
MouseEventArgs eTrans = new MouseEventArgs(e.Button, e.Clicks, xTrans, yTrans, e.Delta);
this.OnMouseDown(eTrans);
}
}
Я не могу переместить обработчик событий в подкласс элемента управления, потому что методы, которые поднимают события в родительском элементе управления, защищены и у меня нет определителя для родительского элемента управления:
Невозможно получить доступ к защищенному элементу
System.Windows.Forms.Control.OnMouseDown(System.Windows.Forms.MouseEventArgs)
через квалификатор типаSystem.Windows.Forms.Control
; квалификатор должен иметь типTheProject.NoCaptureLabel
(или полученный из него).
Я рассматриваю переопределение метода WndProc
элемента управления в моем подклассе, но, надеюсь, кто-то может дать мне более чистое решение.