2010-08-17 33 views
2

我在VS 2010中遇到了一個奇怪的情況,那就是用戶控件。表單設計器不停地改變我的輸入,然後告訴我它不存在!它第一次編譯和運行,然後如果我改變了一些不相關的東西,它會在designer.cs文件中給我一個錯誤(無法解析符號SomeEntry)。Visual Studio 2010不斷改變我的winforms控件

private SomeEntry someEntry; 
// ... 
this.someEntry = new **MyNameSpace**.SomeEntry(); 

如果我刪除了MyNameSpace。

this.someEntry = new SomeEntry(); 

它的工作原理,直到我再次做出改變。如果我看上課的時候鼠標在改變設計文件,SomeEntry顯示SomeEntry.SomeEntry() 代替MyNameSpace.SomeEntry()

基本上,這個定義是這樣的:

namespace MyNameSpace 
{ 
    public partial class SomeEntry : FormValidatingUserControl 
    { 
     public SomeEntry() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

那麼,我該怎麼辦?

+1

你自己編輯InitializeComponent()嗎?爲什麼在新的SomeEntry語句之前聲明someEntry字段? – 2010-08-17 01:26:03

回答

2

事實證明,我應該將它的代碼正確地發佈,因爲我相信有人會更早地爲我解決這個問題。

問題是我試圖簡化帖子,並更改了MyNameSpace和SomeEntry的名稱以保持其通用性。

該項目是東西命名空間東西(到目前爲止,正常),並有一個生成的類從實體框架的東西

爲了重現該問題,我創建了一個名爲的新項目WinFormTestX。因此,解決方案是WinFormTestX和項目WinFormTestX。我添加了一個名爲WinFormTestX的類,但沒有做任何事情。

namespace WinFormTestX 
{ 
    public class WinFormTestX 
    { 
     public int ID { get; set; } 
    } 
} 

現在,我創建一個UserControl(UserControl1)並在其上放置一個簡單的按鈕。編譯它,然後工具箱按預期添加這個控件。現在,我把它放到Form1上並編譯它,並得到一個錯誤:當我在類WinFormTestX右擊並從項目中排除(或刪除)一旦

Error 1 The type name 'UserControl1' does not exist in the type 'WinFormTestX.WinFormTestX' D:\Data\Projects\Temp\WinFormTestX\Form1.Designer.cs 31 51 WinFormTestX

,一切正常。

所以,即使沒有使用該名稱空間,只要在項目中使用與名稱空間同名的類即可導致問題。顯然,現在我知道原因了,解決這個問題的方法很簡單。但是,這是不是應該提交給微軟的「錯誤」?

1

當我手動將一個類移動到一個新的命名空間時,就會發生類似這樣的事情。如果你不小心,你的班級可以定義多次。例如,可能有一個剩餘的設計器.cs文件,該文件仍舊在其舊命名空間或某些其他.cs/.designer.cs不匹配中定義該類。換句話說,您的程序集可能包含SomeEntry.SomeEntryMyNameSpace.SomeEntry類。

檢查Visual Studio對象瀏覽器,看看是否有在多個名稱空間中定義的SomeEntry

+0

不,我沒有重命名它,它沒有被定義多次。這是一個用戶控件,我放在窗體上。用戶控件相當簡單,基本上沒有添加UI元素,一個屬性和一個虛擬方法。如果我使用代碼隱藏添加控件而不是將它放在主窗體上,它就可以工作。但是如果我把它放在主窗體上,它會給我上面的錯誤。 – 2010-08-18 12:52:40

+0

現在這更奇怪了。我沒有任何東西創建了一個Test UserControl。如果將它從工具箱拖到窗體上,我會得到相同的錯誤。 – 2010-08-18 13:58:53

相關問題