日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UserControl 中包含封装了集合对象的属性被设计器自动初始化所引起的错误!也有关于List的问题

發(fā)布時(shí)間:2024/3/26 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UserControl 中包含封装了集合对象的属性被设计器自动初始化所引起的错误!也有关于List的问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在CSDN上看到了一篇關(guān)于UserControl引起的問題,去重現(xiàn)了一下,并進(jìn)行了一些小結(jié)。

?

自定義 UserControl 中包含封裝了 List <接口> 類型字段的屬性,編譯后造成引用了該 UserControl 的窗體設(shè)計(jì)器無法顯示!

?

??? public partial class UserControl1 : UserControl
??? {
??????? private List<Student> face;

??????? //[Bindable(false), Browsable(false)]
??????? //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]????????
??????? public List<Student> Face
??????? {
??????????? get??????????? {??????????????? return face;??????????? }
??????????? set??????????? {??????????????? face = value;??????????? }
??????? }

??????? public UserControl1()
??????? {
??????????? InitializeComponent();

??????????? face = new List<Student>();
??????? }
??? }

??? //[Serializable]
??? public class Student
??? {

?????? //此處為了簡(jiǎn)化,不加任何的變量和屬性
??????? void Update()????? {//此處為空???? }
??? }

}

?

在這個(gè)UserControl上隨便放些東西,為了簡(jiǎn)化問題,我在這上面放了幾個(gè)Label標(biāo)簽,以可以在Form中看到這個(gè)UserControl。

然后把這個(gè)編譯生成的UserControl拖放到Form當(dāng)中,編譯,彈出:

創(chuàng)建組件"UserControl1"失敗。錯(cuò)誤消息為:(此處只摘取有用信息,僅取了第一行的提示信息)

“System.Runtime.Serialization.SerializationException :程序集"WindowsApplication5,Version 1.0.0.0,? Culture = neutral, PublicKeyToken = null "中的類型 “WindowsApplication5.Student”未標(biāo)記為可序列化”

同時(shí)還會(huì)彈出另一個(gè)錯(cuò)誤對(duì)話框,如下提示:

屬性“Face”的代碼生成失敗。錯(cuò)誤是:“程序集“WindowsApplication5,Version 1.0.0.0, Culture = neutral, PublicKeyToken = null? ”中的類型“WindowsApplication5.Student”未標(biāo)記為可序列化。”

?

關(guān)閉彈出的對(duì)話框后,發(fā)現(xiàn)form1上并沒有顯示UserContro,但到form1的InitializeComponent()代碼中,又發(fā)現(xiàn)有UserControl的添加代碼。

?

到form1的resx中去看,沒有任何的資源顯示。

處理辦法:

1.既然通過提示,我們看到了WindowsApplication5.Student未標(biāo)記為可序列化,查了一下網(wǎng)上的資料,去把這個(gè)Student序列化,很簡(jiǎn)單,在Public Class Student上面加入一句[Serializable]。即可。

然后再進(jìn)行編譯,結(jié)果又出現(xiàn)錯(cuò)誤提示:

?

錯(cuò)誤?1?無效的 Resx 文件。未能加載 .RESX 文件中使用的類型 System.Collections.Generic.List`1[[WindowsApplication5.Student, WindowsApplication5, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089。請(qǐng)確保已在項(xiàng)目中添加了必要的引用。 行 130,位置 5。?C:/Documents and Settings/sn00590/My Documents/Visual Studio 2005/Projects/WindowsApplication5/WindowsApplication5/Form1.resx?130?5?WindowsApplication5。

這個(gè)錯(cuò)誤是在Form1.resx中出現(xiàn)的,在解決方案中去找到這個(gè)文件,打開一下,其中有userControl1.Face 這個(gè)資源條目,而其的類型和值均為 (Nothing/null),而這就是導(dǎo)致窗體設(shè)計(jì)器無法顯示的原因,刪除這條資源和 InitializeComponent() 中 userControl1.Face 的賦值語句,窗體設(shè)計(jì)器可以正常打開了,但問題是一但修改了窗體的內(nèi)容,再次編譯時(shí),Face 屬性又會(huì)被重新賦值,這個(gè)資源引用也仍會(huì)被加入!
? ? 實(shí)際上,經(jīng)過測(cè)試發(fā)現(xiàn),自定義 UserControl 中所有封裝了集合對(duì)象的屬性都會(huì)被設(shè)計(jì)器自動(dòng)初始化,比如:string[],只不過其不會(huì)影響設(shè)計(jì)器的行為。不知 MS 為什么要這樣設(shè)計(jì),感覺是幫了倒忙,很是讓人費(fèi)解。

經(jīng)測(cè)試發(fā)現(xiàn),在拖放自定義控件時(shí)到窗體時(shí), 實(shí)際上該自定義控件會(huì)被實(shí)例化一次。。 同時(shí)都會(huì)去調(diào)用一下它下面的屬性,但并不執(zhí)行它。

有時(shí)也會(huì)彈出這個(gè)問題,與無效的Resx文件,是相同的問題。
類型“WindowsApplication130.Student[]”的對(duì)象無法轉(zhuǎn)換為類型“WindowsApplication130.Student[]”。 這句話可以讓很多人瘋掉,因?yàn)樗窍嗤念愋娃D(zhuǎn)相同的類型 ,怎么無法進(jìn)行轉(zhuǎn)換呢。然后到Form1的InitializeComponent()中刪除掉控件相關(guān)的,并到Form1.resx中刪除掉那一行類型和值均為(Nothing/null)。并在屬性上加入以下兩句,然后再把那個(gè)控件拖上來,即可。

解決辦法是:在屬性上加入以下兩句。
??????? [Bindable(false), Browsable(false)]
??????? [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]????????

?

老實(shí)說,上面這幾個(gè)問題很折磨人的,在網(wǎng)上搜了搜,或許是用的關(guān)鍵字不對(duì),沒搜到些什么東西。而且項(xiàng)目又緊,只有一發(fā)狠,花了些時(shí)間來研究它,寫在這,希望能幫助遇到相同問題的朋友。

總結(jié)

以上是生活随笔為你收集整理的UserControl 中包含封装了集合对象的属性被设计器自动初始化所引起的错误!也有关于List的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。