最近C#の勉強をしなければならなくなって,以前にhtaで書いたソフトウェアをC#+Windows Formで作り直すってやってんだけど,「コードで複数のラジオボタンの一つをチェック状態にする」ってのがもう全然判らなくて2日ほど嵌ってしまった。
いやまあラジオボタンにチェック付けるだけなら
ラジオボタン名.Checked = true
でええんやけど,そうではなく.
例えば10個あるラジオボタンのn番目にチェックを付けたいって時のやり方がGoogleっても全然出てこないのよ.
最初は
グループ名.Controls[n].Checked = true
でいけるやろ? と思ったんだけど,Controls[n]のプロパティに「Checked」が無いでやんの(´・ω・`).
まあControlsに含まれるのはラジオボタンとは限らんもんな……
じゃあOfTypeでラジオボタンだけフィルタすればよくない?と思いついて
グループ名.Controls.OfType<RadioButton>()[n].Checked = true
ってやってみるも「角かっこ[]付きのインデックスを'IEnumerable'型の式に適用することはできません」ってエラー.なんでや!
そして,2日間いろいろ試行錯誤してようやくたどり着いたのがこれ↓
グループ名.Controls.OfType<RadioButton>().ToArray()[n].Checked = true
OfTypeでラジオボタンだけフィルタしてToArrayで配列に変換した後に[n]で当該ラジオボタンを選択.これだとCheckedが使えるぞ!!!
もうちょっと簡単な方法ありそうだけどまあ動くのでこれで.
※ちないろいろGoogleってた時にラジオボタン名を連番にして名前で指定,みたいのんは見かけたんだけど,実際には上記グループはタブになってて「1番目のタブの2番目のラジオボタン」みたいな指定しなきゃならんのでラジオボタン名を生成するのが面倒くさくてスルーやで.