我正在创建一个视图,类似于视频制作工具中的时间轴。
我正在使用FlowLayoutPanel
,它将包含所有其他垂直类型的“音轨”。
每个“轨道”都是一个包含按钮的FlowLayoutPanel
。 FlowLayoutPanel
是整个Form
的一个。
FlowLayoutPanels包含我从代码动态生成的按钮。
现在我的代码可以在FlowLayoutPanel
内一个一个地生成FlowLayoutPanels。
但是,如何使用在主FlowLayoutPanel
内部添加的生成的FlowLayout面板和控件进行工作(调整大小,删除,更改内容)?
答案 0 :(得分:0)
我已经根据您的观点创建了一个示例。希望这可以帮助您清除它。您可以一一添加所需的东西。
private Dictionary<string, FlowLayoutPanel> tracks = new Dictionary<string, FlowLayoutPanel>();
public TestFlowLayout()
{
InitializeComponent();
this.AutoScroll = true;
// for test
for (int i = 1; i <= 5; i++)
{
AddTrack("Track" + i.ToString());
for (int j = 1; j <= 10; j++)
{
AddButton("Track" + i.ToString(), "Button" + j.ToString());
}
}
}
public void AddTrack(string name)
{
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.AutoSize = true;
panel.Dock = DockStyle.Top;
this.Controls.Add(panel);
tracks.Add(name, panel);
}
public void AddButton(string name, string caption)
{
Button button = new Button();
button.Text = caption;
tracks[name].Controls.Add(button);
}
如果您需要按组跟踪,则可以稍稍更改代码
public void AddTrack(string name)
{
GroupBox group = new GroupBox();
group.Text = name;
group.Dock = DockStyle.Top;
group.AutoSize = false;
this.Controls.Add(group);
group.BringToFront();
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.SizeChanged += Panel_SizeChanged;
panel.AutoSize = true;
panel.Dock = DockStyle.Top;
group.Controls.Add(panel);
tracks.Add(name, panel);
}
private void Panel_SizeChanged(object sender, EventArgs e)
{
FlowLayoutPanel panel = (FlowLayoutPanel)sender;
panel.Parent.Height = panel.Size.Height+20;
}