[英]Adding GUI controls dynamically
我在添加面板、可滾動(通過另一個面板)組框中的兩個按鈕時遇到問題。 我不擅長在沒有設計師的情況下添加 UI 元素,因此自然而然地,我的界面雜亂無章,無法按預期方式工作。
這是代碼:
private void client_DownloadFileCompleted(object sender,
System.ComponentModel.AsyncCompletedEventArgs e)
{
LinksParser<Track>.Results.Foreach<Uri, Track[]>(
new Action<Uri, Track[]>( // this is an extension method
delegate(Uri key, Track[] value)
{
GroupBox GB = new GroupBox()
{
Text = key.AbsoluteUri,
Size = new Size(550, value.Length * 30),
TabIndex = 0,
TabStop = false
};
flwLayout.Controls.Add(GB); // flwLayout already created by designer
Panel GB_panel = new Panel()
{
Size = GB.Size,
TabIndex = 0,
TabStop = false,
Location = GB.Location,
AutoScroll = false
};
VScrollBar VS = new VScrollBar() { Dock = DockStyle.Right };
VS.Scroll += (_sender, _e) => GB_panel.VerticalScroll.Value = VS.Value;
if (LinksParser<Track>.Results[key] == null)
{
GB.Controls.Add(new Label() { Text = "No tracks were found" });
}
else
{
for (int index = 0; index < 1; ++index)
{
Track track = value[index];
Panel panel = new Panel()
{
BorderStyle = BorderStyle.FixedSingle,
Location = new Point(GB.Bounds.X + 6,
GB.Bounds.Y + 15 + (40 * index)),
Size = new Size(525, 40),
TabIndex = 0,
TabStop = false
};
Label lblTrack;
Button playOnline;
lblTrack = new Label()
{
Text = track.Name,
AutoSize = true,
TabIndex = 0,
Location = new Point(panel.Bounds.X + 6, panel.Bounds.Y)
};
playOnline = new Button()
{
Text = "Play Online",
TabIndex = 2,
Size = new Size(75, 23),
UseVisualStyleBackColor = true,
Location = new Point(
TextRenderer.MeasureText(lblTrack.Text,
lblTrack.Font).Width +
lblTrack.Bounds.X + 5, panel.Bounds.Y - 5)
};
playOnline.Click += delegate
{
track.PlayOnline();
};
panel.Controls.Add(lblTrack);
logger.Trace("Attached lblTrack at {0}", lblTrack.Location);
panel.Controls.Add(playOnline);
logger.Trace("Attached playOnline at {0}", playOnline.Location);
GB_panel.Controls.Add(panel);
logger.Trace("Attached panel at {0}", panel.Location);
}
}
GB_panel.Controls.Add(VS);
GB.Controls.Add(GB_panel);
}));
}
這是我得到的:
這是我想要的:
感謝Idle_Mind ,他關於使用 UserControls 的建議(直到他指出我才聽說過)幫助我將問題分解為更小的部分,並發現面板的大小必須吸收其控件,因此根據答案在那個問題中,我改用了FlowLayoutPanel ,並且所有控件都正確顯示。
如果有人感興趣,這是最終形式:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.