Я создал Form
, который я собираюсь использовать в качестве всплывающего окна. Мне нужно, чтобы это всплывающее окно содержало заголовок, индикатор выполнения и текст в процентах.
Поэтому для этой цели я решил использовать TableLayoutPanel
в качестве элемента управления в моей форме.
Существует код, который создает все эти представления динамически. Для проверки сейчас я использую lable вместо реальной реализации прогрессбара.
public partial class TestFormDeleteIt : Form
{
public TestFormDeleteIt()
{
InitializeComponent();
AutoSize = true;
var flp = CreateTableLayoutPanel();
Controls.Add(flp);
}
private Control CreateTableLayoutPanel()
{
// TableLayoutPanel Initialization
var panel = new TableLayoutPanel
{
ColumnCount = 2,
RowCount = 2,
Dock = DockStyle.Fill
};
//Adjust column size in percentage
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 70F));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));
//Adjust row size in percentage
panel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
panel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
//Fill content
panel.Controls.Add(
new Label()
{
Text = "state",
Dock = DockStyle.Fill
},
/*column*/ 0, /*row*/ 0);
panel.Controls.Add(
new Label()
{
Text = "ProgressBar",
Dock = DockStyle.Fill
},
/*column*/ 0, /*row*/ 1);
panel.Controls.Add(
new Label()
{
Text = "100%",
Dock = DockStyle.Fill
},
/*column*/ 1, /*row*/ 1);
return panel;
}
}
Итак, как вы можете видеть, я создаю TableLayoutPanel
, разделенную на строки и столбцы, и для каждого представления, которое он содержит, я устанавливаю Dock = DockStyle.Fill
, потому что я не хочу использовать размер фиксированного кода.
Что я ожидаю, так это то, что каждое представление заполняет вашу ячейку в таблице разметки, а сама форма root будет корректировать ваш размер с помощью этого значения, содержащего все представления.
Но на самом деле я получаю такой результат:
Root форма не переносит содержимое, похоже, что она имеет фиксированный размер, и в таблице размечаются попытки заполнить этот root размер формы, но я установил AutoSize = true;
, но это не влияет ...
Что я делаю не так?
РЕДАКТИРОВАТЬ
Спасибо, @ Джими теперь выглядит намного лучше
Я также добавил
MinimumSize = new System.Drawing.Size(600, Height)
в TLP, но вопрос - как вы можете видеть, что каждый ряд имеет как минимальную высоту. И это похоже на пространство между каждым рядом. Почему это происходит?
EDIT2
Я хотел бы заметить, что если я изменю это
panel.Controls.Add(
new Label()
{
Text = "state",
Dock = DockStyle.Fill
},
/*column*/ 0, /*row*/ 0);
на это
var label1 = new Label()
{
Text = "state",
Dock = DockStyle.Fill
};
panel.SetRow(label1, 0);
panel.SetColumn(label1, 0);
это не работает ... Что я делаю не так?
и вот мой код сейчас
public partial class TestFormDeleteIt : Form
{
public TestFormDeleteIt()
{
InitializeComponent();
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
MinimumSize = new System.Drawing.Size(200, 0);
var flp = CreateTableLayoutPanel();
Controls.Add(flp);
}
private TableLayoutPanel CreateTableLayoutPanel()
{
// TableLayoutPanel Initialization
var panel = new TableLayoutPanel
{
ColumnCount = 2,
RowCount = 2,
Dock = DockStyle.Fill
};
//Adjust column size in percentage
panel.ColumnStyles.Clear();
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 90F));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 10F));
//Adjust row size in percentage
panel.RowStyles.Clear();
panel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
panel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
//Fill content
panel.Controls.Add(
new Label()
{
Text = "state",
Dock = DockStyle.Fill
},
/*column*/ 0, /*row*/ 0);
panel.Controls.Add(
CreateProgressBar(),
/*column*/ 0, /*row*/ 1);
panel.Controls.Add(
new Label()
{
Text = "100%",
Dock = DockStyle.Fill
},
/*column*/ 1, /*row*/ 1);
panel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panel.AutoSize = true;
return panel;
}
private Control CreateProgressBar() => new ProgressBar()
{
Visible = true,
Dock = DockStyle.Top
};
}
Проблема в том, что даже если я установлю stati c ширина как 200 -> MinimumSize = new System.Drawing.Size(200, 0)
в моей форме, когда я открываю ее, я вижу, что она занимает примерно 1000 ...
Почему это случилось?