2009-12-01 45 views
0

爲什麼我無法從myclass.cs中訪問tabcontrol?從myclass.cs訪問tabcontrol

tabcontrol在form1.cs中,我的代碼試圖創建一個新的tabpage在myclass.cs中。我甚至嘗試將tabcontrol屬性設置爲public,但沒有奏效。

回答

0

只是將該控件上的修飾符更改爲public。一旦你這樣做了,你有Form myForm = new Form();

,你將能夠做到:

myForm.myTAB.TabPages.Add(myTabPage);

(你需要創建過程中的TabPage的。

+0

我已經這樣做了,就像我在我的問題中所說的那樣。 – 2009-12-01 14:17:30

+0

那麼?問題是什麼 ?我在測試項目上做到了這一點,它的工作原理! – Dani 2009-12-01 14:58:49

0

我建議來包裹TabControl的在公共只讀屬性的表單中的代碼隱藏文件,而不是使公共控件本身。貪圖代碼安全性(如能夠到您的TabControl的重新分配到新的東西)。

public TabControl MyTabControl { 
    get { 
    return privateTabControl; 
    } 
} 

而且,不要忘記,你需要一個實例MyClass中的形式,否則你不能訪問實例成員一樣「MyTabControl」或甚至公共實例字段,如果您選擇了這樣的話。

0

我建議你在類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都是由應用程序中的另一個實體創建的:我認爲所有這些「向量」都會影響最適用的技術。

+0

當你想引用更多的控件而不僅僅是tabcontrol到myclass.cs時,這可能會變得有點混亂 – Webleeuw 2009-12-01 13:44:48

+0

@Webleeuw我只是在回答海報的問題時「如問」:我預測你和我會同意,如果「myclass 「需要交互(處理事件,修改,訪問屬性,允許外部」任何「設置內部屬性等),以及對特定表單(或外部表單中的對象或代碼)的許多控制或類,類庫等),將要求不同的編程策略。最好, – BillW 2009-12-02 08:03:10

0

您是否在myclass.cs中創建了form1的實例並檢查該實例上是否存在tabControl?如果你想訪問myclass.cs中的form1.tabControl,那麼你需要將tabControl製作爲公共靜態form1.cs

0

這可能是一個非常簡單的建議,你現在可能已經解決了這個問題,但你記得在類文件的頂部包含using System.Windows.Forms嗎?添加新類文件時,Visual Studio可能不會自動包含該引用。