- - PR -
DateTimePickerのバグ?
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-01-22 12:57
どなたかご教授ください
OS:WinXp Vb .NET 2003 1)TextBoxのLeaveイベントにエラーメッセージをいれる エラー時はFocusをTextBoxに戻す 2)チェックボックス付きのDateTimePickerをもつユーザーコントロールを 同じフォームに貼り付ける。 (ユーザーコントロール上だけでなく普通のDateTimePickerでも 同じ現象が起こります) 4)TextBoxにLeaveでエラーになる条件をいれ DateTimePickerをマウスでクリックするとエラーメッセージが 2回でてしまいます。 さらにDateTimePickerをクリックできてしまいます。 その後 どのコントロールをクリックしても2回出るようになってしまいます。 他のコントロールをマウスでクリックしても1回エラーメッセージが出力されて TextBoxにフォーカスが戻るのですがDateTimePickerだけこのような現象が おきてしまいます。 これはバグでしょうか?それともやり方がまずいのでしょうか? (ちなみにメッセージは Call MessageBox.Show("エラーメッセージ" _ , "タイトル"_ , MessageBoxButtons.OK_ , MessageBoxIcon.Error_ , MessageBoxDefaultButton.Button1) で表示しています。 どなたかよろしくお願いします。 | ||||
|
投稿日時: 2005-01-22 16:53
代わりにトラックバック。
http://www7.big.or.jp/~pinball/discus/vb/57085.html _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-01-22 19:49
ん〜、わからん。
Leaveでエラーになる条件?Leaveイベント中にエラーになる条件をいれるのですか?「エラーになる条件」とはなんですか?もしくは何がエラーなんですか?それを、どこにいれるのですか? それとも、『LeaveイベントでのチェックでエラーになるようなテキストをTextBox1に入力して』という意味でしょうか? 「わかってんならいちいち聞くな」とおっしゃるかもしれませんが、自分のしたいことを正しく表現できないというのは、システムエンジニアとして恥ずかしいと思いますよ。「自分はいつまでもコーダーだ」とおっしゃるなら、それもかまわないかもしれませんが、人に聞くときに真意を伝えられないのでは、損をすると思うのですが、いかがでしょうか。 こっちに返しておくので、“両方とも”きっちり対応してくださいね。 _________________ | ||||
|
投稿日時: 2005-01-22 20:14
ノートン君が悪さしているのか、あっちに書き込めないのでこっちに書いておく。
まず一度、あなたの周りの、あなたの仕事に関係のない人に、「こういう現象が発生して、こういうことが問題で、自分では解決できないので、こういうことを聞こうと思う。ところで、今の話理解できた?」と聞いてみてください。その人が理解できるまで、説明を繰り返してください。最終的に伝わったことを、書き込んでください。 そんな時間をかけている時間がない、とおっしゃるかもしれませんが、すでに7時間かかっています。このままではそれ以上の時間をかけることになると思います。 _________________ | ||||
|
投稿日時: 2005-01-22 22:47
現象確認しました。DropDownListでも同様の現象が発生しても良さそうですが、DateTimePickerだけみたいですね。
これ、確か使用するDLLが違うんですよね。Win32APIレベルの話ですが。なので、DatetimePickerと同じDLLを使用するListViewを貼り付けてみると、クリックの仕方によって2度表示される時があります。おそらく、描画の仕方の問題でしょう。ListViewの方で2度表示されるのは、選択用の…なんだっけ?ラバーバンド?…選択領域を示す破線が表示されるときでした。 ちなみに、右クリックでコンテキストメニューを出してやると、次からは1回になりました。 何かを描画しようとして、それがキャンセルされ、でも実は描画しようとする意図だけは残っていて、それがフォーカスを移そうとしており、他のコントロールをクリックすると、DateTimePickerの描画で1回、コントロールへのフォーカス移動で1回、フォーカス移動が発生しているのではないかと思われます。 あくまでも推測です。 まぁ、昔からDateTimePickerは、つまらんバグがありましたから。 ##### Windows95の頃 IMEをONにして、キーを一度に大量に押すと、アプリケーションが落ちる。 一太郎についていたDLLと、OfficeについていたDLLでバージョンが違ったので、一太郎のものを入れいると、別のことで落ちる(詳細忘れた)。 バージョンが上のOfficeのものを入れると、それは直っているが、元の大量押しで落ちる件が復活する。 _________________ | ||||
|
投稿日時: 2005-01-22 23:31
同じような時間で、あっちにはレスつけているのにこっちにはついていないのは、なんかむなしいなぁ。
DateTimePickerだけ、Validatingイベントに移さず、全部のチェックをValidatingに移すべきでは?というのも、Validatingは、その名の通り「検証中」のイベントなのですから。と思ったのですが、Validatingでも一緒だった。 Focusでやるからかなぁ?と思ってSelectにしてみたが、一緒だった。 <追加>なんだ。Validatingイベントだと、引数が違うじゃないか。e.Cancel=Trueで、フォーカスが移らない。ここでメッセージボックス表示するようにして、TextBox.Focusはしない。DateTimePickerで検証場所を移せたんだったら、「検証のために用意されているイベントですから」という理由で、全コントロールの検証場所も移せるでしょ。すべて統一できるんだし。</追加> しかし、Tabキーで遷移するときは1つ。イベントの発生順序が関係するのかも。 ところで、ふと思ったのですが、そのフォームには入力をキャンセルするようなコントロールはないのでしょうか。あるいは、右上の「×」ボタンとか。こういうものがあるなら、無理矢理フォーカスを移動させるのは、やめた方がよいかと。というのは、入力を取りやめたいのに、正しいとされる値を入力しないと、キャンセルすることもできないからです。 Validatingで行うなら、CauseValidationプロパティで、検証を無効にすることができます。ただし、コマンドボタン(フォームタイトル上のボタン)にはこのプロパティがありませんので、消しておく方がよいでしょう。 [ メッセージ編集済み 編集者: Jitta 編集日時 2005-01-22 23:45 ] | ||||
|
投稿日時: 2005-01-23 02:06
返事が遅れてしまって
申し訳ありません。 たくさんの人に おしかりを受け 少し自分のコミュニケーション不足と 軽率さにがっかりきています。 こちらで試してみたのですが TextBox側のValidating内で e.Cancel=Trueを記述したのですが ユーザーコントロール上のDateTimePickerにフォーカスが 移ってしまいました。。 なぜかユーザーコントロール上のDateTimePickerを クリックした時にTextBox側のValidatingイベントが2回 実行されてしまいます。 もう少しこちらでも検証してみます。 ありがとうございました | ||||
|
投稿日時: 2005-01-23 10:53
叱ってもしょうがないからね。名前変えて別人装うこともでいるんだし。単に「なんでこういうのがいつまでも続くんだろ?」ってだけで。だからこそ、知識を共有データベース化したい、って思うわけで。
私の方はフォーム上に直においたものなので、ユーザコントロールにすると何か違うのかもしれません。単純にフォーム上に置いたものと比べてみてください。 その次に、ユーザコントロール上のDateTimePicker、問題のTextBoxの、すべての・・・ええっとこのPCには環境が入っていないのですが、Control.Validatingイベントの説明のところに、フォーカスが移るときに発生するイベントと、その順番が書いてあります。そこに書いてあるすべてのイベントをハンドリングして、System.Diagnotics.Debugのメソッドで、どのイベントが、どういう順番で動作しているか、確認してみてください。あるいは、ユーザコントロールとしているパネルにフォーカスが移って1回、DateTimePckerに移って1回、発生しているかもしれません。(超テキトー) _________________ | ||||
1
