Доброго времени суток.
Передо мной стоит задача следующего типа. Есть у меня пустая форма (с кнопкой). мы получаем массив строк(из 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;
}
А>>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;
}
Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток. А>Передо мной стоит задача следующего типа. Есть у меня пустая форма (с кнопкой). мы получаем массив строк(из 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.
Здравствуйте, 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.
Если вы полохо разобрались или не понимаете старайтесь не давать советов.
А>Слушайте. Когда я в школе учился кодингу, кто-то соски еще сосал.
Не исключено.
А>Где я ступил: уже понял. Но когда человек в 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;
}
Здравствуйте, <Аноним>, Вы писали:
А>Пробовал следующим образом:
Попробуй предыдущим:
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>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.