Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
C# チェックボックスの表示順番について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30786#CommentId85405
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2022/8/10 11:35:21
> foreach (Control item in groupBox1.Controls)
登録順に列挙されていませんか?
デザイン時に用意したコントロールならば、Form1.Designer.cs 内で、
~.Controls.Add(…);
あるいは
~.Controls.AddRange(…);
と記述されている箇所がありますよね。
> if (item.GetType().Equals(typeof(CheckBox)))
『foreach (var chk in groupBox1.Controls.OfType<CheckBox>())』にすれば、
if 文での絞り込みが不要になりますよ。
> CheckBox obj = item as CheckBox;
> if (obj.Checked)
これは誤り。item が CheckBox であることが確実である場合には
CheckBox obj = (CheckBox)item;
if (obj.Checked)
と書くべきです。
もしも as を使うのであれば、それが CheckBox とは限らない場面のことなので、
CheckBox obj = item as CheckBox;
if (obj != null && obj.Checked)
あるいは
CheckBox obj = item as CheckBox;
if (obj?.Checked ?? false)
と書かれるべきかと。
そして、もしも Checked 状態であるものだけを列挙したいのであれば、
『foreach (var chk in groupBox1.Controls.OfType<CheckBox>().Where(c => c.Checked))』
にすれば、そもそも if 文が不要になります。
> // 選択されているなら表示させる。
> chkitem.Add(obj.Tag.ToString() + " ");
> Console.WriteLine("tag: " + obj.Tag.ToString() + " ");
> chkitem.Sort();
> foreach (var i in chkitem) { … }
> chkitem.Clear();
ここの chkitem.Sort(); って意味ありますか?
「1 件 Add しては Clear する処理」を毎回繰り返しているので、
chkitem 内に複数件のデータが存在することはありえないように見えます。