2015-05-05 2 views
1

Я сам учу себя C# и столкнулся с проблемой. Кажется, я тоже не нашел ответа. У меня есть форма, что, когда я мыши флажок состояние идет к истине, но и сразу же вызывает событие щелчка мыши У меня есть код следующим образом:C# checkbox и событие щелчка мыши

private void uxCheckBoxMouseClick(object sender, MouseEventArgs e) 
{ 
    //MouseEventArgs me = (MouseEventArgs) e; 
    if (uxMouseCopyCheckBox.Checked) 
    { 
     MessageBox.Show("Test"); 
     uxMouseCopyCheckBox.Checked = false; 

    } 
} 

Я искал переполнение стека и Google и нашел подобные элементы, но не в C#, но не удача в фиксированном решении. То, что я хочу сделать, использует первый щелчок, чтобы установить флажок в true без запуска события щелчка мыши. Я хочу отложить событие до второго щелчка мыши, а не первого.

Я попытался следующие:

  • цикл
  • Переходов == 2 с, если заявление
  • подписавшись но в недоумении о том, что использовать

ответ

1

Просто используйте логическое переменная как флаг.

private bool wasAlreadyClickedOnce; 

private void uxCheckBoxMouseClick(object sender, MouseEventArgs e) 
{ 
    if (!wasAlreadyClickedOnce) 
    { 
     wasAlreadyClickedOnce = true; 
     return; 
    } 

    if (uxMouseCopyCheckBox.Checked) 
    { 
     MessageBox.Show("Test"); 
     uxMouseCopyCheckBox.Checked = false; 

    } 
} 
+0

Спасибо это помогло мне, но теперь мне нужно исследований почему щелчок мыши сосредоточен только на области флажка, а не на всей форме. – Solorn

+1

@Solorn Я бы сказал, что это связано с тем, что вы выбрали этот флажок, когда вы связали своего обработчика с событием Click. Если вы хотите, чтобы обработчик был выполнен для клика по всей форме, вам придется подписаться на событие Click формы – Sidewinder94

+0

Да, я обнаружил, что сразу после того, как я опубликовал свой комментарий =/Спасибо всем. – Solorn

0

Попробуйте использовать Click событие вместо CheckedChanged события, чтобы проверить или снимите CheckBox, а затем вы можете использовать MouseClick событие для других вещей.

+1

Кажется, он уже использует событие Click ... нет? – Sidewinder94

+0

@ Sidewinder94 Я думаю, что он использует событие «MouseClick», а не событие «Click» –

+0

Я попытался переместить код на событие Click, и то же самое произойдет. Как только я поставлю флажок, событие клика сразу же срабатывает. – Solorn

1

Вместо Click случае вы можете Подписаться на CheckedChanged событие:

Обработчик будет выглядеть выглядеть точно так, как ваша:

private void uxMouseCopyCheckBox_CheckedChanged(object sender, EventArgs e) 
{ 
    if (!uxMouseCopyCheckBox.Checked) 
    { 
     MessageBox.Show("Test"); 
     uxMouseCopyCheckBox.Checked = false; 
    } 
} 

Единственное отличие состоит в том, что мы хотим, чтобы окно сообщения, которое будет shwon только при втором щелчке, поэтому, когда вы снимите флажок.

Будьте осторожны, если вы измените значение по умолчанию этого поля, оно больше не будет работать.

Если вы хотите действительно надежное решение один Гранта ИМХО лучший, мой только что был здесь, чтобы показать вам, как адаптировать свой код для того, чтобы работать

Смежные вопросы