如何在紧凑框架 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 位置.. 等

如何在紧凑框架 3.5 中使用 C# 排列 gui 元素(文本框、标签等)

我可能会建议创建一个用户控件。 用户控件将具有诸如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;
        }
    }
}