Динамическое добавление контролов
От: Аноним  
Дата: 18.07.07 18:51
Оценка:
Доброго времени суток.
Передо мной стоит задача следующего типа. Есть у меня пустая форма (с кнопкой). мы получаем массив строк(из XML) и для каждого элемента массива должны отрисовать контрол, типа TextBox.
Как сделать это.
Пробовал следующим образом:

for (int i = 1; i <= xp.getRootElement(textBox1.Text).Length; i++) {
    int o = 1;
    int y = 30;
        TextBox ab = new TextBox();
    this.Controls.Add(ab);
    ab.Location = new System.Drawing.Point(10, y);
    ab.Name = xp.getRootElement(textBox1.Text)[o];
    ab.Text = xp.getRootElement(textBox1.Text)[o];
    ab.Size = new System.Drawing.Size(360, 20);
    ab.TabIndex = 4;
    o++;
    y+=30;
}

выводит только один TextBox.

Может я чего не понимаю?
Re: Динамическое добавление контролов
От: Igor Trofimov  
Дата: 18.07.07 18:53
Оценка: +2 -1
А>
А>for (int i = 1; i <= xp.getRootElement(textBox1.Text).Length; i++) {
А>    int y = 30;
А>    ...
А>    y+=30;
А>}
А>


Слушайте, сейчас в школе совсем перестали обучать работе с отладчиком?
Re[2]: Динамическое добавление контролов
От: Аноним  
Дата: 19.07.07 03:04
Оценка: 4 (2) -2 :)
Здравствуйте, Igor Trofimov, Вы писали:

А>>
А>>for (int i = 1; i <= xp.getRootElement(textBox1.Text).Length; i++) {
А>>    int y = 30;
А>>    ...
А>>    y+=30;
А>>}
А>>


iT>Слушайте, сейчас в школе совсем перестали обучать работе с отладчиком?


Слушайте. Когда я в школе учился кодингу, кто-то соски еще сосал. Где я ступил: уже понял. Но когда человек в 3 часа ночи сидит и учит новый язык и среду(если можно назвать их новыми), и задолбавшись искать ошибки обращается за помощью к профессионалам, то и надо отвечать соответствующе, а не втаптывать...
Спасибо за подсказки.



int o = 1;

for (int i = 1; i <= xp.getRootElement(textBox1.Text).Length; i++) {
    int y = 30;
       TextBox ab = new TextBox();
    this.Controls.Add(ab);
    ab.Location = new System.Drawing.Point(10, y);
    ab.Name = xp.getRootElement(textBox1.Text)[o];
    ab.Text = xp.getRootElement(textBox1.Text)[o];
    ab.Size = new System.Drawing.Size(360, 20);
    o++;
    y+=30;
}
Re[3]: Динамическое добавление контролов
От: Ravlyk Австралия http://stitcharteasy.com
Дата: 19.07.07 07:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Где я ступил: уже понял.


А>int o = 1;

А>for (int i = 1; i <= xp.getRootElement(textBox1.Text).Length; i++) {
А>    int y = 30;
А>       TextBox ab = new TextBox();
А>    this.Controls.Add(ab);
А>    ab.Location = new System.Drawing.Point(10, y);
А>    ab.Name = xp.getRootElement(textBox1.Text)[o];
А>    ab.Text = xp.getRootElement(textBox1.Text)[o];
А>    ab.Size = new System.Drawing.Size(360, 20);
А>    o++;
А>    y+=30;
А>}


int y = 30;


Это тоже вынести из тела цикла не мешало бы...
Re: Динамическое добавление контролов
От: lambdafunction Удмуртия http://lambdafunction.moikrug.ru/
Дата: 19.07.07 08:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток.

А>Передо мной стоит задача следующего типа. Есть у меня пустая форма (с кнопкой). мы получаем массив строк(из XML) и для каждого элемента массива должны отрисовать контрол, типа TextBox.
А>Как сделать это.
А>Пробовал следующим образом:

А>
А>for (int i = 1; i <= xp.getRootElement(textBox1.Text).Length; i++) {
А>    int o = 1;
А>    int y = 30;
А>        TextBox ab = new TextBox();
А>    this.Controls.Add(ab);
А>    ab.Location = new System.Drawing.Point(10, y);
А>    ab.Name = xp.getRootElement(textBox1.Text)[o];
А>    ab.Text = xp.getRootElement(textBox1.Text)[o];
А>    ab.Size = new System.Drawing.Size(360, 20);
А>    ab.TabIndex = 4;
А>    o++;
А>    y+=30;
А>}
А>

А>выводит только один TextBox.

А>Может я чего не понимаю?


Может быть, конечно, все не так, как мне кажется (и просто обязано быть), но здесь
      TextBox ab = new TextBox();

присутствует один и тот же объект класса. То есть, он каждую итерацию заново удаляется, создается и позиционируется куда надо. Вслепую предположу, что проблема может разрешиться, если код чуть поправить:

int o = 1;
int y = 30;
TextBox[] ab = new TextBox()[xp.getRootElement(textBox1.Text).Length];

for (int i = 0; i < xp.getRootElement(textBox1.Text).Length; i++) {
    this.Controls.Add(ab[i]);
    ab[i].Location = new System.Drawing.Point(10, y);
    ab[i].Name = xp.getRootElement(textBox1.Text)[o];
    ab[i].Text = xp.getRootElement(textBox1.Text)[o];
    ab[i].Size = new System.Drawing.Size(360, 20);
    ab[i].TabIndex = 4;
    ++o;
    y += 30;
}

И еще. Расстояния между текстбоксами в 10px — это ужастик, как мне кажется. Microsoft рекомендует (и не зря) оставлять 7px между текстбоксами высотой по 24px.
--
jabber: lambdafunction@jabber.ru
Re[2]: Динамическое добавление контролов
От: SerkMan  
Дата: 19.07.07 09:23
Оценка:
Здравствуйте, lambdafunction, Вы писали:

L>Может быть, конечно, все не так, как мне кажется (и просто обязано быть), но здесь

L>
L>      TextBox ab = new TextBox();
L>

L>присутствует один и тот же объект класса. То есть, он каждую итерацию заново удаляется, создается и позиционируется куда надо. Вслепую предположу, что проблема может разрешиться, если код чуть поправить:
L>
Нет все было правильно.

L>int o = 1;
L>int y = 30;
L>TextBox[] ab = new TextBox()[xp.getRootElement(textBox1.Text).Length];

L>for (int i = 0; i < xp.getRootElement(textBox1.Text).Length; i++) {
L>    this.Controls.Add(ab[i]);
L>    ab[i].Location = new System.Drawing.Point(10, y);
L>    ab[i].Name = xp.getRootElement(textBox1.Text)[o];
L>    ab[i].Text = xp.getRootElement(textBox1.Text)[o];
L>    ab[i].Size = new System.Drawing.Size(360, 20);
L>    ab[i].TabIndex = 4;
L>    ++o;
L>    y += 30;
L>}
L>

L>И еще. Расстояния между текстбоксами в 10px — это ужастик, как мне кажется. Microsoft рекомендует (и не зря) оставлять 7px между текстбоксами высотой по 24px.

Если вы полохо разобрались или не понимаете старайтесь не давать советов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Динамическое добавление контролов
От: Igor Trofimov  
Дата: 19.07.07 17:39
Оценка:
А>Слушайте. Когда я в школе учился кодингу, кто-то соски еще сосал.

Не исключено.

А>Где я ступил: уже понял. Но когда человек в 3 часа ночи сидит и учит новый язык и среду(если можно назвать их новыми), и задолбавшись искать ошибки обращается за помощью к профессионалам, то и надо отвечать соответствующе, а не втаптывать...


А я вовсе не хотел вас обидеть! Но просто действительно, не понимаю, как можно при вот такой проблеме не пройти один раз этот код в отладчике и сразу увидеть причину, а писать куда-то в форум.

Я смог себе представить только одну причину для этого — человек не умеет пользоваться отладчиком. Хотя в мою бытность этому даже в школе учили.
Re: Динамическое добавление контролов
От: Аноним  
Дата: 20.07.07 05:47
Оценка:
Попробуй использовать массив из TextBox и зачем ты создаешь лишнюю переменную "о",если она дублирует i,должно получиться что то типа:

TextBox[] ab = new TextBox[xp.getRootElement(textBox1.Text).Length];
for (int i = 1; i <= xp.getRootElement(textBox1.Text).Length; i++) {
    int y = 30;
    ab[i] = new TextBox();
    ab[i].Location = new System.Drawing.Point(10, y);
    ab[i].Name = xp.getRootElement(textBox1.Text)[i];
    ab[i].Text = xp.getRootElement(textBox1.Text)[i];
    ab[i].Size = new System.Drawing.Size(360, 20);
    ab[i].TabIndex = 4;
    this.Controls.Add(ab[i]);
    y+=30;
}
Re: Динамическое добавление контролов
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.07.07 05:22
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Пробовал следующим образом:

Попробуй предыдущим:
int y = 30;
foreach(string name in xp.getRootElement(textBox1.Text))
{
  TextBox ab = new TextBox();
  this.Controls.Add(ab);
  ab.Location = new System.Drawing.Point(10, y);
  ab.Name = name;
  ab.Text = name;
  ab.Size = new System.Drawing.Size(360, 20);
  ab.TabIndex = 4;
  y+=30;
}
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.