2009-03-12 4 views
3

У меня есть страница, где мне нужно изменить переменные, которые являются строками с парами значений и меток. Я использовал объект datagrid, но его недостаточно для того, что требуется (или, в конце концов, не будет).C# Winforms - Добавление форм в элемент управления FlowPanel

Таким образом, у меня есть форма, которая является текстовой меткой и текстовым полем, и потоковой панелью, и я пытаюсь программно добавить экземпляры этой формы для каждой переменной в поток, и Im ничего не получает. Googling для решения привлекает множество видеоуроков, включающих нажатие на кнопки в дизайнере пользовательского интерфейса и отбрасывание их на панели потоков, однако я хочу сделать это программно.

Что такое «правильный» или «стандартный» способ сделать это.

+0

Вы имеете в виду "форму"? или вы имеете в виду «контроль»? –

+0

Я имею в виду форму без контроля –

ответ

2

Данные (попарно) звучат так, будто они могут быть лучше с TableLayoutPanel, но теория такая же; просто позвоните .Controls.Add(...) и он должен работать:

FlowLayoutPanel panel = new FlowLayoutPanel(); 
    Form form = new Form(); 
    panel.Dock = DockStyle.Fill; 
    form.Controls.Add(panel); 

    for (int i = 0; i < 100; i++) 
    { 
     panel.Controls.Add(new TextBox()); 
    } 

    Application.Run(form); 

или с TableLayoutPanel:

TableLayoutPanel panel = new TableLayoutPanel(); 
    Form form = new Form(); 
    panel.Dock = DockStyle.Fill; 
    panel.ColumnCount = 2; 
    form.Controls.Add(panel); 

    for (int i = 0; i < 100; i++) 
    { 
     panel.Controls.Add(new Label { Text = "label " + i }); 
     panel.Controls.Add(new TextBox { Text = "text " + i }); 
    } 

Также - Интересно, если PropertyGrid будет соответствовать вашим потребностям лучше? Это позволит обрабатывать все значения «get value», «show value», «parse value», «store value» и может быть подключено к вещам типа ICustomTypeDescriptor, чтобы позволить динамические свойства.

2

Чтобы добавить экземпляры формы в FlowLayout панели, я следующее:

Form1 f1 = new Form1(); 
f1.TopLevel = false; 
f1.Visible = true; 
flowLayoutPanel1.Controls.add(f1); 

Кажется, работает нормально в моем тестовом коде.

+0

Исходный вопрос не был четко сформулирован, но эти решения исправили мою проблему: моя форма была добавлена ​​в другой элемент управления, но не появлялась! Visible = true для меня. –