3

またはカスタムフォームから継承するForm場合、常にファイルを取得するとは限りませんa.Designer.cs。次にフォームを表示してダブルクリックすると、InitializeComponent()メソッドは派生クラスになります。ファイルを強制的Designer.csに作成するにはどうすればよいですか?また、ファイルが作成されない原因は何ですか?

すべてのフォームで発生するわけではありませんが、何が原因かわかりません。

編集:

  1. ソリューションを右クリックして新しいプロジェクトを作成>追加>新しいプロジェクト>Windowsフォームアプリケーション
  2. プロジェクトを右クリック>追加>クラス>"FormA.cs"
  3. クラスの編集: "public class FormA:Form"=>まだクラスとして表示されています
  4. メソッドの追加:public FormA(){} =>ソリューションエクスプローラーにはフォームアイコンが表示されますが、サブファイルは表示されません
  5. 右クリック>ビューデザイナー=>フォームを表示
  6. form =>をダブルクリックしてFormA_Loadメソッドを作成し、FormA.csでInitializeComponentメソッドを作成して、FormA.resxファイルを作成します。しかし、Designer.csはありません。
4

2 に答える 2

4

プロジェクトを右クリック>追加>クラス>"FormA.cs"

それが問題です。.Designer.csデザイナはファイルを追加しません。デザイナは、すでに利用可能なファイルを使用します。

新しいフォームを作成すると、.Designer.csデフォルトでファイルが作成されます。その後、基本クラスを変更すると、.Designer.csファイルが保持されます。

新しいクラスを作成すると、ファイルはありません.Designer.cs。デザイナーはあなたのためにそれを作成しません。実際には必要ありません。

于 2013-02-08T10:03:27.810 に答える
1

ここで実際に起こっていることは、VSプロジェクトにクラスまたはフォームを追加すると、テンプレートから開始して作成されるということです。実際、[クラスの追加]または[フォームの追加]ではなく[新しいアイテムの追加]を選択すると、インストールされているすべてのテンプレート(標準テンプレートと独自に作成できるテンプレートの両方)のリストにクラスとフォームの両方が表示されます。

テンプレートは、いくつかの名前がパラメーター化された単なるアイテムです(たとえば、クラス名とクラスの名前空間)。フォームの場合、テンプレートは2つの異なるファイルで構成されていますが、クラス1には1つのファイルしか含まれていません。Designerファイルがあるという事実は、クラスの機能を変更しません。それは、生成されたものを邪魔にならないようにする方法であり、変更する可能性が低くなります。

デザイナでフォームを表示するかどうかは、デザイナファイルの存在に依存しませんが、Visual Studioでアイテムをダブルクリックすると、クラスのDesignerAttribute(フォームから継承されます)が検索されます。 、そしてそれを開く方法を決定します。

この結果をすばやく表示してみてください。

typeof(Form).GetCustomAttributes(typeof(DesignerAttribute), false);
于 2013-02-08T11:34:27.880 に答える