Среда: .NET Framework 2.0, VS 2008.
Я пытаюсь создать подкласс определенных элементов управления .NET (метка, панель), которые будут проходить через определенные события мыши (MouseDown
, MouseMove
, MouseUp
) к его родительскому элементу управления (или в качестве альтернативы верхнему форма) Я могу сделать это, создав обработчики для этих событий в экземплярах стандартных элементов управления, например ::1006
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
метод управления в моем подклассе, но, надеюсь, кто-нибудь может дать мне более чистое решение.