2


0

私はC#、.NET 3.5、およびVisual Studio 2008を使用してカスタムコントロールを作成しました。

ツールボックスからドラッグして、そのコントロールを別のコントロールに追加します。

私がコンパイルしようとするとこれをした後、私は次のようにエラーが出ます:

エラー1エラーとしての警告:フィールド 'MyNamespace.MyControl._myCustomControl'は決して割り当てられず、常にデフォルト値のnullになります

Designer.csファイルを見ると、これはVSが次のコードを生成しないためです。

this._rgReportGallery = new MyNameSpace.MyCustomControl();

フィールド自体はそこにあり、私がそれを入れているコントロールにそれを追加するためのコードは、ただインスタンス化コードが欠けています。

私はそのコードを手動で追加することができ、すべてうまくいくようですが、designer.csファイルが再生成されるとすぐにそれは再び行方不明になります。

私は別のカスタムコントロールをうまく追加し、そのコードを生成させました。

誰がこれを引き起こしているのか知っていますか?

5 Answer


3


私はこの問題を抱えていました、そしてここでの返事は私が問題を見つけるのを助けました、私は私のコンポーネントアクセシビリティとコンストラクタアクセシビリティの両方のために "internal"キーワードを使用していました。 Brentが私の上記のいくつかの記事で述べているように、VSデザイナーは明らかにパブリックコンストラクター以外のものでインスタンス化ラインを生成する問題を抱えているので、クラスのアクセシビリティとコンストラクターが "public"以外のものであるカスタムユーザーコントロールを作らない。

ちなみに、これはVisual Studio 2005で起きましたが、Visual Studio 2008でも起きることは驚きません。 以前のバージョンのVSでも同様に発生する可能性があります。


2


カスタムコントロールのコンストラクタを調整しましたか? コントロールのデフォルトコンストラクタはパラメータのないコンストラクタです。パラメータを必要とする自分のコントロールのコンストラクタを作成するとき、私は過去に問題を抱えていました。 そのような場合、私はいつも2つのコンストラクタを提供します。 そのようにして、パラメータのないものはVSのデザインモードに残ります。


2


また、あなたのUserControlのコンストラクタがパブリックであることを確認してください。 私は内部のUserControlsとVS2008 SP1のWinFormsデザイナーのコード生成に問題がありました。 あなたが言ったようにそれは割り当てラインを生成できませんでした。


0


Designer.csファイルは単純なコードのように見えますが、Windows Forms Designerを簡単に壊す可能性があるため、そのコードで遊ぶことは非常に危険です。 私は多くの人がWinFormsデザイナーを放棄しただけだと聞きました。 壊すのは実に簡単ですが、.Designer.csファイルを再生しようとしないと、魅力的なように機能します。

Designer.csファイルを手動で編集した場合は、なぜそれが誤って自分自身を書き換え続けるのかが説明される可能性があります。 それを修正する方法を知るのは難しいです。 あなたのUIがやり直すのがそれほど難しくないならば、私はただそれをやり直すでしょう(あなたのメインの.csファイルにあるものは何もそのままです)。 それ以外の場合は、似たような形式を見て、それがどの程度正確にフォーマットされるべきかのモデルを見ることができます(ステートメントの順序は重要です)。


0


Visual Studio 2008の最新のサービスパックはありますか。 これは通常、最新のサービスパックがない場合に起こります。