Ich habe eine Windows Forms-Anwendung erstellt, aber ich bekomme merkwürdiges Verhalten von der Capture-Eigenschaft eines Steuerelements.Control.Capture ist immer wahr?
in einer leeren Form, mit einem einzigen Label namens „label1“ und der Code
public Form1()
{
InitializeComponent();
label1.MouseDown += pictureBox1_MouseDown;
}
void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Debug.WriteLine(label1.Capture);
label1.Capture = !label1.Capture;
Debug.WriteLine(label1.Capture);
}
ich beobachtet, dass die erste Console.WriteLine „True“ immer sagt, sagt der zweite immer „False“, wenn die Schaltfläche wird angeklickt. Auch wenn mehrfach geklickt wird.
Das Etikett reagiert nie auf Klicks außerhalb seines Rahmens, auch wenn ich stattdessen label1.Capture = true
verwende.
Missverstehe ich das erwartete Verhalten der "Capture" -Eigenschaft? Ich habe erwartet, dass der Anfangswert falsch ist und das Label nicht auf Klicks außerhalb reagiert, nach dem ersten Klick erwarte ich, dass der Wert wahr ist, und das Label reagiert auf alle Mausklicks, auch außerhalb seiner Grenzen.
Die Verwendung desselben Ereignishandlers für zwei Steuerelemente kann zu Verwirrung führen. Sie erhalten True, wenn Sie auf das Label klicken. Und sicher, False, wenn Sie auf die PictureBox klicken. Winforms verwendet die Capture-Eigenschaft, um das Click-Ereignis zuverlässig zu generieren und es vor dem Auslösen des MouseDown-Ereignisses einzuschalten. Dies ist erforderlich, damit das Click-Ereignis * nicht * ausgelöst wird, wenn Sie die Maustaste loslassen, nachdem Sie es außerhalb der Grenzen des Steuerelements gezogen haben. Die Verwendung der Capture-Eigenschaft selbst (wie in "Reagieren auf Klicks außerhalb") funktioniert wahrscheinlich nicht. –