tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDLL関数コール中に
記事No9413
投稿日: 2009/09/18(Fri) 11:00
投稿者VB
VB2008
WinXP

『F1』キーをKeyDown関数で拾い、Button1_Clickをクリックしたと同じようにしているのですが。
(例)KeyDown関数内
            If KeyCode = System.Windows.Forms.Keys.F1 Then
                If Button1.Enabled = True Then
                    Button1_Click(Button1, New System.EventArgs())
                End If
            End If
DLLの関数をコール中(待ち状態)で『F1』を押すと。
関数コールが完了したあとに、KeyDownをされたと(OSの仕様?)認識してしまい。
あるときには、KeyDownイベントを溜め込んだ状態になってしまいます。
このような状態を防ぐためにはどのようにすればよいのでしょうか?
アドバイスよろしくお願い致します。

[ツリー表示へ]
タイトルRe: DLL関数コール中に
記事No9414
投稿日: 2009/09/18(Fri) 11:25
投稿者魔界の仮面弁士
> Button1_Click(Button1, New System.EventArgs())
これはマズイです。

自フォーム以外で、そのボタンのイベントを拾っていたりすると、
そちらのメソッドが呼び出されなくなってしまいます。

ボタンを押したことにしたいのであれば、
 Button1.PerformClick()
を使いましょう。

> KeyDownイベントを溜め込んだ状態になってしまいます。
マウスやキーボードからの入力は、そういう動作になるように設計されています。

> このような状態を防ぐためにはどのようにすればよいのでしょうか?
Button1.Enabled を True に戻す直前に、
Application.DoEvents を入れておくとか。

[ツリー表示へ]
タイトル解決☆
記事No9415
投稿日: 2009/09/18(Fri) 11:48
投稿者VB
> > Button1_Click(Button1, New System.EventArgs())
> これはマズイです。
> 自フォーム以外で、そのボタンのイベントを拾っていたりすると、
> そちらのメソッドが呼び出されなくなってしまいます。
> ボタンを押したことにしたいのであれば、
>  Button1.PerformClick()
> を使いましょう。
そんな現象が出てしまうことがあるんですね!
とても勉強になりました。

> > KeyDownイベントを溜め込んだ状態になってしまいます。
> マウスやキーボードからの入力は、そういう動作になるように設計されています。
> > このような状態を防ぐためにはどのようにすればよいのでしょうか?
> Button1.Enabled を True に戻す直前に、
> Application.DoEvents を入れておくとか。
試してみたところ、イベントを溜め込むようなことをしなくなりました。
本当に助かりました。魔界の仮面弁士さんありがとうございます。

[ツリー表示へ]