2014-04-20 3 views
0

У меня есть тест, и в Form1_Load Я заполняю этот тест вопросами и ответами. Но это показывает только первый вопрос. Что случилось?Зачем заполняется только первый групповой ящик?

int loc = 20; 
for (int i = 0; i < 5; i++) 
{ 
    GroupBox gb = new GroupBox(); 
    gb.Size = new Size(500, 200); 
    gb.Location = new Point(40, loc); 
    gb.BackColor = System.Drawing.Color.Aquamarine; 

    Label q_text = new Label(); // текст питання 
    q_text.Text = "Питання" + (i + 1); 
    q_text.Font = new Font("Aria", 10, FontStyle.Bold); 
    q_text.Location = new Point(gb.Location.X, gb.Location.Y); 
    gb.Controls.Add(q_text); 
    int iter = q_text.Location.Y + 30; 

    foreach (string key in questions[i].answers.Keys) 
    { 
     RadioButton rb = new RadioButton(); 
     rb.Text = key; 
     rb.Size = new Size(120, 25); 
     rb.Location = new Point(q_text.Location.X + 10, iter); 
     iter += 30; 
     gb.Controls.Add(rb); 
    } 

    this.Controls.Add(gb); 
    loc += 300; 
} 
+0

Я не запускал этот тест для проверки, но единственное, что дает мне паузу, - это тестирование местоположения 'q_text', которое основано на местоположении' gb', но gb не был добавлен в контейнер еще. Вы прошли через код, чтобы убедиться, что все координаты имеют смысл? Ничто не выделяется как «неправильный» в вашем коде. –

+0

Одна вещь, которая кажется смешной, - это то, что q_text выглядит неправильно. Если вы хотите в левом верхнем углу, это местоположение должно быть «0,0» относительно контейнера. –

+0

gb содержит q_text и rb. Я не понимаю, почему это неправильно. – user3528837

ответ

0

После изучения кода, есть несколько возможных проблем, вытекающих из q_text

int loc = 20; 
for (int i = 0; i < 5; i++) 
{ 
    GroupBox gb = new GroupBox(); 
    gb.Size = new Size(500, 200); 
    gb.Location = new Point(40, loc); 
    gb.BackColor = System.Drawing.Color.Aquamarine; 

    Label q_text = new Label(); // текст питання 
    q_text.Text = "Питання" + (i + 1); 
    q_text.Font = new Font("Aria", 10, FontStyle.Bold); 
    q_text.Location = new Point(0, 0); 
    gb.Controls.Add(q_text); 
    int iter = q_text.Location.Y + 30; 

    foreach (string key in questions[i].answers.Keys) 
    { 
     RadioButton rb = new RadioButton(); 
     rb.Text = key; 
     rb.Size = new Size(120, 25); 
     rb.Location = new Point(q_text.Location.X + 10, iter); 
     iter += 30; 
     gb.Controls.Add(rb); 
    } 

    this.Controls.Add(gb); 
    loc += 300; 
} 

Единственные изменения здесь q_text получение набора в 0,0.

дополнительное изменение, которое я сделал бы, однако, для регулировки по высоте высота q_text «s:

int iter = q_text.Location.Y + q_text_Size.Height + 5; 

Только в случае, если метка была длинной и обернутый текст.

Смежные вопросы