さて、私はあなたがスポーツのために行っていたものを達成したと思います。私はWinFormsよりもWPFをよく知っていますが、これが私が自分で「独学」した私の解決策です。
ソリューションでこれを実行しても問題はないと想定します。
まず、ユーザーコントロールを作成します。WinFormプロジェクトを右クリック>[追加]>[ユーザーコントロール]を実行しました。これは、行を構成するコンテンツを追加する場所です。したがって、次のようになります。ユーザーコントロールにRowContentという名前を付けました。

あなたの名前があなたのコントロールであることを確認してください。そのため、チェックボックスには、stprIndex_chkBox、enable_chkBoxなどの名前を付けました。
次に、を使用して各コントロールに必要な機能を実装する必要があります。だから、あなたはあなたのstprIndex_chkBox.Text
、そしてenable_chkBox.Checked
初心者のためのの値を変えたいと思うでしょう。また、numericUpDownsにアクセスする必要がValue
あります。そのため、RowContent.csで、フォームから必要なデータに応じてゲッターとセッターを追加しました。したがって、ここにアクセサーのスニペットがあります(さらに追加することを忘れないでください):
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という名前を付けました。ユーザーコントロールをtrueに設定AutoSize
し、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で使用するときに、このユーザーコントロールを「カスタマイズ」する方法を想像していただければ幸いです。この同じファイルに、他のユーザーコントロールと同じように、実行したい内容に応じて、ゲッター/セッター/関数をさらに追加する必要があります。などAddAdditionalRow(RowContext rc)
など。私は実際にだまして、これを最終的に速くするためにtableLayoutPanel
変更しました。public
最後に、カスタムオブジェクトを保持するContentCollectionができたので、それをフォームに追加する必要があります。
フォームに移動し、ツールボックスを開いて一番上までスクロールすると、フォームが表示されます。メインフォームとvio'laにドラッグアンドドロップします。これで、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++;
}
}
}

私はこれがそこにある最高のデザインであるとは主張していません...そうではないので、しかしそれはそのようなことをする方法を示しています。ご不明な点がございましたら、お気軽にお問い合わせください。