доступ к tabcontrol из myclass.cs - PullRequest
       48

доступ к tabcontrol из myclass.cs

0 голосов
/ 01 декабря 2009

Почему я не могу получить доступ к tabcontrol из myclass.cs?

tabcontrol находится в form1.cs, и мой код, который пытается создать новую вкладку, находится в myclass.cs. Я даже пытался установить свойство tabcontrol для public, но это не сработало.

Ответы [ 5 ]

0 голосов
/ 15 января 2010

Это может быть слишком простым предложением, и вы, вероятно, уже решили это, но не забыли ли вы включить using System.Windows.Forms вверху файла класса? Visual Studio может не включать эту ссылку автоматически при добавлении нового файла класса.

0 голосов
/ 04 января 2010

Вы создаете экземпляр form1 в myclass.cs и проверяете наличие tabControl в этом экземпляре? Если вы хотите получить доступ к form1.tabControl в myclass.cs, вам нужно будет сделать tabControl публичным статическим в form1.cs

0 голосов
/ 01 декабря 2009

Я бы предложил обернуть TabControl в общедоступное свойство только для чтения в файле codebehind формы, а не делать сам элемент управления общедоступным. Просто ради безопасности кода (например, возможность переназначить ваш TabControl на что-то новое).

public TabControl MyTabControl {
  get {
    return privateTabControl;
  }
}

Кроме того, не забудьте, что вам понадобится экземпляр для вашей формы в MyClass, иначе вы не сможете получить доступ к элементам экземпляра, таким как «MyTabControl» или даже к открытым полям экземпляра, если вы выбрали это.

0 голосов
/ 01 декабря 2009

Я предлагаю вам вставить ссылку на TabControl в форму в классе myclass.cs.

Вы можете сделать это либо определив конструктор для myclass, который принимает TabControl в качестве параметра, либо определив Public Property в myClass, который содержит ссылку на TabControl. Оба способа проиллюстрированы здесь:

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:

myclass myclassInstance = new myClass(this.tabControl1);

или

myclass myclassInstance = new myClass();
// do some stuff
// now set the TabControl
myClassInstance.theTabControl = this.tabControl1;

Альтернативой может быть предоставление Открытого свойства типа TabControl в Form1: но тогда вам нужно подумать о том, как myclass будет «видеть» текущий «экземпляр» Form1 ... если существует несколько экземпляров Form1? В случае наличия единственного и единственного TabControl вы можете использовать статическое свойство в Form1 для его представления.

В этом случае «кто создает кого» становится интересным: если форма создает myclass; если myclass создает форму; если и myclass, и Form создаются другой сущностью в приложении: я думаю, что все эти "векторы" будут зависеть от того, какой метод лучше применять.

0 голосов
/ 01 декабря 2009

just изменить модификатор на элементе управления на public .

Как только вы это сделаете, у вас будет Form myForm = new Form ();

Вы сможете сделать:

myForm.myTAB.TabPages.Add (myTabPage);

(Разумеется, вам нужно будет создать вкладку.

...