申し訳ありませんが、自分でフォームを書く際の問題がどこにあるのかわかりません。ただし、作成した疑似コードはほぼ完璧であり、実際にはそれが最善の方法です。私が書いているように、あなたの疑似コードは改善される可能性がありますが。フォームについて言えば、次のように構造化して再利用可能にすることができます。
class myForm : Form{
public int Result;
private Label lblText;
private Button btnOk, btnCancel;
private CheckBox[] checkboxes;
public myForm(string text, params string[] choicesText){
//set up components
lblText = new Label(){
Text = text,
AutoSize = true,
Location = new Point(10, 10)
//...
};
checkboxes = new CheckBox[choicesText.Length];
int locationY = 30;
for(int i = 0; i < checkboxes.Length; i++){
checkboxes[i] = new CheckBox(){
Text = choicesText[i],
Location = new Point(10, locationY),
Name = (i + 1).ToString(),
AutoSize = true,
Checked = false
//...
};
locationY += 10;
}
btnOk = new Button(){
Text = "OK",
AutoSize = true,
Location = new Point(20, locationY + 20)
//...
};
btnOk += new EventHandler(btnOk_Click);
//and so on
this.Controls.AddRange(checkboxes);
this.Controls.AddRange(new Control[]{ lblText, btnOk, btnCancel /*...*/ });
}
private void btnOk_Click(object sender, EventArgs e){
Result = checkboxes.Where(x => x.Checked == true).Select(x => Convert.ToInt32(x.Name)).FirstOrDefault();
this.Close();
}
}
次に、メインフォームで:
using(myForm form = new myForm("Select a choice", "choice 1", "choice 2")){
form.ShowDialog();
int result = form.Result;
switch(result){
case 1: MessageBox.Show("You checked choice 1") ; break;
case 2: MessageBox.Show("You checked choice 2") ; break;
default: MessageBox.Show("Invalid choice"); break;
}
}
PS:
ここではチェックボックスを使用しましたが、変更してドロップダウン スタイルのコンボボックスを追加すると、必要なものが得られます。