0

これを行うための最良の方法についていくつかの指示が必要です。いくつかの擬似コードがあります。

/*form needs to be a drop down as below*/
//    -------------------------------
//   |                          X   |
//    -------------------------------
//   |     "chose your option"      |
//   |                              |
//   |       [choice 1 [v]]         |
//   |                              |
//   |   [ok]         [cancel]      |
//    -------------------------------

int optionchosen = confirmoptionbox();
if (optionchosen==1){
    //do something
}
if (optionchosen==2){
    // do something else
}
if (optionchosen==3){
    // third way
}
//etc etc

今、私は新しいフォーム(などなど)でそれを行う方法を知っていますが、たくさんのものを含まないより「エレガントな」オプションがあるかどうか本当に疑問に思っていました

4

2 に答える 2

1

フォームをデザインします。モーダルウィンドウとして開き、NewFormから値を取得します。

NewForm nf=new NewForm();

nf.ShowDialog();
于 2012-11-04T17:00:54.617 に答える
1

申し訳ありませんが、自分でフォームを書く際の問題がどこにあるのかわかりません。ただし、作成した疑似コードはほぼ完璧であり、実際にはそれが最善の方法です。私が書いているように、あなたの疑似コードは改善される可能性がありますが。フォームについて言えば、次のように構造化して再利用可能にすることができます。

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:

ここではチェックボックスを使用しましたが、変更してドロップダウン スタイルのコンボボックスを追加すると、必要なものが得られます。

于 2012-11-04T17:53:46.823 に答える