当然,设计师很容易使用。但是,如果有足够的控制,使用设计师会很痛。我正在尝试创建一个数独表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);
}
}
到目前为止,它运作正常。结果如下:
我的问题是,我的SudokuTable类不能像普通用户控件那样运行。普通用户控制的意思就像我通过Project创建用户控件一样 - &gt;添加类 - &gt;用户控制。我的班级不能出现在工具箱中。
无论如何使用for循环创建用户控件组件并使其行为像普通用户控件一样。所以我可以将我创建的控件视为另一个控件(比如用设计器将它添加到主窗体中)?
答案 0 :(得分:2)
在我看来,您应该创建新的用户控件并将所有这些逻辑封装在其中。然后构建解决方案,UserControl应出现在您的工具箱中。