Официальный сайт студ.городка НГТУ
Программирование и БД » c# помогите с программой 

#1  06.04.12 04:00

c# помогите с программой

при нажатии на кнопку создаются вкладки в tabControl, в которых есть textbox и кнопка:

Код::

      
       private void button4_Click(object sender, EventArgs e)
       {
           var tabPage = new TabPage("Страница");
           tabPage.BackColor = Color.White;
           tabControl1.TabPages.Add(tabPage);

           TextBox textBox = new TextBox();
           textBox.Location = new Point(10, 50);

           Button button = new Button();
           button.Text = "Нажми";
           button.Location = new Point(10, 10);

           button.Click += new EventHandler(button_Click);

           tabPage2.Controls.Add(textBox);
           tabPage2.Controls.Add(button);
       }

подскажите плз, как сделать, чтобы в выбранной вкладке при нажатии на кнопку в textbox добавился текст?

Код::

       private void button_Click(object sender, EventArgs e)
       {
           textBox.Text = "Вот он!";
       }

говорит

Элемент "textBox" не существует в текущем контексте.

Offline

#2  06.04.12 10:23

Re: c# помогите с программой

В первом куске кода у тебя идет объявление, инициализация и установка свойств textBox. Во втором куске все это отсутствует, поэтому и ругается. Нужно выносить все в общую область видимости. Инициализацию производить в конструкторе этой видимости.

Offline

#3  06.04.12 17:29

Re: c# помогите с программой

[PAUL], я понемаю, что этот элемент там не виден. я и спрашиваю, как сделать видимыми элементы выделенной страницы tabCOntrol'a?
у меня во всех вкладках одинаковые названия (button, textBox) элементов
если их сделать видимыми, то они будут переходить из вкладки во вкладку, так как будут одни и теже. а мне нужно выбрать именно те, которые сейчас видны. вот(

Offline

#4  06.04.12 19:26

Re: c# помогите с программой

а типа
сендер.парент.контрол.индексоф("textBox").текст = ...
просто не помню точные названия, идея в поиске текстбокса у родителя кнопки, вызвавшей эвент.
еще можно завести массив с парами текстбокс+кнопка, и потом в этом массиве искать сендер, то есть кнопку, по ней уже будет видно какой текстбокс к ней относится.

Исправлено Fire Stream (06.04.12 19:27)

Offline

#5  06.04.12 22:19

Re: c# помогите с программой

собстна вроде получилось так:

Код::

Control[] textBox2 = tabControl1.TabPages[tabControl1.SelectedIndex].Controls.Find("textBox2", true);
...
textBox2[0].Text  = ...

Offline

#6  06.04.12 23:08

Re: c# помогите с программой

как я хотел:
коротко:

Код::

((TextBox)((TabPage)((Button)sender).Parent).Controls.Find("textBox", false)[0]).Text = "blablabla";

по нормальному:

Код::

if (!(sender is Button)) return;
Button b = (Button)sender;
if (!(b.Parent is TabPage)) return;
TabPage tp = (TabPage)b.Parent;
Control[] c = tp.Controls.Find("textBox", false);
if ((c.Length <= 0) || (!(c[0] is TextBox))) return;
TextBox tb = (TextBox)c[0];
tb.Text = "blablabla";

Исправлено Fire Stream (06.04.12 23:08)

Offline

#7  06.04.12 23:30

Re: c# помогите с программой

о. понял. спасибо большое!

Offline

#8  06.04.12 23:35

Re: c# помогите с программой

даже можно еще проще, там лишнего написал:

Код::

((TextBox)((Button)sender).Parent.Controls.Find("textBox", false)[0]).Text = "blablabla";

и

Код::

if (!(sender is Button)) return;
Button b = (Button)sender;
Control[] c = b.Parent.Controls.Find("textBox", false);
if ((c.Length <= 0) || (!(c[0] is TextBox))) return;
TextBox tb = (TextBox)c[0];
tb.Text = "blablabla";

и конечно для этого надо при создании текстбокса вписать:

Код::

textBox.Name = "textBox";

Offline

#9  06.04.12 23:47

Re: c# помогите с программой

ну про то, что вписать я понял, ога. у меня по сути по тому же принципу работало. только как то через Ж)

то есть он по сути так же ищет елемент, только не в выделенной вкладке, а в родителе кнопки, да?

Offline

#10  07.04.12 00:09

Re: c# помогите с программой

Sash'ok, да, но выделенная вкладка и есть родитель кнопки)))
просто последний вариант лучше, так как в нем пофиг на чем у тебя стоят эти кнопка и текстбокс, и не важно имя "tabControl1". То есть если ты теперь кнопку и текстбокс вставишь в групбокс, то все так же будет работать. Получается более самостоятельная и абстрактная структура.

Offline

#11  07.04.12 00:11

Re: c# помогите с программой

Fire Stream, ага, понял. спасибо большое!

Offline

Программирование и БД » c# помогите с программой 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.074 сек.
Выполнено 14 запросов.