0

如何系统地排列gui元素?(尤其是配置控制,不是硬编码)。

我的窗口窗体的外观示例:

PanelName1

FirstName ______
LastName _______
Addresss _______
....etc

我希望能够以随机顺序排列所有可用的 gui 元素(名字、姓氏、地址),或者可能不必知道它们的名字(只知道我在该窗口表单中有 10 个字段)?我能做些什么来实现这一目标?

从我到目前为止的尝试来看,似乎很混乱,而且没有那么灵活。

我可以生成一个默认位置列表(例如数组,它将具有第一个字段、第二个字段的默认 Y 位置......等)。我可以遍历表单上的所有文本框/标签(尤其是可见的)并根据我可以生成的排列控制数组应用这些坐标吗?

排列数组可能包含类似这样的[2, 8, 9, 1, 3, 5, 4, 7, 0... etc]含义:

第一个字段分配第二个字段的默认 Y 位置

第二个字段分配第 8 个字段的默认 Y 位置.. 等等

4

1 回答 1

0

我们可能会建议创建一个用户控件。用户控件将具有诸如 AddBox(TextBox textBox) 或 AddBox(string label, TextBox textBox) 之类的方法。

然后,您将在执行期间使用集合添加控件时跟踪它们。

你可以做一个字典,这样你就可以按你给它的标签拉文本框。

尝试这样的事情。这是快速构建的,所以它只是为了让你开始。您需要实施错误检查和正确的收集处理。

    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;
        }
    }
}
于 2013-10-09T08:32:38.270 回答