c# controls.add 控件的使用 ,间接引用还是值引用
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                c# controls.add 控件的使用 ,间接引用还是值引用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                c# controls.add 控件的使用?10
函數內部用下面代碼增加控件:Button btn = new Button();
btn.Location = new Point( 20, 20);
btn.Size = new Size( 60,40);
btn.Text = "btn'sText";
this.Controls.Add( btn );
問題:函數執行完后,btn應該析構,但 "btn'sText"按鈕一直都存在。若btn被增加到了this指向的類中,那么為什么用this也無法訪問它? 其實你的問題分2部分,
①函數運行完,btn的確是出了作用域,但是你忘了你的
this.Controls.Add( btn );
這句語句將btn所引用的對象“添加”到了當前Form的Controls集合中。
而這種“添加”,實際上是以保存“引用”來實現的。
也就是說,它將new Button();創建的實例的引用保存在了
集合中,從某種意義上可以理解為它自己創建了一個新的Button
對象,然后讓他引用了new Button();創建的實例。
所以,即使你的函數運行結束,btn出了作用域;
但是,這不會影響Controls集合里的內容。
打個比方:
A,B,C三個人;
(
A:btn
B:this.controls
c: new Button();
)
A有C的住址,
B不知道C的住址,
A說:我給你;
B抄下了A說的地址( this.Controls.Add(btn)操作 );
某一天,A死了。。難道這時候B就不知道C的家在哪里了嗎??
②你說this無法訪問你添加的btn。
并不是1樓說的,因為你的代碼還沒有執行;
如果你在窗體界面直接拖一個Button控件到界面上,Name=btnA,然后
回到代碼界面,用 “this.btnA”完全可以調用。
請問:“this.”后面會出現的是什么??
在C#中無外乎:屬性、方法、事件。
我們這里顯然不是方法和時間,
控件也就是屬性之一,
屬性如何定義?在類中定義,
所以你只要在所在Form類的定義中,
加上Button btn;
當然,你的代碼就要改成 btn = new Button();
然后你就可以“this.btn”了,
如果還是不理解,那你就看看InitializeComponent();方法
這個方法在窗體程序中必定有;
右鍵--轉到定義,看看里面的方法是怎么寫的。
但是這個就不符合手動創建控件的初衷了;
手創控件的初衷和目的就是要靈活,很多時候不知道
需要多少個某種控件,我們是面向對象的。
所以,手創控件不應該是一個“固定”的東西;
一般可以用集合的方法來保存手創控件的引用,以便調用;
更多的時候,手動創建控件是為了和delegate綁定,以通用事件的方式來使用手創控件。
如果手動創建一個無論如何都會“出現”的控件,
那不是太對不起VS2008那么強大的功能了嗎。。
“死的”讓VS去干;
“活的”才自己來。
總結
以上是生活随笔為你收集整理的c# controls.add 控件的使用 ,间接引用还是值引用的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 浅析C#中foreach引用变量
- 下一篇: 面试风云录(01) - 怎样回答这两个问
