(C#)使用for循环创建用户控件组件并将这些组件放入列表中

时间:2014-12-20 07:21:02

标签: c# user-controls components

当然,设计师很容易使用。但是,如果有足够的控制,使用设计师会很痛。我正在尝试创建一个数独表9 x 9,并需要81个文本框完全相同的大小。我认为,使用循环会更容易。

到目前为止我的代码是这样的:

class SudokuTable
{
    private List<List<TextBox>> table;

    public SudokuTable()
    {
        initializeComponent();
    }

    private void initializeComponent()
    {
        List<List<TextBox>> newTable = new List<List<TextBox>>();

        int sz = 30;
        int gap = 3;
        int x = gap, y = gap;

        for (int row = 0; row < 9; row++)
        {

            x = gap;

            List<TextBox> TextBoxes = new List<TextBox>();
            for (int col = 0; col < 9; col++)
            {
                System.Drawing.Size size = new System.Drawing.Size(sz, sz);
                System.Drawing.Point location = new System.Drawing.Point(x, y);
                System.Drawing.Font font = new System.Drawing.Font("Tahoma", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

                TextBox box = new TextBox();
                box.Location = location;
                box.Size = size;
                box.TextAlign = HorizontalAlignment.Center;
                box.Font = font;
                box.MaxLength = 1;

                TextBoxes.Add(box);

                x += ((col + 1) % 3 == 0 && (col + 1) < 9) ? sz + gap : sz;
            }
            newTable.Add(TextBoxes);

            y += ((row + 1) % 3 == 0 && (row + 1) < 9) ? sz + gap : sz;
        }
        table = newTable;
    }

    public void addSudoku(System.Windows.Forms.Form form)
    {
        form.SuspendLayout();
        foreach (List<TextBox> row in table)
        {
            foreach (TextBox col in row)
            {
                form.Controls.Add(col);
            }
        }
        form.PerformLayout();
    }
}

使用以下代码在主窗体中添加该表:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
        SudokuTable st = new SudokuTable();
        this.ClientSize = st.getSize();
        st.addSudoku(this);
    }
}

到目前为止,它运作正常。结果如下:

enter image description here

我的问题是,我的SudokuTable类不能像普通用户控件那样运行。普通用户控制的意思就像我通过Project创建用户控件一样 - &gt;添加类 - &gt;用户控制。我的班级不能出现在工具箱中。

无论如何使用for循环创建用户控件组件并使其行为像普通用户控件一样。所以我可以将我创建的控件视为另一个控件(比如用设计器将它添加到主窗体中)?

1 个答案:

答案 0 :(得分:2)

在我看来,您应该创建新的用户控件并将所有这些逻辑封装在其中。然后构建解决方案,UserControl应出现在您的工具箱中。