[英]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#項目添加一個表單,我認為你不應該像你一樣單獨實例化表單,但如果你想看到它,你應該執行應用程序。
我不知道該怎么做,從來沒有試過自己,發現了這個,希望它有用:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.