簡體   English   中英

使用EnvDTE創建表單后,表單將無法保存

[英]Form won't save after creating it with EnvDTE

我創建了一個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實例是一個調試實例,在我運行加載項后立即打開。 但我已經嘗試使用已安裝的加載項(運行后自動保留),問題仍然存在。


更新
我剛注意到兩件事:

1)按鈕僅出現在表單的設計上,而不是其他地方。 它甚至不讓我選擇它來看它的屬性。

它的名稱不會出現在Intellisense,對象列表中,甚至出現在表單的設計文檔中。

作為測試,我手動添加了一個按鈕,這個我可以選擇並與之交互:

在此輸入圖像描述

我能從中獲得的是我沒有正確添加按鈕。

然后關於按鈕的新問題是:如何在設計時以我可以與它交互的方式向通過EnvDTE創建的表單添加新按鈕?

2)在嘗試查看與我的時髦按鈕和我的手動添加按鈕的區別時,我嘗試了以前沒有使用過編程創建的表單:實例化並運行它。

以下是我的表現:

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

它在屏幕上閃爍(顯然沒有我的兩個按鈕),執行結束。 即使我嘗試在Form_load上執行某些操作,它也會執行,然后表單閃爍,執行結束(表單關閉,調試結束),就像我調用了Close()方法一樣。

那么另外一個問題是:我在添加表單時是否跳過了一步,或者我根本沒有正確創建它?

你正在向ac#項目添加一個表單,我認為你不應該像你一樣單獨實例化表單,但如果你想看到它,你應該執行應用程序。

我不知道該怎么做,從來沒有試過自己,發現了這個,希望它有用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM