如何在紧凑框架 3.5 中使用 C# 排列 gui 元素(文本框、标签等)
本文关键字:元素 gui 排列 文本 标签 框架 | 更新日期: 2023-09-27 18:31:51
如何系统地排列gui元素?(特别是使用配置控制,而不是硬编码)。
我的窗口窗体的外观示例:
PanelName1
FirstName ______
LastName _______
Addresss _______
....etc
我希望能够以随机顺序排列所有可用的 gui 元素(名字、姓氏、地址),或者可能不必知道它们的名字(只知道我在那个窗口表单中有 10 个字段)?我能做些什么来实现这一目标?
从我到目前为止的尝试来看,似乎非常混乱,而且不那么灵活。
我可以生成默认位置的列表(例如,数组将具有第一个字段、第二个字段的默认 Y 位置等)。我可以遍历表单上的所有文本框/标签(尤其是可见的文本框/标签)并根据我可以生成的排列控制数组应用这些坐标吗?
排列数组可能包含类似以下内容[2, 8, 9, 1, 3, 5, 4, 7, 0... etc]
含义:
第一个字段分配第二个字段的默认 Y 位置
第2 个文件分配第 8 个字段的默认 Y 位置.. 等
我可能会建议创建一个用户控件。 用户控件将具有诸如AddBox(文本框文本框)或AddBox(字符串标签,文本框文本框)之类的方法。
然后,在执行期间使用集合添加控件时,您将跟踪控件。
您可以制作字典,以便可以通过您指定的标签拉动文本框。
尝试这样的事情。 这是快速构建的,因此它只是为了帮助您入门。 您需要实现错误检查和正确的集合处理。
public partial class CustomForm : UserControl
{
public CustomForm()
{
InitializeComponent();
flowLayoutPanel = new FlowLayoutPanel();
this.Controls.Add(flowLayoutPanel);
flowLayoutPanel.Dock = DockStyle.Fill;
flowLayoutPanel.FlowDirection = FlowDirection.TopDown;
Forms = new Dictionary<string, TextBox>();
}
private FlowLayoutPanel flowLayoutPanel;
private Dictionary<string, TextBox> Forms;
public void AddForm(string label, TextBox textBox)
{
Forms.Add(label, textBox);
Panel panel = new Panel();
FlowLayoutPanel flp = new FlowLayoutPanel();
flp.Dock = DockStyle.Fill;
flp.Controls.Add(new Label {Text = label, AutoSize = true});
flp.Controls.Add(textBox);
flp.AutoSize = true;
panel.Controls.Add(flp);
panel.AutoSize = true;
flowLayoutPanel.Controls.Add(panel);
}
public string GetTextBoxValue(string label)
{
return Forms.ContainsKey(label) ? Forms[label].Text : "";
}
public void SetTextBoxValue(string label, string value)
{
if (Forms.ContainsKey(label))
{
Forms[label].Text = value;
}
}
}