C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: MaskedTextBoxの誤動作について


(過去ログ 35 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■17379 / inTopicNo.1)  MaskedTextBoxの誤動作について
  
□投稿者/ みそおでん (1回)-(2008/04/23(Wed) 11:35:33)

分類:[VB.NET/VB2005] 

はじめまして、こんにちは。
いつも拝見させていただいております。

今回は、MaskedTextBoxでの誤動作を確認しましたので、確認および回避策を頂きたく、投稿させていただきました。

開発環境
OS:WindowsXP Pro SP2
言語:VisualBasic2005 Pro SP1
アプリ:WindowsApplication

誤動作発生状況
1.MaskedTextBoxコントロールのKeyDownイベントで、Enterキーを拾い、モーダルなダイアログを表示します。
2.表示したダイアログを閉じ、続けて数値をいくつか入力しますと、誤動作が発生します。(予期せぬ位置にスペースが入る、入力が無効になるなど)

再現プログラム
1.フォームを作成します。(フォーム名:Form1)
2.Form1にMaskedTextBoxコントロールを作成します。(コントロール名:mskDate、Maskプロパティ:0000/00/00)
-------以下 Form1ソース ----------------
Public Class Form1

Private Sub mskDate_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles mskDate.KeyDown
If (e.KeyCode = Keys.Enter) Then
MsgBox("")
End If
End Sub

End Class
----------------------------------------

再現動作
1.mskDateにEnterキーを入力します。
2.メッセージボックスを閉じ、続けて数字キーを数回入力しますと、誤動作が発生します。

回避策
Enterキー処理を、KeyDownではなくKeyPressイベントで処理することにより、回避できます。
ただ、Shiftキー等の押下状態を簡潔に取得できるため、KeyDownイベントで処理ができればと考えております。

その他
マスクを設定しない場合、誤動作は発生しません。
Enterキー以外でダイアログを表示した場合、誤動作は発生しません。

以上ですが、回避策などありましたら、ご教授おねがいいたします。


引用返信 編集キー/
■17382 / inTopicNo.2)  Re[1]: MaskedTextBoxの誤動作について
□投稿者/ επιστημη (942回)-(2008/04/23(Wed) 11:43:59)
επιστημη さんの Web サイト
> 今回は、MaskedTextBoxでの誤動作を確認しましたので、確認および回避策を頂きたく、投稿させていただきました。

不具合だって自信があるなら
MSDNフォーラム: http://forums.microsoft.com/msdn-ja/default.aspx
VisualStudioフィードバック: https://connect.microsoft.com/VisualStudioJapan
に報告すればいいじゃん。

引用返信 編集キー/
■17384 / inTopicNo.3)  Re[2]: MaskedTextBoxの誤動作について
□投稿者/ みそおでん (3回)-(2008/04/23(Wed) 12:00:11)
επιστημηさん、返信ありがとうございます。

>>今回は、MaskedTextBoxでの誤動作を確認しましたので、確認および回避策を頂きたく、投稿させていただきました。
>
> 不具合だって自信があるなら
> MSDNフォーラム: http://forums.microsoft.com/msdn-ja/default.aspx
> VisualStudioフィードバック: https://connect.microsoft.com/VisualStudioJapan
> に報告すればいいじゃん。

ごめんなさい。
勝手な先入観ですが、報告するよりもこちらに質問をした方が、解決の可能性があるかと思い投稿させていただきました。
他の方にも同じ現象が起こっているのか確認したかったというのも理由の一つですが…

ただ、επιστημηさんの仰る通り、様子を見て報告も考えております。
引用返信 編集キー/
■17397 / inTopicNo.4)  Re[3]: MaskedTextBoxの誤動作について
□投稿者/ らすかる (1回)-(2008/04/23(Wed) 13:47:26)
No17384 (みそおでん さん) に返信
> επιστημηさん、返信ありがとうございます。
>
> >>今回は、MaskedTextBoxでの誤動作を確認しましたので、確認および回避策を頂きたく、投稿させていただきました。
>>
>>不具合だって自信があるなら
>>MSDNフォーラム: http://forums.microsoft.com/msdn-ja/default.aspx
>>VisualStudioフィードバック: https://connect.microsoft.com/VisualStudioJapan
>>に報告すればいいじゃん。
>
> ごめんなさい。
> 勝手な先入観ですが、報告するよりもこちらに質問をした方が、解決の可能性があるかと思い投稿させていただきました。
> 他の方にも同じ現象が起こっているのか確認したかったというのも理由の一つですが…
>
> ただ、επιστημηさんの仰る通り、様子を見て報告も考えております。
↓これじゃない?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34680&forum=7&2
>e.Handled = True
追加で・・・

引用返信 編集キー/
■17398 / inTopicNo.5)  Re[3]: MaskedTextBoxの誤動作について
□投稿者/ れい (505回)-(2008/04/23(Wed) 13:53:15)
No17384 (みそおでん さん) に返信
> >>今回は、MaskedTextBoxでの誤動作を確認しましたので、確認および回避策を頂きたく、投稿させていただきました。
>>
>>不具合だって自信があるなら
>>MSDNフォーラム: http://forums.microsoft.com/msdn-ja/default.aspx
>>VisualStudioフィードバック: https://connect.microsoft.com/VisualStudioJapan
>>に報告すればいいじゃん。
>
> ごめんなさい。
> 勝手な先入観ですが、報告するよりもこちらに質問をした方が、解決の可能性があるかと思い投稿させていただきました。
> 他の方にも同じ現象が起こっているのか確認したかったというのも理由の一つですが…

バグではありませんね。
変な使われ方が多いので、言葉で括ると問題になりますが、
本来の意味での「仕様」です。

KeyDownやMouseDown、KeyUpなどのイベント中に
モーダルダイアログを表示させたり、DoEventsなどを呼んだ場合、
さまざまな不具合が生じます。

メッセージ処理中にメッセージループをまわすことで生じるこの不具合は、
仕組み上どうにも避けがたい、仕様です。
MaskedTextBox以外でも、さまざまなコントロールで
いろいろな問題が起きます。

どんなイベント中なら安全にモーダルダイアログを表示できるかは、
公式なドキュメントが無いのでわかりません。
(VB5?の時にはあったと思うのですが、今は見つからない。)

Button.Click、Timer.Tickなど、いくつかの決まりきったイベントでは
私の経験上は大丈夫ですが、本当のところは知りません。
ソースを確認する気にもなりません。

回避策は、特定のイベント処理中以外はモーダルダイアログを表示したり、DoEventsを使用しないことです。



引用返信 編集キー/
■17399 / inTopicNo.6)  Re[4]: MaskedTextBoxの誤動作について
□投稿者/ みそおでん (4回)-(2008/04/23(Wed) 14:01:42)
No17397 (らすかる さん) に返信
> ■No17384 (みそおでん さん) に返信
>>επιστημηさん、返信ありがとうございます。
>>
>>>>今回は、MaskedTextBoxでの誤動作を確認しましたので、確認および回避策を頂きたく、投稿させていただきました。
> >>
> >>不具合だって自信があるなら
> >>MSDNフォーラム: http://forums.microsoft.com/msdn-ja/default.aspx
> >>VisualStudioフィードバック: https://connect.microsoft.com/VisualStudioJapan
> >>に報告すればいいじゃん。
>>
>>ごめんなさい。
>>勝手な先入観ですが、報告するよりもこちらに質問をした方が、解決の可能性があるかと思い投稿させていただきました。
>>他の方にも同じ現象が起こっているのか確認したかったというのも理由の一つですが…
>>
>>ただ、επιστημηさんの仰る通り、様子を見て報告も考えております。
> ↓これじゃない?
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34680&forum=7&2
> >e.Handled = True
> 追加で・・・
>

らすかるさん、返信ありがとうございます。

あ、e.Handled = True を質問の際に書き忘れてましたね(汗
ただ、実際最初に症状を確認したソースには e.Handled = True はコーディングしていまして、
試しに上記のソースを
-----------------------------------------
Public Class Form1

Private Sub mskDate_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles mskDate.KeyDown
If (e.KeyCode = Keys.Enter) Then
e.Handled = True '<- e.Handledキャンセル追加
MsgBox("")
End If
End Sub

End Class
-----------------------------------------
としましたが、やはり同じ問題が発生してしまいます。

このような現象が起きるのは、私だけなのでしょうか;;
引用返信 編集キー/
■17400 / inTopicNo.7)  Re[5]: MaskedTextBoxの誤動作について
□投稿者/ επιστημη (943回)-(2008/04/23(Wed) 14:06:12)
επιστημη さんの Web サイト
>...
> としましたが、やはり同じ問題が発生してしまいます。

MsgBox("") をコメントアウトしたらどうなります?
↓が原因かを検証するために。

> KeyDownやMouseDown、KeyUpなどのイベント中に
> モーダルダイアログを表示させたり、DoEventsなどを呼んだ場合、
> さまざまな不具合が生じます。


引用返信 編集キー/
■17401 / inTopicNo.8)  Re[4]: MaskedTextBoxの誤動作について
□投稿者/ みそおでん (5回)-(2008/04/23(Wed) 14:09:41)
No17398 (れい さん) に返信
> ■No17384 (みそおでん さん) に返信
>>>>今回は、MaskedTextBoxでの誤動作を確認しましたので、確認および回避策を頂きたく、投稿させていただきました。
> >>
> >>不具合だって自信があるなら
> >>MSDNフォーラム: http://forums.microsoft.com/msdn-ja/default.aspx
> >>VisualStudioフィードバック: https://connect.microsoft.com/VisualStudioJapan
> >>に報告すればいいじゃん。
>>
>>ごめんなさい。
>>勝手な先入観ですが、報告するよりもこちらに質問をした方が、解決の可能性があるかと思い投稿させていただきました。
>>他の方にも同じ現象が起こっているのか確認したかったというのも理由の一つですが…
>
> バグではありませんね。
> 変な使われ方が多いので、言葉で括ると問題になりますが、
> 本来の意味での「仕様」です。
>
> KeyDownやMouseDown、KeyUpなどのイベント中に
> モーダルダイアログを表示させたり、DoEventsなどを呼んだ場合、
> さまざまな不具合が生じます。
>
> メッセージ処理中にメッセージループをまわすことで生じるこの不具合は、
> 仕組み上どうにも避けがたい、仕様です。
> MaskedTextBox以外でも、さまざまなコントロールで
> いろいろな問題が起きます。
>
> どんなイベント中なら安全にモーダルダイアログを表示できるかは、
> 公式なドキュメントが無いのでわかりません。
> (VB5?の時にはあったと思うのですが、今は見つからない。)
>
> Button.Click、Timer.Tickなど、いくつかの決まりきったイベントでは
> 私の経験上は大丈夫ですが、本当のところは知りません。
> ソースを確認する気にもなりません。
>
> 回避策は、特定のイベント処理中以外はモーダルダイアログを表示したり、DoEventsを使用しないことです。
>
>
>

れいさん、返信ありがとうございます。


> メッセージ処理中にメッセージループをまわすことで生じるこの不具合は、
> 仕組み上どうにも避けがたい、仕様です。

なるほど、そのような仕組になっているのですね。
こういった仕組みをよく理解せずにプログラムを作成していたことに、恥ずかしさと不安を感じます(汗

ともあれ、おかげ様でスッキリしましたし、とても勉強になりました。
返信いただいた皆様、本当にありがとうございました。


解決済み
引用返信 編集キー/
■17403 / inTopicNo.9)  Re[6]: MaskedTextBoxの誤動作について
□投稿者/ みそおでん (6回)-(2008/04/23(Wed) 14:18:07)
2008/04/23(Wed) 14:52:01 編集(投稿者)
2008/04/23(Wed) 14:51:54 編集(投稿者)

No17400 (επιστημη さん) に返信
> >...
>>としましたが、やはり同じ問題が発生してしまいます。
>
> MsgBox("") をコメントアウトしたらどうなります?
> ↓が原因かを検証するために。
>
>>KeyDownやMouseDown、KeyUpなどのイベント中に
>>モーダルダイアログを表示させたり、DoEventsなどを呼んだ場合、
>>さまざまな不具合が生じます。
>
>


よく確認もせず、解決済みとしてしまい申し訳ございません。
引き続きεπιστημηさん、返信ありがとうございます。

MsgBox("")をコメントアウトすると、問題の現象は発生しません。

>>モーダルダイアログを表示させたり、DoEventsなどを呼んだ場合、
>>さまざまな不具合が生じます。
ここは時間がある時に勉強したいと思います。

ちなみに上記にもしてありますが、問題が発生するのはEnterキーを拾った時だけで
たとえば
-----------------------------------------
Public Class Form1

Private Sub mskDate_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles mskDate.KeyDown
If (e.KeyCode = Keys.Home) Then '<- EnterからHomeキーへ変更
e.Handled = True '<- e.Handledキャンセル追加
MsgBox("")
End If
End Sub

End Class
-----------------------------------------
のように、Enterキー以外(詳しくは未確認)を拾うと、問題は発生せず、通常通り動きます。

とにかく、時間ができたら勉強してみたいと思います。

改めまして、皆様、本当にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -