- PR -

Application.DoEventsについて

投稿者投稿内容
jai
会議室デビュー日: 2007/01/24
投稿数: 16
投稿日時: 2007-03-06 09:40
下記のソースで
画面上のフォームをロックしたり解除したりしているのですが
Application.DoEventsでロック中に操作されたイベントを全て
解除しようとしているのですが、出来ません。
なぜでしょうか?

Public Function comHourglass(ByRef bMouseFlg As Boolean) As Short
'画面上のフォームを取得
Static currentForm As Form

If bMouseFlg Then
If currentForm Is Nothing Then
currentForm = Form.ActiveForm
End If
If Not currentForm Is Nothing Then
If currentForm.Enabled = True Then
currentForm.Enabled = False
Application.DoEvents()
currentForm.BringToFront()
End If
End If
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
Else
If Not currentForm Is Nothing Then
If currentForm.Enabled = False Then
currentForm.BringToFront()
Application.DoEvents()
currentForm.Enabled = True
currentForm = Nothing
End If
End If
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
End If
comHourglass = True
End Function
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-06 10:01
引用:

jaiさんの書き込み (2007-03-06 09:40) より:

下記のソースで画面上のフォームをロックしたり解除したりしているのですがApplication.DoEventsでロック中に操作されたイベントを全て解除しようとしているのですが、出来ません。


提示されたソースと System.Windows.Forms.Application.DoEvents メソッドの関連がわからないです。
呼び出し元を書いた方が良いのではないでしょうか。

引用:

comHourglass = True


関係ないですが、戻り値の型が違いますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
jai
会議室デビュー日: 2007/01/24
投稿数: 16
投稿日時: 2007-03-06 10:43
ボタンクリックイベントで
一番最初に comHourglass(True)で画面をロックし
一番最後に comHourglass(False)で画面を解除しています。

Application.DoEventsが、ない場合
ロック中にキーボードの操作を行うと
画面が解除された時にキーボードの操作した内容が動きます。

ただロック中にApplication.DoEventsの文をいれると
ロックが解除される前にキーを押したイベントが走り
画面がロック中の為、無効になると思っています。
それがうまくいきません。


説明不足ですいません。
すけけん
会議室デビュー日: 2007/02/26
投稿数: 7
投稿日時: 2007-03-06 12:40
引用:

jaiさんの書き込み (2007-03-06 10:43) より:
ボタンクリックイベントで
一番最初に comHourglass(True)で画面をロックし
一番最後に comHourglass(False)で画面を解除しています。



コード:

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

comHourglass(True)

'*** 処理 ***

comHourglass(False)

End Sub


という感じのコードでしょうか。


[ メッセージ編集済み 編集者: すけけん 編集日時 2007-03-06 12:42 ]
jai
会議室デビュー日: 2007/01/24
投稿数: 16
投稿日時: 2007-03-06 13:38
引用:

すけけんさんの書き込み (2007-03-06 12:40) より:

コード:
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click

  comHourglass(True)

  '*** 処理 ***

  comHourglass(False)

End Sub


という感じのコードでしょうか。




そうです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-06 14:32
引用:

jaiさんの書き込み (2007-03-06 10:43) より:

Application.DoEventsが、ない場合
ロック中にキーボードの操作を行うと
画面が解除された時にキーボードの操作した内容が動きます。

ただロック中にApplication.DoEventsの文をいれると
ロックが解除される前にキーを押したイベントが走り
画面がロック中の為、無効になると思っています。
それがうまくいきません。


ここの '起きてしまう内容' が、未だにわからないです。
手順はわかったのですが、実際何がうまくいかないのでしょう。
無効になっていると思いますが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
jai
会議室デビュー日: 2007/01/24
投稿数: 16
投稿日時: 2007-03-06 16:08
ロック中にApplication.DoEvents文を入れてるにも関わらず、
ロック中にキー入力した情報が
ロック解除後にキー入力したイベントが走ります。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-03-06 16:21
引用:

jaiさんの書き込み (2007-03-06 16:08) より:
ロック中にApplication.DoEvents文を入れてるにも関わらず、
ロック中にキー入力した情報が
ロック解除後にキー入力したイベントが走ります。


ロック中に走らせている処理にApplication.DoEvents文を入れてるにも関わらず、・・でしょうか?comHourglass()の中に(何故か)Application.DoEventsがあるのはわかりましたが、問題は処理中ではないのですか?

[ メッセージ編集済み 編集者: shimix 編集日時 2007-03-06 16:22 ]

スキルアップ/キャリアアップ(JOB@IT)