Я создал приложение Windows Forms, но я получаю странное поведение от свойства Capture элемента управления.Control.Capture всегда верен?
На чистом виде, с одним лейблом под названием «label1» и код
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);
}
я наблюдал, что первый WriteLine всегда говорит: «Правда», второй всегда говорит: «Ложь», когда нажата кнопка. Даже при нажатии несколько раз.
Метка никогда не реагирует на клики за пределами ее границы, даже если я использую вместо этого label1.Capture = true
.
Неужели я не понимаю ожидаемое поведение свойства «Захват»? Я ожидал, что начальное значение будет ложным, а ярлык не будет реагировать на клики на улице, после первого щелчка я ожидаю, что значение будет истинным, а ярлык реагирует на все щелчки мыши, даже за пределами его границ.
Использование одного и того же обработчика событий для двух элементов управления может ввести в заблуждение. Когда вы нажмете «Ярлык», вы получите правду. И обязательно, False, когда вы нажимаете PictureBox. Winforms использует свойство Capture для надежного создания события Click и включает его перед запуском события MouseDown. Необходимо, чтобы событие Click * не * было поднято, когда вы отпустите мышь, перетащив ее за пределы границы элемента управления. Использование свойства Capture самостоятельно (как в случае «реакции на клики снаружи») вряд ли будет работать. –