Как я могу гарантировать, что только один r/l клик будет добавлен в мой список?
Эй :)
Мне нужна некоторая помощь с небольшим количеством кода, я уже некоторое время борюсь с этим и был бы рад, если бы кто-то мог мне помочь. Таким образом, когда пользователь (я сам, поскольку я не распространяю) щелкает правой кнопкой мыши или щелкает левой кнопкой мыши, либо "10000", либо "10001" соответственно добавляются в список. Однако, как вы можете видеть, почему в приведенном ниже коде целые числа, указывающие на правый или левый щелчок (10000/10001), перечислены несколько раз, потому что каждый раз, когда таймер тикает, r/l щелчок записывается, если кнопки нажаты. Даже когда я обычно щелкаю мышью, она будет выводить "10000" 6 раз, например, потому что интервал таймера очень быстрый (10 мс).
Поэтому в основном мне нужно убедиться, что добавляется только одно из этих целых чисел (т. е. отображается только фактическое событие нажатия на кнопки мыши r/l, а не запись, если оно нажимается каждые 10 мс.
Вот код, который у меня есть до сих пор:
<pre> Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer) Public Const MOUSEEVENTF_LEFTDOWN = &H2 Public Const MOUSEEVENTF_LEFTUP = &H4 Public Const MOUSEEVENTF_RIGHTDOWN = &H8 Public Const MOUSEEVENTF_RIGHTUP = &H10 Dim Mouse_LeftClick As Boolean Dim Mouse_RightClick As Boolean Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick Mouse_LeftClick = GetAsyncKeyState(Keys.LButton) If Mouse_LeftClick Then Mouse.Items.Add("10000") Else End If Mouse_RightClick = GetAsyncKeyState(Keys.RButton) If Mouse_RightClick Then Mouse.Items.Add("10001") Else End If End Sub
Вот примерно и подводит итог, надеюсь, вы понимаете мою проблему и заранее большое спасибо! :) Кроме того, я пытаюсь лучше освоить этот язык, если вы заметите что-то неправильное в том, как я отформатировал код, Пожалуйста, скажите мне (например, слишком много пробелов, легко ли это понять)!
Спасибо!
Что я уже пробовал:
Я попытался сделать так, чтобы в первых 10 или около того элементах списка мог существовать только 1 клик, но это просто непрактично, особенно учитывая скорость таймера. :|
GKP1992
Почему вы используете таймер?Тиковое событие, а не событие щелчка мыши?
[no name]
Привет :)
Спасибо за ваше предложение! Однако я не знаю, какой элемент моей формы должен иметь событие mouse_click, поскольку моя форма довольно сложна тем, что к ней прикреплено несколько дочерних окон (wordpad, excel). Если я нажму на любое из этих дочерних окон, я не нажму ни на один элемент, и, таким образом, mouse_click не будет работать (я не думаю, что это будет в любом случае). Timer_tick, с другой стороны, делает список кликов по дочерним окнам.
Возможно, вы правы, но я попробовал ваше предложение и не смог заставить его работать, хотя спасибо!