#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