Umgebung: .NET Framework 2.0, VS 2008.
Ich versuche, eine Unterklasse von bestimmten .NET-Steuerelementen (Label, Panel) zu erstellen, die bestimmte Mausereignisse durchlässt ( MouseDown
, MouseMove
, MouseUp
) an sein übergeordnetes Steuerelement (oder alternativ an das übergeordnete Formular). Ich kann dies tun, indem ich Handler für diese Ereignisse in Instanzen der Standardsteuerelemente erstelle, z. B.:
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);
}
}
Ich kann den Event-Handler nicht in eine Unterklasse des Steuerelements verschieben, da die Methoden, die die Ereignisse im übergeordneten Steuerelement auslösen, geschützt sind und ich keinen Qualifier für das übergeordnete Steuerelement habe:
Zugriff auf geschütztes Mitglied nicht möglich
System.Windows.Forms.Control.OnMouseDown(System.Windows.Forms.MouseEventArgs)
über einen Qualifier des TypsSystem.Windows.Forms.Control
; der Qualifier muss vom TypTheProject.NoCaptureLabel
(oder von ihr abgeleitet).
Ich überprüfe die Überschreibung der WndProc
Methode des Steuerelements in meiner Unterklasse, aber hoffentlich kann mir jemand eine sauberere Lösung geben.