Вот возник вопрос, а как перехватывать собитие MouseDoubleClick когда есть перехватчики на MouseClick, MouseDown, MouseUp? Выходит так что сначал сработает MouseDown и в MouseDoubleClick уже ничего не прийдет? Как побороть такую ситуацию?
Здравствуйте, skydion, Вы писали:
S>Привет всем.
S>Вот возник вопрос, а как перехватывать собитие MouseDoubleClick когда есть перехватчики на MouseClick, MouseDown, MouseUp? Выходит так что сначал сработает MouseDown и в MouseDoubleClick уже ничего не прийдет? Как побороть такую ситуацию?
S>Спасибо!
Здравствуйте, DarkSid, Вы писали:
DS>Здравствуйте, skydion, Вы писали:
S>>Привет всем.
S>>Вот возник вопрос, а как перехватывать собитие MouseDoubleClick когда есть перехватчики на MouseClick, MouseDown, MouseUp? Выходит так что сначал сработает MouseDown и в MouseDoubleClick уже ничего не прийдет? Как побороть такую ситуацию?
S>>Спасибо!
Public Class Form1
Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
Debug.Print("Click")
End Sub
Private Sub Form1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick
Debug.Print("DoubleClick")
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
Debug.Print("Down")
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
Debug.Print("MouseUp")
End Sub
End Class
при щелчке кнопки выдает:
Down
Click
MouseUp
при двойном щелчке выдает:
Down
Click
MouseUp
Down
DoubleClick
MouseUp
это так вот как попасть прямо в MouseClick или MouseDoubleClick при этом не теряя возможности при необходимость попасть в MouseDown или MouseUp?
S>при двойном щелчке выдает:
S>Down S>Click S>MouseUp S>Down S>DoubleClick S>MouseUp
S>это так вот как попасть прямо в MouseClick или MouseDoubleClick при этом не теряя возможности при необходимость попасть в MouseDown или MouseUp?
S>>при двойном щелчке выдает:
S>>Down S>>Click S>>MouseUp S>>Down S>>DoubleClick S>>MouseUp
S>>это так вот как попасть прямо в или при этом не теряя возможности при необходимость попасть в MouseDown или MouseUp?
DS>Т.е по логике так DS>Click DS>Down DS>Up
DS>или DS>DoubleClick DS>Down DS>Up
DS>? DS>или я что-то не понял
Ну скажем так нужно прямое попадание в ети два события и выход из них.
Ну к примеру есть на екране элемент и он по MouseClick подсвечивается, а по MouseDoubleClick к примеру выводится проперти диалог для этого элемента. Элемент может быть каким угодно, контрол, линия на екране...
Возможно есть другие методы для выхода из такой ситуации?
S>Ну скажем так нужно прямое попадание в ети два события и выход из них. S>Ну к примеру есть на екране элемент и он по MouseClick подсвечивается, а по MouseDoubleClick к примеру выводится проперти диалог для этого элемента. Элемент может быть каким угодно, контрол, линия на екране...
S>Возможно есть другие методы для выхода из такой ситуации?
Здравствуйте, skydion, Вы писали:
S>Привет всем.
S>Вот возник вопрос, а как перехватывать собитие MouseDoubleClick когда есть перехватчики на MouseClick, MouseDown, MouseUp? Выходит так что сначал сработает MouseDown и в MouseDoubleClick уже ничего не прийдет? Как побороть такую ситуацию?
S>Спасибо!
If you want to handle mouse click events in the proper order, you need to know the order in which click events are raised in Windows Forms controls. All Windows Forms controls raise click events in the same order when a mouse button is pressed and released (regardless of which mouse button), except where noted in the following list for individual controls. The following list shows the order of events raised for a single mouse-button click:
MouseDown event.
Click event.
MouseClick event.
MouseUp event.
Following is the order of events raised for a double mouse-button click:
MouseDown event.
Click event.
MouseClick event.
MouseUp event.
MouseDown event.
DoubleClick event. (This can vary, depending on whether the control in question has the StandardDoubleClick style bit set to true. For more information about how to set a ControlStyles bit, see the SetStyle method.)
MouseDoubleClick event.
MouseUp event.
Как вариант можно вручную после каждого клика отмечать время нажания (DateTime.Now.Ticks) и при следующем клике отлавливать ситуацию, когда от предыдущего прошло меньше чем SystemInformation.DoubleClickTime, только тогда нужно ещё отслеживать, чтобы курсор сдвинулся не более, чем на SystemInformation.DoubleClickSize. Но это нужно только в очень специфических ситуациях.
Нужно носить в себе еще хаос, чтобы быть в состоянии родить танцующую звезду.
Здравствуйте, DarkSid, Вы писали:
DS>Здравствуйте, skydion, Вы писали:
S>>Ну скажем так нужно прямое попадание в ети два события и выход из них. S>>Ну к примеру есть на екране элемент и он по MouseClick подсвечивается, а по MouseDoubleClick к примеру выводится проперти диалог для этого элемента. Элемент может быть каким угодно, контрол, линия на екране...
S>>Возможно есть другие методы для выхода из такой ситуации?
DS>private void textBox3_MouseDown(object sender, MouseEventArgs e) DS> { DS> if (e.Clicks == 5) DS> { DS> textBox2.Text += "Down" + Environment.NewLine; DS> } DS> if (e.Clicks == 7) DS> { DS> textBox2.Text += "Down2" + Environment.NewLine; DS> } DS> }
DS> private void textBox3_MouseUp(object sender, MouseEventArgs e) DS> { DS> if (e.Clicks >= 3) DS> { DS> textBox2.Text += "Up" + Environment.NewLine; DS> } DS> }
DS> private void textBox3_MouseClick(object sender, MouseEventArgs e) DS> { DS> textBox2.Text += "Click" + Environment.NewLine; DS> MouseEventArgs e1 = new MouseEventArgs(e.Button, 5, e.X, e.Y, e.Delta); DS> textBox3_MouseDown(sender,e1); DS> textBox3_MouseUp(sender,e1); DS> }
DS> private void textBox3_MouseDoubleClick(object sender, MouseEventArgs e) DS> { DS> textBox2.Text += "DoubleClick" + Environment.NewLine; DS> MouseEventArgs e1 = new MouseEventArgs(e.Button, 7, e.X, e.Y, e.Delta); DS> textBox3_MouseDown(sender,e1); DS> textBox3_MouseUp(sender,e1); DS> }
DS>?
Здравствуйте, konsoletyper, Вы писали:
K>Здравствуйте, skydion, Вы писали:
S>>Привет всем.
S>>Вот возник вопрос, а как перехватывать собитие MouseDoubleClick когда есть перехватчики на MouseClick, MouseDown, MouseUp? Выходит так что сначал сработает MouseDown и в MouseDoubleClick уже ничего не прийдет? Как побороть такую ситуацию?
S>>Спасибо!
K>
K>If you want to handle mouse click events in the proper order, you need to know the order in which click events are raised in Windows Forms controls. All Windows Forms controls raise click events in the same order when a mouse button is pressed and released (regardless of which mouse button), except where noted in the following list for individual controls. The following list shows the order of events raised for a single mouse-button click:
K>
K>MouseDown event.
K>Click event.
K>MouseClick event.
K>MouseUp event.
K>
K>Following is the order of events raised for a double mouse-button click:
K>K>MouseDown event.
K>Click event.
K>MouseClick event.
K>MouseUp event.
K>MouseDown event.
K>DoubleClick event. (This can vary, depending on whether the control in question has the StandardDoubleClick style bit set to true. For more information about how to set a ControlStyles bit, see the SetStyle method.)
K>MouseDoubleClick event.
K>MouseUp event.
K>
K>Как вариант можно вручную после каждого клика отмечать время нажания (DateTime.Now.Ticks) и при следующем клике отлавливать ситуацию, когда от предыдущего прошло меньше чем SystemInformation.DoubleClickTime, только тогда нужно ещё отслеживать, чтобы курсор сдвинулся не более, чем на SystemInformation.DoubleClickSize. Но это нужно только в очень специфических ситуациях.
А события отлавливать и анализироват дельта-время на срабатывание кнопок это в MouseDown?
А DoubleClick посылать тоже из MouseDown после прохождения условия на приемлемость дельта-время?
Public Class Form1
Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
Debug.Print("Click")
Dim e1 As MouseEventArgs = New MouseEventArgs(e.Button, 5, e.X, e.Y, e.Delta)
'Form1_MouseDown(sender, e1)
'Form1_MouseUp(sender, e1)
End Sub
Private Sub Form1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick
Debug.Print("DoubleClick")
'Dim e1 As MouseEventArgs = New MouseEventArgs(e.Button, 7, e.X, e.Y, e.Delta)
'Form1_MouseDown(sender, e1)
'Form1_MouseUp(sender, e1)
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
If (e.Clicks = 5) Then
Debug.Print("Down")
End If
If (e.Clicks = 7) Then
Debug.Print("Down")
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
If (e.Clicks = 3) Then
Debug.Print("Up")
End If
End Sub
End Class
Если сделать так то при MouseDoubleClick мы всеравно попадаем в MouseClick
Здравствуйте, skydion, Вы писали:
S>У меня из vb.net невозможно создать переменную e1...
S>MouseEventArgs e1 = new MouseEventArgs(e.Button, 7, e.X, e.Y, e.Delta)
Dim e1 As System.Windows.Forms.MouseEventArgs
e1 = New System.Windows.Forms.MouseEventArgs(e.Button, 10, e.X, e.Y, e.Delta)
TextBox1_MouseDown(sender, e1)
Здравствуйте, DarkSid, Вы писали:
DS>Здравствуйте, skydion, Вы писали:
S>>У меня из vb.net невозможно создать переменную e1...
S>>MouseEventArgs e1 = new MouseEventArgs(e.Button, 7, e.X, e.Y, e.Delta)
DS> Dim e1 As System.Windows.Forms.MouseEventArgs DS> e1 = New System.Windows.Forms.MouseEventArgs(e.Button, 10, e.X, e.Y, e.Delta) DS> TextBox1_MouseDown(sender, e1)
Да-да спасибо, я уже вспомнил, я просто не очень давно знаком с .НЕТ поэтому так вас и мучаю
Ну ниче, еще немного еще чуть-чуть!
Здравствуйте, skydion, Вы писали:
S> Да-да спасибо, я уже вспомнил, я просто не очень давно знаком с .НЕТ поэтому так вас и мучаю S>Ну ниче, еще немного еще чуть-чуть!
Кстати. правильно будет наложить обе идеи мои и konsoletyper.Из моей логику из его константы и логику.
Здравствуйте, skydion, Вы писали:
S>А события отлавливать и анализироват дельта-время на срабатывание кнопок это в MouseDown?
Нет, из MouseUp.
S>А DoubleClick посылать тоже из MouseDown после прохождения условия на приемлемость дельта-время?
Никакого DoubleClick посылать не нужно. Можно прямо в MouseUp обрабатывать. Только такой подход годится ну уж в очень специфических ситуациях, наример, при написании легковесных контролов. А так лучше пользоваться стандартными событиями — с ниминет никаких проблем. Если требуется отделить щелчок от двойного щелчка, то это следствие плохого дизайна.
Нужно носить в себе еще хаос, чтобы быть в состоянии родить танцующую звезду.
Здравствуйте, konsoletyper, Вы писали:
K>Никакого DoubleClick посылать не нужно. Можно прямо в MouseUp обрабатывать. Только такой подход годится ну уж в очень специфических ситуациях, наример, при написании легковесных контролов. А так лучше пользоваться стандартными событиями — с ниминет никаких проблем. Если требуется отделить щелчок от двойного щелчка, то это следствие плохого дизайна.
Возможно я туплю... но все же.
Public Class Form1
Dim c As Integer
Dim t1, t2 As Long
Dim p1, p2 As Point
Dim dx, dy As Long
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Debug.Print("Click")
End Sub
Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick
Debug.Print("DoubleClick")
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Debug.Print("DoubleClickTime " & SystemInformation.DoubleClickTime)
Debug.Print("DoubleClickSize[w,h] " & SystemInformation.DoubleClickSize.Width, SystemInformation.DoubleClickSize.Height)
End Sub
Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
'Debug.Print("Click")
Debug.Print("MouseClick nclicks " & e.Clicks)
t1 = DateTime.Now.Ticks
p1 = New Point(e.X, e.Y)
Debug.Print("MouseClick time " & t1)
Debug.Print("MouseClick pos [x,y] " & p1.X & " " & p1.Y)
End Sub
Private Sub Form1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick
Debug.Print("MouseDoubleClick nclicks " & e.Clicks)
t2 = DateTime.Now.Ticks
Debug.Print("DoubleMouseClick time " & t2)
Debug.Print("delta time " & Int((t2 - t1) / 10000))
p2 = New Point(e.X, e.Y)
Debug.Print("MouseDoubleClick pos [x,y] " & p2.X & " " & p2.Y)
dx = (p2.X - p1.X)
dy = (p2.Y - p1.Y)
Debug.Print("delta pos[dx,dy] " & dx & " " & dy)
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
c = e.Clicks
If (c = 1) Then
Debug.Print("Down before mouseclick")
ElseIf (c = 2) Then
Debug.Print("Down before mousedoubleclick")
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
If (c = 1) Then
Debug.Print("Up after mouseclick")
ElseIf (c = 2) Then
Debug.Print("Up after mousedoubleclick")
End If
Debug.Print("")
End Sub
End Class
Как видно всеравно перед MouseDoubleClick имеем MouseClick, что для меня не есть гуд.
Вот и возникает вопрос как независимо обработать MouseDoubleClick без вызова MouseClick?
Сделать только два события причем независимые? Возможно я странного хочу, но разобраться нужно.
Здравствуйте, skydion, Вы писали:
S>Здравствуйте, konsoletyper, Вы писали:
K>>Никакого DoubleClick посылать не нужно. Можно прямо в MouseUp обрабатывать. Только такой подход годится ну уж в очень специфических ситуациях, наример, при написании легковесных контролов. А так лучше пользоваться стандартными событиями — с ниминет никаких проблем. Если требуется отделить щелчок от двойного щелчка, то это следствие плохого дизайна.
S>Возможно я туплю... но все же.
S>
S>Public Class Form1
S> Dim c As Integer
S> Dim t1, t2 As Long
S> Dim p1, p2 As Point
S> Dim dx, dy As Long
S> Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
S> Debug.Print("Click")
S> End Sub
S> Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick
S> Debug.Print("DoubleClick")
S> End Sub
S> Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
S> Debug.Print("DoubleClickTime " & SystemInformation.DoubleClickTime)
S> Debug.Print("DoubleClickSize[w,h] " & SystemInformation.DoubleClickSize.Width, SystemInformation.DoubleClickSize.Height)
S> End Sub
S> Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
S> 'Debug.Print("Click")
S> Debug.Print("MouseClick nclicks " & e.Clicks)
S> t1 = DateTime.Now.Ticks
S> p1 = New Point(e.X, e.Y)
S> Debug.Print("MouseClick time " & t1)
S> Debug.Print("MouseClick pos [x,y] " & p1.X & " " & p1.Y)
S> End Sub
S> Private Sub Form1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick
S> Debug.Print("MouseDoubleClick nclicks " & e.Clicks)
S> t2 = DateTime.Now.Ticks
S> Debug.Print("DoubleMouseClick time " & t2)
S> Debug.Print("delta time " & Int((t2 - t1) / 10000))
S> p2 = New Point(e.X, e.Y)
S> Debug.Print("MouseDoubleClick pos [x,y] " & p2.X & " " & p2.Y)
S> dx = (p2.X - p1.X)
S> dy = (p2.Y - p1.Y)
S> Debug.Print("delta pos[dx,dy] " & dx & " " & dy)
S> End Sub
S> Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
S> c = e.Clicks
S> If (c = 1) Then
S> Debug.Print("Down before mouseclick")
S> ElseIf (c = 2) Then
S> Debug.Print("Down before mousedoubleclick")
S> End If
S> End Sub
S> Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
S> If (c = 1) Then
S> Debug.Print("Up after mouseclick")
S> ElseIf (c = 2) Then
S> Debug.Print("Up after mousedoubleclick")
S> End If
S> Debug.Print("")
S> End Sub
S>End Class
S>
S>Как видно всеравно перед MouseDoubleClick имеем MouseClick, что для меня не есть гуд. S>Вот и возникает вопрос как независимо обработать MouseDoubleClick без вызова MouseClick?
S>Сделать только два события причем независимые? Возможно я странного хочу, но разобраться нужно.
Private _bDoubleClick As Boolean
Private Sub TextBox1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseClick
Dim i1 As Long
Dim i As Long
_bDoubleClick = False
i1 = DateTime.Now.Ticks + 2 * SystemInformation.DoubleClickTime
For i = DateTime.Now.Ticks To i1
If _bDoubleClick Then
Exit Sub
End If
i = DateTime.Now.Ticks
Next
Debug.Print("Click")
End Sub
Private Sub TextBox1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDoubleClick
_bDoubleClick = True
Debug.Print("DoubleClick")
End Sub
Здравствуйте, skydion, Вы писали:
S>Возможно я туплю... но все же.
S>
S>Public Class Form1
S> Dim c As Integer
S> Dim t1, t2 As Long
S> Dim p1, p2 As Point
S> Dim dx, dy As Long
S> Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
S> Debug.Print("Click")
S> End Sub
S> Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick
S> Debug.Print("DoubleClick")
S> End Sub
S> Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
S> Debug.Print("DoubleClickTime " & SystemInformation.DoubleClickTime)
S> Debug.Print("DoubleClickSize[w,h] " & SystemInformation.DoubleClickSize.Width, SystemInformation.DoubleClickSize.Height)
S> End Sub
S> Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
S> 'Debug.Print("Click")
S> Debug.Print("MouseClick nclicks " & e.Clicks)
S> t1 = DateTime.Now.Ticks
S> p1 = New Point(e.X, e.Y)
S> Debug.Print("MouseClick time " & t1)
S> Debug.Print("MouseClick pos [x,y] " & p1.X & " " & p1.Y)
S> End Sub
S> Private Sub Form1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick
S> Debug.Print("MouseDoubleClick nclicks " & e.Clicks)
S> t2 = DateTime.Now.Ticks
S> Debug.Print("DoubleMouseClick time " & t2)
S> Debug.Print("delta time " & Int((t2 - t1) / 10000))
S> p2 = New Point(e.X, e.Y)
S> Debug.Print("MouseDoubleClick pos [x,y] " & p2.X & " " & p2.Y)
S> dx = (p2.X - p1.X)
S> dy = (p2.Y - p1.Y)
S> Debug.Print("delta pos[dx,dy] " & dx & " " & dy)
S> End Sub
S> Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
S> c = e.Clicks
S> If (c = 1) Then
S> Debug.Print("Down before mouseclick")
S> ElseIf (c = 2) Then
S> Debug.Print("Down before mousedoubleclick")
S> End If
S> End Sub
S> Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
S> If (c = 1) Then
S> Debug.Print("Up after mouseclick")
S> ElseIf (c = 2) Then
S> Debug.Print("Up after mousedoubleclick")
S> End If
S> Debug.Print("")
S> End Sub
S>End Class
S>
Здесь ошибка. Нужно переименовать t1 в t, p1 в pt, убрать t1, t2, p2, dx, dy, и сделать так:
Private Sub Form1_MouseUp(ByVal sender As Object, _
ByVal e As MouseEventArgs) Handles Me.MouseClick
Dim elapsed as Long
Dim dx as Integer
Dim dy as Integer' DateTime.Now.Ticks даёт время в 100 наносекундных интервалах
elapsed = (DateTime.Now.Ticks - t) \ 10000
dx = e.X - pt.X
dy = e.Y - pt.Y
If (dx < SystemInforation.DoubleClickSize.Width) And _
(dy < SystemInformation.DoubleClickSize.Height) And _
(elapsed < SystemInformation.DoubleClickTime) Then
Debug.Print("Double Click")
Else
Debug.Print("Click")
End If
End Sub
Тут, правда, есть маленькие тонкости, но я для наглядности не стал их приводить.
Есть экзотические ситуации. Например, если щёлкнуть по надписи ярлыка дважды, то он откроется. Если щёлкнуть один раз, то начинается редактирование. Причём сразу понять, был ли один щёлчок, невозможно. Поэтому редактирование начинается через некоторое время. Чтобы повторить такое поведение, нужно в процедуре обработки щелчка завести таймер на SystemInformation.DoubleClickTime, и запустить его, но ничего не делать больше. В процедуре обработки таймера вызываем метод, обрабатывающий однократный клик, затем останавливаем таймер. В процедуре обработки двойного щелчка останавливаем таймер. Я понимаю, что написано непонятно, но лучше не придумал. Надеюсь, после внимательного вчитывания всё станет ясно.
Для обычной же ситуации, типа пользователь по клику выделяет значок, по двойному запускает, достаточно типовой обработки Click/DoubleClick.
Уже не первый раз пишу, что очень полезно обращаться к MSDN. Там много всего интересного написано.
Нужно носить в себе еще хаос, чтобы быть в состоянии родить танцующую звезду.
Re[6]: Перехват событий мышки
От:
Аноним
Дата:
14.07.06 14:50
Оценка:
Здравствуйте, konsoletyper, Вы писали:
K>Здесь ошибка. Нужно переименовать t1 в t, p1 в pt, убрать t1, t2, p2, dx, dy, и сделать так:
K>
K>Private Sub Form1_MouseUp(ByVal sender As Object, _
K> ByVal e As MouseEventArgs) Handles Me.MouseClick
K> Dim elapsed as Long
K> Dim dx as Integer
K> Dim dy as Integer
K> ' DateTime.Now.Ticks даёт время в 100 наносекундных интервалах
K> elapsed = (DateTime.Now.Ticks - t) \ 10000
K> dx = e.X - pt.X
K> dy = e.Y - pt.Y
K> If (dx < SystemInforation.DoubleClickSize.Width) And _
K> (dy < SystemInformation.DoubleClickSize.Height) And _
K> (elapsed < SystemInformation.DoubleClickTime) Then
K> Debug.Print("Double Click")
K> Else
K> Debug.Print("Click")
K> End If
K>End Sub
K>
Спасибо!
За подробний ответ и Ваше время
А я еще над архитектурой посижу... что-то есть в Вашем замечании.