爲什麼我無法從myclass.cs中訪問tabcontrol?從myclass.cs訪問tabcontrol
tabcontrol在form1.cs中,我的代碼試圖創建一個新的tabpage在myclass.cs中。我甚至嘗試將tabcontrol屬性設置爲public,但沒有奏效。
爲什麼我無法從myclass.cs中訪問tabcontrol?從myclass.cs訪問tabcontrol
tabcontrol在form1.cs中,我的代碼試圖創建一個新的tabpage在myclass.cs中。我甚至嘗試將tabcontrol屬性設置爲public,但沒有奏效。
只是將該控件上的修飾符更改爲public。一旦你這樣做了,你有Form myForm = new Form();
,你將能夠做到:
myForm.myTAB.TabPages.Add(myTabPage);
(你需要創建過程中的TabPage的。
我建議來包裹TabControl的在公共只讀屬性的表單中的代碼隱藏文件,而不是使公共控件本身。貪圖代碼安全性(如能夠到您的TabControl的重新分配到新的東西)。
public TabControl MyTabControl {
get {
return privateTabControl;
}
}
而且,不要忘記,你需要一個實例MyClass中的形式,否則你不能訪問實例成員一樣「MyTabControl」或甚至公共實例字段,如果您選擇了這樣的話。
我建議你在類myclass.cs的Form中嵌入對TabControl的引用。
您可以通過爲myclass定義一個構造函數,將TabControl作爲參數,或者通過在myClass中定義一個公共屬性來保存對TabControl的引用。這兩種方法都在這裏說明:
myclass myclassInstance = new myClass(this.tabControl1);
或
myclass myclassInstance = new myClass();
// do some stuff
// now set the TabControl
myClassInstance.theTabControl = this.tabControl1;
另一種方法是:
public class myclass
{
// using "automatic" properties : requires C# 3.0
public TabControl theTabControl { get; set; }
// parameter-less 'ctor
public myclass()
{
}
// optional 'ctor where you pass in a reference to the TabControl
public myclass(TabControl tbControl)
{
theTabControl = tbControl;
}
// an example method that would add a new TabPage to the TabControl
public void addNewTabPage(string Title)
{
theTabControl.TabPages.Add(new TabPage(Title));
}
}
所以,你可以從與TabControl的表單中設置有兩種方式TabControl的參考在Form1上公開一個TabControl類型的公共屬性:但是那麼你必須考慮myclass如何「查看」Form1的當前「實例」......如果Form1有多個實例?在只有一個TabControl的情況下,您可以在Form1上使用靜態屬性來公開它。
在這種情況下,「誰創造誰」變得有趣:如果表單正在創建myclass;如果myclass正在創建表單;如果myclass和Form都是由應用程序中的另一個實體創建的:我認爲所有這些「向量」都會影響最適用的技術。
您是否在myclass.cs中創建了form1的實例並檢查該實例上是否存在tabControl?如果你想訪問myclass.cs中的form1.tabControl,那麼你需要將tabControl製作爲公共靜態form1.cs
這可能是一個非常簡單的建議,你現在可能已經解決了這個問題,但你記得在類文件的頂部包含using System.Windows.Forms
嗎?添加新類文件時,Visual Studio可能不會自動包含該引用。
我已經這樣做了,就像我在我的問題中所說的那樣。 – 2009-12-01 14:17:30
那麼?問題是什麼 ?我在測試項目上做到了這一點,它的工作原理! – Dani 2009-12-01 14:58:49