Элементы управления доступом к созданной вкладке из отдельной функции C # WinForms

#c# #.net #winforms #tabcontrol

#c# #.net #winforms — формы #tabcontrol

Вопрос:

У меня есть следующий код в моем приложении WinForms C #:

         private void button2_Click(object sender, EventArgs e)
        {
            var txtbox2 = new System.Windows.Forms.RichTextBox();
            TabPage createdtabpage = new TabPage("I am a tab");
            tabControl1.TabPages.Add(createdtabpage);
            createdtabpage.Controls.Add(txtbox2);
        }
 

И я хочу получить доступ к тексту txtbox2 при нажатии отдельной кнопки. У меня есть этот код:

         private void button1_Click(object sender, EventArgs e)
        {
           //Either this:
           string text = txtbox2.Text;
           //or maybe this:
           string text = createdtabpage.Controls[txtbox2]
        }
 

Однако этот код не работает, поскольку переменные недоступны для внешних функций.
Есть ли у кого-нибудь хороший способ получить доступ к этим элементам управления TabPage из внешней функции?

Спасибо за любую помощь

Комментарии:

1. Причина, по которой вы обычно можете получить доступ к чему-то подобному txtbox2.Text , заключается в том, что когда вы создаете вкладку во время разработки , дизайнер создает элемент управления как свойство формы. Когда вы создаете что-то на лету (во время выполнения ), свойства нет. Вместо этого вам нужно установить свойства новой вкладки и нового элемента управления Name , а затем извлечь вкладку из коллекции страниц элемента управления вкладками, а элемент управления — из коллекции элементов управления вкладками

2. Либо то, что сказал @Flydog57, либо создайте свойство / поле для хранения txtbox2

3. @Flydog57 можете ли вы привести пример того, как это сделать с помощью кода

4. Извините, мое программирование с клавиатуры моего телефона не подходит для этого

Ответ №1:

На вкладке control выбирается вкладка, а затем по имени находится нужный элемент управления.

используйте этот код

 private void button1_Click(object sender, EventArgs e)
{           
     var textBox = (RichTextBox)tabControl1.SelectedTab.Controls["txtbox2"];
     MessageBox.Show(textbox.Text);
}
 

Без имени вам нужно перемещаться по всем элементам управления, и, например, если у вас несколько элементов управления RichTextBox, знать порядок, в котором они расположены.

 foreach (Control control in tabControl1.SelectedTab.Controls)
{
    if(control is RichTextBox)
    {
        MessageBox.Show(control.Text);
    }
}
 

Комментарии:

1. Для этого вам необходимо установить Name свойство элемента управления на "txtBox2" значение при его создании. Но это идея

2. Вы должны выйти с break; помощью if