none
.NET Framework 1.1から3.5へのマイグレーション後の「dateTimePicker」の仕様について RRS feed

  • 質問

  • 初めて投稿させていただきます、よろしくお願いします。 C#で作成したプログラムを.NET Framework 1.1から3.5にマイグレーションを行いました。 そこで今まで正常に動作していた処理が動作しなくなりました。 以下詳細 dateTimePickerコンポーネントのvisibleをデザイナ上でfalseに設定 ソースコード上でdateTimePickerのtextプロパティに値を設定 ソースコード上でその値を参照 上記処理を実行したところ.NET1.1のプログラムではtextの内容が表示されますが、 .NET3.5のプログラムではtextの内容が表示されません(value値は設定した値が表示される) 知りたいのは以下の二点です。 ①上記事象が.NETのバージョンを上げたことによる原因なのか  .NET1.1の実行環境、コンパイルがなく、お客様の本番環境(.NET1.1)にて上記事象が発生していないため、本当の原因が何なのか不明です。 ②.NETのバージョンを上げたことによる影響の場合他のコンポーネントについても同様の事象が発生するのか   button、TextEdit、Lable等のコンポーネントについて同じ処理を行ったところ問題ないことを確認しましたが、 すべてのtextプロパティをもつコンポーネントに対しては行っていません。 個人的にはvalue値をもつコンポーネントは怪しいと思ってます。 以上よろしくお願いします。
    2009年9月14日 5:56

回答

  • .net Framework1.1SP1しか入っていないWindows2000でテストしました。
    結果は、始めからVisible=falseのDateTimePickerはVisible=trueにされるまでTextは空白でした。
    ComboBoxも同じ挙動です。

    #Textプロパティにセットする前にDateTimePicker.Handleを読み取ればすむことなんですけどね
    • 回答としてマーク mimi777 2009年9月15日 0:51
    2009年9月14日 12:38
  • .NET 1.1 時代の挙動までは確かめていませんが、.NET 3.5 SP1 + GDR の手元の環境で確認する限り、DateTimePicker の Text プロパティに値を設定しても、Value プロパティが更新されるのみで、Text プロパティから設定した値を取得できません。
    これは DateTimePicker の Text プロパティ(の get アクセサ)がウィンドウハンドルが存在することを前提としているためです。
    gekka さんが記述されていますように、Handle プロパティにとりあえずアクセスしておけば、問題なく動かせるとは思います。
    (Handle プロパティにアクセスすることでウィンドウが内部的に作成され、今後はそこのウィンドウのテキストをベースにやりとりができるようになる)

    DateTimePicker の設計思想としては、Text プロパティは表示されている文字列を取得できるものであり、Value プロパティがあくまで本命なのだと思います。
    ウィンドウハンドルがないことは想定外なのかもしれませんが…。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク mimi777 2009年9月15日 0:51
    2009年9月14日 14:12
    モデレータ

すべての返信

  • .net Framework1.1SP1しか入っていないWindows2000でテストしました。
    結果は、始めからVisible=falseのDateTimePickerはVisible=trueにされるまでTextは空白でした。
    ComboBoxも同じ挙動です。

    #Textプロパティにセットする前にDateTimePicker.Handleを読み取ればすむことなんですけどね
    • 回答としてマーク mimi777 2009年9月15日 0:51
    2009年9月14日 12:38
  • .NET 1.1 時代の挙動までは確かめていませんが、.NET 3.5 SP1 + GDR の手元の環境で確認する限り、DateTimePicker の Text プロパティに値を設定しても、Value プロパティが更新されるのみで、Text プロパティから設定した値を取得できません。
    これは DateTimePicker の Text プロパティ(の get アクセサ)がウィンドウハンドルが存在することを前提としているためです。
    gekka さんが記述されていますように、Handle プロパティにとりあえずアクセスしておけば、問題なく動かせるとは思います。
    (Handle プロパティにアクセスすることでウィンドウが内部的に作成され、今後はそこのウィンドウのテキストをベースにやりとりができるようになる)

    DateTimePicker の設計思想としては、Text プロパティは表示されている文字列を取得できるものであり、Value プロパティがあくまで本命なのだと思います。
    ウィンドウハンドルがないことは想定外なのかもしれませんが…。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク mimi777 2009年9月15日 0:51
    2009年9月14日 14:12
    モデレータ
  • gekkaさん Azuleanさん ありがとうございました。 .NET1.1でも同事象が発生するのですね。 お客様の本番環境(.NET1.1)にてこの事象が発生していないためもっと別のところに原因があるのかもしれません。 解決方法としてはTextの値でなくValueの値を参照することで対処しようと考えています。 ComboBoxも同じ挙動でしたか、Value値を持つコンポーネントは全対象ですかね・・・ 横並びチェックが大変そうです・・・ ここからは追加の内容なのですが ソースファイルを再度見直したところ 「dateTimePickerコンポーネントのvisibleをデザイナ上でfalseに設定」ではなく Panelコンポーネントの上にdateTimePickerコンポーネントを配置し デザイナ上でdateTimePickerのvisibleはTrue PanelのvisibleはFalseとなっていました。 今回の件に関しては.NET1.1においても同様の事象が発生するということで解決としたいと思います。 ありがとうございました。
    2009年9月15日 1:09