使用选项确认对话框

时间:2012-11-04 16:49:24

标签: c# winforms dialog

我需要一些关于最佳方法的说明,我有一些伪代码。

/*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

现在,我知道如何使用新表格(等等),但我真的想知道是否有更“优雅”的选项,不涉及大量的东西

2 个答案:

答案 0 :(得分:1)

设计一个表单。将其打开为模态窗口并从NewForm

获取值
NewForm nf=new NewForm();

nf.ShowDialog();

答案 1 :(得分: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:

在这里,我使用了复选框,但您可以更改它并添加一个带有下拉样式的组合框,然后您将拥有所需的内容。