Добавить и удалить UserControl динамически - PullRequest
1 голос
/ 24 марта 2009

У меня есть UserControl, который содержит контроль над графиком инфраструктуры. При щелчке правой кнопкой мыши подузла TreeView у меня есть контекстное меню «Создать график». Это создаст новый график. Это то, что я собираюсь сделать.

У меня путаница в том, какой макет использовать. Будь то FlowLayoutPanel или TableLayoutPanel или что-нибудь еще. Если добавляется только один граф -> граф должен занимать полную форму. Если добавлены два графика -> два графика должны разделить пространство и т. Д. Это только в формате один за другим. т.е. первый график сверху, второй снизу к первому .. так далее.

Если UserControl изменяется вручную, это не должно влиять на размер, в котором мы отображаемся.

Это WinForm. В настоящее время я использую FlowLayoutPanel, я создал панель с постоянным размером и добавил UserControl с DockStyle.Fill. Затем я добавил панель в панель FlowLayout.

 GraphUserControl usr = new GraphUserControl();
 usr.Dock = DockStyle.Fill;

 Panel pnl = new Panel();

 pnl.Controls.Add(usr);

 flowLayoutpnl.Controls.Add(pnl);

Каков наилучший подход для этого?

1 Ответ

5 голосов
/ 24 марта 2009

TableLayoutPanel - это, вероятно, ваш лучший выбор, поскольку для высоты строк можно задать процентное значение.

private void AddControl(Control ctl)
{
    tableLayoutPnl.RowCount += 1;
    tableLayoutPnl.RowStyles.Add(
        new RowStyle(SizeType.Percent, 100F / tableLayoutPnl.RowCount));
    ctl.Dock = DockStyle.Fill;
    tableLayoutPnl.Controls.Add(ctl, 0, tableLayoutPnl.RowCount - 1);
    foreach (RowStyle rs in tableLayoutPnl.RowStyles)
    {
        rs.Height = 100F / tableLayoutPnl.RowCount;
    }
}

Затем вы можете назвать это следующим образом:

GraphUserControl usr = new GraphUserControl();
AddControl(usr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...