MouseClick判定-反応が早い方法はありませんか? への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るしぇ  (社会人)
投稿日時
2010/2/24 07:05:59
連投すいません。なんかもう、頭が疲れているのでダラダラしゃべってしまって。。。
・・・とはいえ、ダブルクリックイベントからも同じ関数を呼び出すようにすれば
いいだけなんですが、それで「早くなった」とか言い出すような内容じゃないかと
思ったわけです。
・・・とはいえ、ダブルクリックイベントからも同じ関数を呼び出すようにすれば
いいだけなんですが、それで「早くなった」とか言い出すような内容じゃないかと
思ったわけです。
投稿者 るしぇ  (社会人)
投稿日時
2010/2/24 06:55:02
まぁ、あれです。コードの問題ではないでしょう。
マウスを連続してクリックしているのだと思いますが、
そもそも、マウスを連続してクリックすると、
ダブルクリックと認識されて、別の意味を持ちますから、
そもそものOSの仕様と合ってない仕様(実現したいこと)
だという事じゃないかと。
マウスを連続してクリックしているのだと思いますが、
そもそも、マウスを連続してクリックすると、
ダブルクリックと認識されて、別の意味を持ちますから、
そもそものOSの仕様と合ってない仕様(実現したいこと)
だという事じゃないかと。
投稿者 るしぇ  (社会人)
投稿日時
2010/2/24 06:49:15
> Labelの再描画はMy.Application.DoEvents()でやってみましたが
それは何の意味も無いような気がします。ってゆーか余計な処理?
もともと、描画はOS任せですが、ラベルの値が変わって、マウスの
イベントを抜ければ再描画されます。
命令の意味も分からず処理の途中で DoEvents するのはトラブルの元。
>2,3回ほどクリックしていると反応しなくなったりします…。
そういった余計なバグを生むだけでしょうね。
それは何の意味も無いような気がします。ってゆーか余計な処理?
もともと、描画はOS任せですが、ラベルの値が変わって、マウスの
イベントを抜ければ再描画されます。
命令の意味も分からず処理の途中で DoEvents するのはトラブルの元。
>2,3回ほどクリックしていると反応しなくなったりします…。
そういった余計なバグを生むだけでしょうね。
投稿者 ゆう  (学生)
投稿日時
2010/2/24 06:33:04
みなさんいろいろとありがとうございます。
Labelの再描画はMy.Application.DoEvents()でやってみましたが、2,3回ほどクリックしていると反応しなくなったりします…。
PCの性能は[Pen4 1.7GHz 512MB WinXP]です。
もう一度調べてみようかと思います。
Labelの再描画はMy.Application.DoEvents()でやってみましたが、2,3回ほどクリックしていると反応しなくなったりします…。
PCの性能は[Pen4 1.7GHz 512MB WinXP]です。
もう一度調べてみようかと思います。
投稿者 デガンス  (社会人)
投稿日時
2010/2/23 21:18:57
MouseUpイベントに書いてるとか?
投稿者 るしぇ  (社会人)
投稿日時
2010/2/23 19:35:07
マシンスペックが書かれていないけど、.Net が動く標準的なパソコンで書かれているコードの
実行時間を計ればほぼ0秒になると思います。
処理時間の計測には花ちゃんのサイトのサンプルコードを使用しました。
http://hanatyan.sakura.ne.jp/dotnet/day03.htm#no11
実行時間を計ればほぼ0秒になると思います。
処理時間の計測には花ちゃんのサイトのサンプルコードを使用しました。
http://hanatyan.sakura.ne.jp/dotnet/day03.htm#no11
投稿者 ヴァン  (社会人)
投稿日時
2010/2/23 18:53:40
何で反応が早い遅いを判断してます?
Stopwacthとか使って判断してます?
正直言えば、このコードの違いで早い遅いが判断できるなんて凄い能力だと思います。
単純にLabelのリフレッシュのタイミングの問題では?
Stopwacthとか使って判断してます?
正直言えば、このコードの違いで早い遅いが判断できるなんて凄い能力だと思います。
単純にLabelのリフレッシュのタイミングの問題では?
投稿者 ゆう  (学生)
投稿日時
2010/2/23 09:42:06
MouseClickの右クリックと左クリックを使ってラベルの数値を変えたいのですが、(左:増加、右:減少)どうも反応が鈍いです…。
なにかいい方法があったら教えてください。(VB2008Express)
とりあえず、書いてみたコードです。
最後のやつが反応が良い気がしますが、それでも遅いです。
変なところがあったら、指摘・ヒント等いただけると嬉しいです。
よろしくお願いします。
なにかいい方法があったら教えてください。(VB2008Express)
とりあえず、書いてみたコードです。
Public Sub SYUSSEKI(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim Jyu As String = sender.Text '数値を表示しているラベルです。
Dim Kazu As Integer = CInt(Jyu) 'ラベルを数値化してみました。
If Kazu > 0 And Kazu < 31 Then
Select Case e.Button
Case Windows.Forms.MouseButtons.Left
'日数ラベルの左クリック対応(足す)
sender.text = CStr(Kazu + 1)
Case Windows.Forms.MouseButtons.Right
'日数ラベルの右クリック対応(引く)
sender.text = CStr(Kazu - 1)
End Select
ElseIf Kazu = 31 Then
Select Case e.Button
Case Windows.Forms.MouseButtons.Left
'日数ラベルの左クリック対応(足せない)
MsgBox("Error!" & vbNewLine & "これ以上の値を設定できません。")
Case Windows.Forms.MouseButtons.Right
'日数ラベルの右クリック対応(引く)
sender.text = CStr(Kazu - 1)
End Select
ElseIf Kazu = 0 Then
Select Case e.Button
Case Windows.Forms.MouseButtons.Left
'日数ラベルの左クリック対応(足す)
sender.text = CStr(Kazu + 1)
Case Windows.Forms.MouseButtons.Right
'日数ラベルの右クリック対応(引けない)
MsgBox("Error!" & vbNewLine & "これ以下の値を設定できません。")
End Select
Else
MsgBox("Error!" & vbNewLine & "値が異常です。")
End If
End Sub
Public Sub SYUSSEKI2(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim Jyu As String = sender.Text
Select e.Button
Case Windows.Forms.MouseButtons.Left
'日数ラベルの左クリック対応(足す)
If Jyu = "31" Then
MsgBox("Error!" & vbNewLine & "これ以上の値を設定できません。")
Else
Dim S As Integer
For S = 0 To 30
If sender.text = CStr(S) Then
sender.text = CStr(S + 1)
Exit For
End If
Next
End If
Case Windows.Forms.MouseButtons.Right
'日数ラベルの右クリック対応(引く)
If Jyu = "0" Then
MsgBox("Error!" & vbNewLine & "これ以下の値を設定できません。")
Else
Dim S As Integer
For S = 1 To 31
If sender.text = CStr(S) Then
sender.text = CStr(S - 1)
Exit For
End If
Next
End If
End Select
End Sub
Public Sub SYUSSEKI3(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim Jyu As String = sender.Text
Select Case e.Button
Case Windows.Forms.MouseButtons.Left
'日数ラベルの左クリック対応(足す)
If Jyu = "31" Then
MsgBox("Error!" & vbNewLine & "これ以上の値を設定できません。")
ElseIf Jyu = "30" Then
sender.text = "31"
ElseIf Jyu = "29" Then
sender.text = "30"
~~省略~~
ElseIf Jyu = "0" Then
sender.text = "1"
Else
MsgBox("Error!" & vbNewLine & "値が異常です。")
End If
Case Windows.Forms.MouseButtons.Right
'日数ラベルの右クリック対応(引く)
If Jyu = "0" Then
MsgBox("Error!" & vbNewLine & "これ以下の値を設定できません。")
ElseIf Jyu = "31" Then
sender.text = "30"
~~省略~~
ElseIf Jyu = "1" Then
sender.text = "0"
Else
MsgBox("Error!" & vbNewLine & "値が異常です。")
End If
End Select
End Sub
最後のやつが反応が良い気がしますが、それでも遅いです。
変なところがあったら、指摘・ヒント等いただけると嬉しいです。
よろしくお願いします。
ありがとうございました。
ちなみに、ご指摘のダブルクリックイベントでも同じ処理を呼び出したらスムーズにいきました。
ダブルクリックになっていたんですね…すっきりしました。
自分のコードが間違っているのではないかといろいろ試してしまいました…。
勉強したいと思います…。