none
UserControl 内でMaskedTextBoxのアクセッサを利用したときに・・・。 RRS feed

  • 質問

  • いつも閲覧さえていただいております。

    Visual Studio 2008 を利用して開発をしております。

     

    UserControl 内に、MaskedTextBoxを配置して、アクセッサから、MaskedTextBoxにアクセスするようにしております。

     

    = UserContrl

    public class Hoge : UserControl

    {

           public MaskedTextBox

           {

                get { return txtMsk; }

                set { txtMsk = value; }

           }

    }

     

    作成した、UserControlを、Windows フォームのデザイナから配置しようとした際に、Visual Studio 2008 が強制終了します。

    過去ログを見させていただき、DesignMode が正しく判断できていないことは理解できましたが、

    対策方法を理解しきれませんでした。

     

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=3132727&SiteID=7

     

    MaskedTextBoxを継承したUserControlを作成し、

    その中で、DesignModeを判定すればよいかと思うのですが、

    具体的にどのようなコードを記述したらよいかわかりませんでした。

     

    対策の手順やサンプルを教えていただけると幸いです。

    お手数をおかけしますが、ご教授お願い致します。

    2008年8月21日 13:03

回答

  • MaskedTextBoxは全く関係ありません。

    Contactプロパティが何をしているかよく考えて下さい。

     

    Code Snippet
    public string Contact
    {
        get { return this.Contact; }
        set { this.Contact = value; }
    }

     

     

     

    余談

    コントロールのsetアクセサっていりますか?

    参照を入れ替える必要は恐らくないですから、getだけで良いのでは?

    2008年8月22日 15:42
    モデレータ

すべての返信

  •  ゆう163 さんからの引用

    作成した、UserControlを、Windows フォームのデザイナから配置しようとした際に、Visual Studio 2008 が強制終了します。

    下記のような手順を行いましたが、再現を確認できませんでした。(XPSP2、VS2008(SPなし))

    単純にアクセサがあることが問題じゃないのでは?

     

    1.Windowsフォームアプリケーションプロジェクトを作成する

    2.ユーザコントロールを作成する

    3.ユーザコントロールのデザイナでMaskedTextBoxを配置する。

    4.ユーザコントロールのコードでアクセサを作る。

    Code Snippet
    public MaskedTextBox Temp
    {
        get { return maskedTextBox1; }
        set { maskedTextBox1 = value; }
    }

     

    5.一度ビルドする。

    6.ツールボックスに追加されたユーザコントロールをFormに貼り付ける

    7.ビルドする。

    8.デザイナを開き直す。


     ゆう163 さんからの引用

    MaskedTextBoxを継承したUserControlを作成し、

    その中で、DesignModeを判定すればよいかと思うのですが、

    具体的にどのようなコードを記述したらよいかわかりませんでした。

    ユーザコントロールの中のユーザコントロールとかにすると、DesignMode = falseは十分あり得ます。

    これはMaskedTextBoxを継承したコントロールを作っても同じことです。

     

     ゆう163 さんからの引用

    対策の手順やサンプルを教えていただけると幸いです。

    何が必要なのか明確でない状態で、それをやるのは無責任ですし、状況によっては不適切なコードになるパターンもあり得ます。

    せめて、どんなコードがまずくて、どのようにしたいのかもう少し明確にして下さい。

    2008年8月21日 15:32
    モデレータ
  • ご回答ありがとうごじます。

    XPSP2、VS2008(SPなし)で開発させていただいております。

     

    手順としましては、

    1.ソリューションの作成

    2.クラスライブラリ(プロジェクト)の作成

    3.ユーザーコントロールの作成

    4.ビルド

    5.Windows フォームアプリケーションの作成

    6.2で作成したクラスライブラリを、参照に追加

    8.フォームの作成

    9.フォームにツールボックスより、ユーザーコントロールを追加(ここでエラーが発生)

     

    ■エラー内容

    AppName: devenv.exe      AppVer: 9.0.21022.8     AppStamp:47317b3d
    ModName: unknown      ModVer: 0.0.0.0      ModStamp:00000000
    fDebug: 0       Offset: 0ba26e9e

     

    2で作成した、クラスライブラリが下記になります。

     

     http://moon.s20.xrea.com/SevenControl.lzh

     

    ソリューションを作成し、Windowsアプリケーションを作成し、

    その後、上記のプロジェクトを作成していただき、

    Windowsフォームアプリケーションで、フォームを作成し、

    デザイナで、上記プロジェクトに含まれているユーザーコントロールを配置していただく

    時に落ちます。

     

    手元にあるマシーン複数台でテストをさえていただきましたが、

    必ず同じところでエラーが発生しました。

     

    動作確認機

      XPSP3、VS2008(SPなし)

      XPSP2、VS2008(SPなし)

      XPSP2、VS2008(SP1)

     

    お手数をおかけしますが、ご教授お願いたします。

    2008年8月22日 0:54
  • MaskedTextBoxは全く関係ありません。

    Contactプロパティが何をしているかよく考えて下さい。

     

    Code Snippet
    public string Contact
    {
        get { return this.Contact; }
        set { this.Contact = value; }
    }

     

     

     

    余談

    コントロールのsetアクセサっていりますか?

    参照を入れ替える必要は恐らくないですから、getだけで良いのでは?

    2008年8月22日 15:42
    モデレータ
  • 今回の原因の特定方法

     

    ・プロパティを全て一旦コメントアウト

    ・少しずつコメントを外して、コンパイル&貼り付けを繰り返す

    ・問題が発生した箇所をチェックする

    ・そこだけで起きるかどうか見直す

     

    よくある例外ならVisual Studioは落ちずにそのエラーを表示してくれますが、スタックオーバーフローだけは落ちますねぇ。
    2008年8月23日 2:23
    モデレータ
  • ご回答ありがとうございます。

     

    UserControlはあまり関係なかったんですね。。

     

    ・プロパティを全て一旦コメントアウト

     

    を順にさえていただいのですが、私の確認ミスですね。

     

    ご迷惑をおかけしました。

    ありがとうございました!

    2008年8月25日 4:42
  •  ゆう163 さんからの引用

    ・プロパティを全て一旦コメントアウト

    を順にさえていただいのですが、私の確認ミスですね。

    コードを編集するだけでは反映されませんから、ちゃんとビルドしては確認ということを繰り返す必要はあります。

    結構、ビルドを忘れることは多いですから…。

    2008年8月25日 14:29
    モデレータ