トップ回答者
MaskedTextBox の時刻の表示がおかしい。 → VB.NET 2005

質問
回答
-
> 「形式の種類」にて 「日付と時刻」 → (ex. 11:24 ) を設定します。
とした場合、9:40という値が返ります。これをマスクに当てはめれば、:は数字ではないので無視されますから、940がセットされることと同じであり、結果的に94:0になるのでしょう。
マスクで90:00となっている以上、常に数字4ケタが必要です。
したがって、
> 「形式の種類」にて 「日付と時刻」 → (ex. 11:24 ) を設定します。
ではなく、カスタムでHHmmと指定すれば常に4ケタが返るのでうまくいきます。
しかし、その代わり頭に0が付きます。個人的にはこれでも違和感が無いのですが、もしこの0が付くのが嫌であれば、BindingのFormatイベントやParseイベントで変換するようにすれば、うまくいくのではないかと思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク MYNOBU 2009年8月3日 8:32
すべての返信
-
マスクの設定はどこでされましたか? Maskプロパティに「h:mm]を指定された場合、何も入力できなくなってしまいます。
仮にMaskプロパティに「h:mm]を指定された場合、「その他のすべての文字」に相当します。
佐祐理さんも書かれていますが、以下のページでマスク要素をよく確認してみて下さい。
MaskedTextBox.Mask プロパティ
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.maskedtextbox.mask.aspx
以下に時刻のマスク例があります。
.NET 2.0で新登場するWindowsコントロール
http://www.atmarkit.co.jp/fdotnet/special/win20review01/win20review01_01.html
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/ -
Maskプロパティの値もバインドされていることも書かれていませんでしたし、バインドを外すと正常動作することも書かれていませんでした。
質問の内容が全く違うように思います。
方法 : MaskedTextBox コントロールにデータをバインドする を読むと、BindingのFormatイベントとPaseイベントを設定しています。
MaskedTextBoxの問題というよりBindingの問題だったりしませんか?
# と言っても、どうバインドしてあるのかがまた書かれていないわけですが。 -
祐理
さま
>>Maskプロパティの値もバインドされていることも書かれていませんでしたし、バインドを外すと正常動作することも書かれていませんでした。
>>質問の内容が全く違うように思います。
お説ごもっともです。
はずすととかバインドについては当初よりあとから気づいたことですので ご勘弁を。
下記に補足を書きます。
さて、設定方法ですが データセットデザイナで TableAdpter が定義しています。 この場合 ①(TBL_交信記録TableAdaper) です。
データソース にて ①の TBL_交信記録の項目( 開始時刻) について 右側のプルダウンにてMaskedTextBox にします。
フォームデザイナ にて データソース にて ①の TBL_交信記録の項目( 開始時刻) を 配置します。 ドラッグ&ドロップ
次に 配置した 開始時刻MaskedTextBOX の 右隅の三角矢印をクリックしてマスク設定します。 → (時間 90:00)
開始時刻MaskedTextBOX のプロパティにて バインド(Datbinding) の詳細(・・・) をクリック
「形式の種類」にて 「日付と時刻」 → (ex. 11:24 ) を設定します。
以上です。 -
> 「形式の種類」にて 「日付と時刻」 → (ex. 11:24 ) を設定します。
とした場合、9:40という値が返ります。これをマスクに当てはめれば、:は数字ではないので無視されますから、940がセットされることと同じであり、結果的に94:0になるのでしょう。
マスクで90:00となっている以上、常に数字4ケタが必要です。
したがって、
> 「形式の種類」にて 「日付と時刻」 → (ex. 11:24 ) を設定します。
ではなく、カスタムでHHmmと指定すれば常に4ケタが返るのでうまくいきます。
しかし、その代わり頭に0が付きます。個人的にはこれでも違和感が無いのですが、もしこの0が付くのが嫌であれば、BindingのFormatイベントやParseイベントで変換するようにすれば、うまくいくのではないかと思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク MYNOBU 2009年8月3日 8:32
-
trapemiyaさん お返事ありがとうございます。
さて、trapemiyaさんの内容で動作の確認をいたしました。
>>カスタムでHHmmと指定すれば常に4ケタが返るのでうまくいきます。
開始時刻の項目ですが DateTime型 ですので 頭に [1899/01/01] がついて たとえば [1899/01/01 09:40:00] で
データが書き込まれています。
この状態でテストすると 入力 validated 直後では 確かに 09:40 となっていますが Row に書き込まれた段階で
18:99 になってしまいます。 たぶん 先頭の4桁が 表示されているのだと思います。
まだ、修行がたりないのか理解が及んでいないようです。