好的,我认为我已经实现了您对 Sport 的期望,我比 WinForms 更了解 WPF,但这是我自己“自学”的解决方案。
我将假设在您的解决方案中执行此操作不会有任何问题。
首先创建一个用户控件。我右键单击我的 WinForm 项目 > 添加 > 用户控件。这是您要添加构成行的内容的地方。所以它应该看起来像这样,我将我的用户控件命名为 RowContent:
确保你有你的名字你的控件。所以对于复选框,我将其命名为 stprIndex_chkBox、enable_chkBox 等。
现在您需要为使用的每个控件实现所需的功能。所以,你会想要改变你的stprIndex_chkBox.Text
, 和enable_chkBox.Checked
for starters 的值。您还将想要访问Value
您的 numericUpDowns。因此,在 RowContent.cs 中,我根据表单中需要的数据添加了 getter 和 setter。所以这里是访问器的一个片段(记住你会想要添加更多):
public partial class RowContent : UserControl
{
public RowContent()
{
InitializeComponent();
}
public string SetChkBox1Text
{
set { stprIndex_chkBox.Text = value; }
}
public bool IsEnabledChecked
{
get { return enable_chkBox.Checked; }
}
}
现在您看到了,这些将允许您访问 RowContent 类之外的变量。让我们继续讨论 TablePanelLayout 控件。
我以与创建 RowContent 相同的方式创建了一个附加用户控件,但这次我将其命名为 ContentCollection。我将AutoSize
用户控件设置为 true 并将 TableLayoutPanel (名为 tableLayoutPanel1 )放到它上面。
为了节省时间,我将所有控件动态添加到行中,如下所示:
public partial class ContentCollection : UserControl
{
public ContentCollection()
{
InitializeComponent();
RowContent one = new RowContent();
RowContent two = new RowContent();
RowContent three = new RowContent();
RowContent four = new RowContent();
RowContent five = new RowContent();
RowContent six = new RowContent();
tableLayoutPanel1.Controls.Add(one);
tableLayoutPanel1.Controls.Add(two);
tableLayoutPanel1.Controls.Add(three);
tableLayoutPanel1.Controls.Add(four);
tableLayoutPanel1.Controls.Add(five);
tableLayoutPanel1.Controls.Add(six);
tableLayoutPanel1.SetRow(one, 0);
tableLayoutPanel1.SetRow(two, 1);
tableLayoutPanel1.SetRow(three, 2);
tableLayoutPanel1.SetRow(four, 3);
tableLayoutPanel1.SetRow(five, 4);
tableLayoutPanel1.SetRow(six, 5);
}
}
这给了我:
现在在这里你可以看到我们正在动态添加这些东西。我希望您在 WinForm 中使用此用户控件时,可以想象如何“自定义”它。在同一个文件中,您将需要添加更多 Getters/Setters/functions,具体取决于您想要执行的操作,就像其他用户控件一样;所以,AddAdditionalRow(RowContext rc)
等等。我实际上作弊并将其更改为tableLayoutPanel
最终public
使其更快。
所以最后,你有你的 ContentCollection 来保存你的自定义对象,现在你需要将它添加到你的表单中。
转到您的表格,打开您的工具箱并滚动到顶部以查看您的表格!将其拖放到您的主窗体和中提琴上。现在,要遍历 RowContent,这相当容易。由于我将用户控件拖放到窗体上,因此我能够将其命名为 (userControl12) 并立即开始访问控件。查看我如何将复选标记添加到每个其他复选框并动态更改步进索引:
public partial class Form1 : Form
{
static int i = 0;
public Form1()
{
InitializeComponent();
foreach (RowContent ctrl in userControl11.tableLayoutPanel1.Controls)
{
ctrl.SetChkBox1Text = i.ToString();
if (!ctrl.IsEnabledChecked && i % 2 == 0)
ctrl.IsEnabledChecked = true;
i++;
}
foreach (RowContent ctrl in userControl12.tableLayoutPanel1.Controls)
{
ctrl.SetChkBox1Text = i.ToString();
i++;
}
}
}
我并不是说这是最好的设计......因为它不是,但它说明了如何做这样的事情。如果您有任何问题,请告诉我。