5

開いたソリューションの既存のプロジェクトにフォームを追加する Visual Studio アドインを作成しました。

これは私がフォームを作成する方法です:

string templatePath = sol.GetProjectItemTemplate("Form.zip", "csproj");
//sol is an EnvDTE80.Solution2

proj.ProjectItems.AddFromTemplate(templatePath, formName);
//proj is an EnvDTE.Project

その後、追加されたフォームの ProjectItem への参照を正常に取得できます。次に、System.Windows.Forms.Form への参照を取得できます。この参照を使用して、次のようにフォームにボタンを追加できます。

Button btn = new Button();

btn.Text = "my funky button";
btn.Name = "newButton";
btn.Size = new Size(150, 23);
btn.Location = new Point(30, 30);

frmNewForm.Controls.Add(btn);
//frmNewForm is a System.Windows.Forms.Form

そして、ボタンがフォームに正常に追加されます。

ここに画像の説明を入力

ただし、このフォームを保存しようとすると、保存されません。Visual Studio の [保存] ボタンをクリックしても、グレーにならないだけです。[すべて保存]をクリックしてもフォームが保存されません。次に、Visual Studio を閉じて再度開き、アドインで新しいフォームを追加したプロジェクトを開きますが、新しいボタンが表示されません。ただの空のフォーム。

次のコードを使用して、プロジェクトとソリューションをプログラムで保存しようとしました。

itemForm.Save(itemForm.Name);
//itemFrom is an EnvDTE.ProjectItem

proj.Save(proj.FullName);
//proj is an EnvDTE.Project

これは、アドインをテストするために使用していた Visual Studio のインスタンスが、アドインを実行した直後に開いたデバッグ用のインスタンスであるためだと考えていました。しかし、インストールされたアドイン (実行後に自動的に残ったもの) を使用してみましたが、問題は解決しませんでした。


更新
2 つのことに気付きました。

1)ボタンはフォームのデザインにのみ表示され、それ以外の場所には表示されません。また、属性を表示するために選択することさえできません。

その名前は、Intellisense、オブジェクト リスト、またはフォームのデザイン ドキュメントにも表示されません。

テストとして、ボタンを手動で追加しました。これを選択して操作できます。

ここに画像の説明を入力

そこから得られるのは、ボタンを適切に追加していないということです。

次に、ボタンに関する新しい質問は次のようになります: EnvDTE を介して作成されたフォームに、設計時に操作できる方法で新しいボタンを追加するにはどうすればよいですか?

2)ファンキーなボタンと手動で追加したボタンとの違いを確認しようとしているときに、プログラムで作成したフォームでこれまでにないことを試みました: インスタンス化して実行します。

そして、これが私がそれを行った方法です:

MyFunkyForm frm = new MyFunkyForm ();
frm.Show();

画面上で点滅し (私の 2 つのボタンは表示されていないようです)、実行が終了します。Form_load で何かをしようとしても、それが実行され、フォームが点滅し、Close() メソッドを呼び出したかのように、実行が終了します (フォームが閉じられ、デバッグが終了します)。

次に、追加の質問は次のとおりです。フォームを追加するときにステップをスキップしましたか、それともフォームをまったく作成していませんか?

4

1 に答える 1

1

フォームをac#プロジェクトに追加しています。フォームを単独でインスタンス化するべきではないと思いますが、それを見たい場合はアプリケーションを実行する必要があります。

これを行う方法がわからない、自分で試したことがない、これを見つけた、うまくいけば役立つ:

http://www.mztools.com/articles/2006/mz2006016.aspx

于 2011-03-04T20:59:02.683 に答える