#c# #.net #winforms
#c# #.net #winforms
Вопрос:
Я пытаюсь создать форму, в которой пользователь выбирает один из 2 переключателей, «быстрый» и «медленный», затем нажимает кнопку «перейти» в форме. Это должно работать следующим образом:
-
Когда выбран параметр «быстро» и нажата кнопка «перейти», пользователю необходимо продолжать удерживать нажатой кнопку, чтобы заставить игрока двигаться, и игрок останавливается, когда пользователь отпускает палец с кнопки. Для этого я использую
MouseDown
MouseUp
события и . -
Если выбрано значение «медленно», пользователь может перемещаться только на один шаг за раз, независимо от того, как долго кнопка удерживается нажатой. для этого я использую
Click
событие.
Чтобы проверить эту концепцию, я вставил a MessageBox
в Click
MouseDown
события и, чтобы посмотреть, как они работают вместе. Однако, когда я нажимаю на кнопку, я вижу только Mousedown
запуск события, независимо от того, какой переключатель выбран Click
, и событие запускается только тогда, когда кнопка go находится в фокусе, и я нажимаю enter.
Как я могу сделать так, чтобы оба события вызывались одновременно (и тогда я могу ввести соответствующий if
оператор, чтобы различать «быстрые» и «медленные» переключатели)? (Кнопка подключается к этим событиям двойным щелчком по их соответствующему обработчику в окне разработки, а не жестко запрограммирована).
private void go_button_MouseDown(object sender, MouseEventArgs e)
{
Console.WriteLine("Mousedown"); // Doesn't show in console window in Release mode, still trying to solve this
MessageBox.Show("Mosuedown");
}
private void go_button_Click(object sender, EventArgs e)
{
Console.Out.WriteLine("go_buttonclick"); // Doesn't show in console window in Release mode, still trying to solve this
Console.WriteLine("go_buttonclick"); // Doesn't show in console window in Release mode, still trying to solve this
MessageBox.Show("go_buttonclick");
}
Комментарии:
1. Я не уверен, что понимаю ваше описание поведения для
Click
события. Обратите внимание, чтоClick
событие будет запущено после того, как пользователь отпустит кнопку мыши (это то, что вы хотите?) Или если кнопка нажата любым другим способом (например, с помощью клавиатуры).2. Вероятно, вам все равно не нужно
Click
событие. Просто используйте что-то вродеif (fast.Checked) { StartMoving(); }
underMouseDown
иif (fast.Checked) { StopMoving(); }
underMouseUp
, и тогда у вас может бытьelse
блок либо подMouseDown
, либоMouseUp
(вы решаете), куда вы звонитеMoveOneStep();
.3. В WinForms нет окна «Консоль». Используйте
System.Diagnostics.Debug.WriteLine(...);
и смотрите в окне вывода в Visual Studio.4. Спасибо, это имеет смысл, я мог бы сделать это таким образом. Не был уверен, есть ли объяснение, почему при щелчке мыши запускается только одно из событий или это была просто Visual studio quirk.@41686d6564
5. Теперь я это вижу @HansPassant, спасибо. Просто попробовал еще раз, удалив одно из сообщений, и оно отобразило 2 других события!
Ответ №1:
Я обнаружил, что я делаю неправильно, оба события запускаются одновременно, но окно сообщения в событии MouseDown не позволяло мне видеть, что события Click и MouseUp также запускаются. Когда я отключил окно сообщений наведения курсора мыши, появились другие 2 окна сообщений, спасибо!