投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/8/10 14:25:09
まず、「やりたいこと」は何でしょうか?

「~の順で表示されます。」とは書かれているのですが、当初の質問には
「どうなって欲しい」のかという点について記されていないように見受けられました。


そもそもあのコードは、Console への出力結果なら "tag:" と出力されるはずですし、
txttorikomi には空白区切りで出力されるべきコードであったはずです。
しかしながら実際の例示ではそのいずれでも無いため、状況を説明しきれていません。

また、chkitem が何であるのか、どういう意図であったのかという説明も放棄されたままです。


> チェックボックスの表示順番は、上からチェックされた順番になりませんか?
…ということで、そもそもの質問の意味を当方が読み取り切れていないのですが、
この発言は、Controls から列挙される順を問われているということでしょうか?

だとしたら先に述べた通り「登録順」に列挙される仕様です。
これは、画面に貼り付けた順ではありません。
また、「画面上のコントロールの位置(座標)」や
「ユーザーがチェックボックスを操作した順」とも無関係です。

たとえば、デザイン時の割り当てが下記のようになっていた場合、5,4,3,2,1 の順で列挙されます。

this.groupBox1.Controls.Add(this.checkBox5);
this.groupBox1.Controls.Add(this.checkBox4);
this.groupBox1.Controls.Add(this.checkBox3);
this.groupBox1.Controls.Add(this.checkBox2);
this.groupBox1.Controls.Add(this.checkBox1);


この時、デザイン画面で checkBox3 を右クリックして [最前面へ移動] を選択すると、
checkBox3 が最初に Add されるようになり、列挙時も最初に現れます。

後から追加された物(重ね合わせた時に、手前側に配置されるもの)が最初に列挙され、
先に追加された物(重ね合わせた時に、奥面側に配置されるもの)が後に列挙されますが、
最前面/最背面への移動を繰り返すことで、この順序を調整できます。


数が多くて、最前面/最背面だけでは面倒な場合には、
[表示]-[その他のウィンドウ]-[ドキュメント アウトライン]から
選択して、上部の[↑][↓]アイコンで並び替えることで、
Controls の列挙順を揃えられます。


もしも、Controls からの列挙順に関わらず【並び替えて表示したい】という意図であるのなら、
どの順で揃えたいのかを明確にしてみてください。
たとえば、
 🔹画面上のコントロールの位置(座標)
 🔹{Tab} キー押下時の並び順(TabIndex)
 🔹Name プロパティの昇順
 🔹Text プロパティの昇順
 🔹Tag プロパティの昇順
 🔹都道府県コード順
などなど、色々なパターンが考えられますよね。
https://nlftp.mlit.go.jp/ksj/gml/codelist/PrefCd.html


あるいは、【実際にチェックした順序】に並べたいのであれば、Controls から列挙することは
意味がありません。その場合は、列挙順を保持するためのコレクションを設けるべきです。

private List<CheckBox> prefectures = new List<CheckBox>();
private List<CheckBox> checkBoxes;
public Form1()
{
    InitializeComponent();
    checkBoxes = groupBox1.Controls.OfType<CheckBox>().ToList();
    checkBoxes.ForEach(c => c.CheckedChanged += (sende, e) =>
    {
        prefectures.Remove(c);
        if (c.Checked) { prefectures.Add(c); }
    });
}
private void button1_Click(object sender, EventArgs e)
{
    txttorikomi.Text = string.Join(" ", prefectures.Select(c => c.Text));
}