如何使用单选按钮创建对话框并返回值

时间:2017-06-08 05:35:57

标签: c# list dialog radio-button

我有一个对象列表。我想做什么:

构建一个对话框,显示给定列表中每个元素的单选按钮,并通过单击OK按钮返回所选元素/值。

先谢谢。

3 个答案:

答案 0 :(得分:0)

以下是创建自己的表单并从中获取值的快速示例。

Form1.cs中:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frmTest frmTest = new frmTest();

        DialogResult dr = frmTest.ShowDialog();

        if(dr == System.Windows.Forms.DialogResult.OK)
        {
            string value = frmTest.GetValue();
            MessageBox.Show(value);
        }
    }
}

Form1查看:

Form1

public partial class frmTest : Form
{
    private string _value { get; set; }
    public frmTest()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        this.Close();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
        this.Close();
    }

    private void radioButton_CheckedChanged(object sender, EventArgs e)
    {
        RadioButton radioButton = (RadioButton)sender;

        this._value = radioButton.Text; // Assign the radio button text as value Ex: AAA
    }

    public string GetValue()
    {
        return this._value;
    }
}

您必须确保radioButton_CheckedChanged事件的所有单选按钮都使用CheckedChanged

Form2查看:

Form2

输出:

Output

答案 1 :(得分:0)

构建自己的表单并添加一个公共变量"一个字符串例如"叫"结果"

public partial class YourDialog:Form
{
  public string Result = "";
  public YourDialog()
  {// add all the controls you need with the necessary handlers
   //add the OK button with an "On Click handler"
  }

  private void OK_Button_Click(object sender, EventArgs e)
  {
    //set the Result value according to your controls
    this.hide();// will explain in the main form
  }

}

// in your main form
private string GetUserResult()
{
  YourDialog NewDialog = new YourDialog(); 
  NewDialog.ShowDialog();//that's why you only have to hide it and not close it before getting the result

  string Result = NewDialog.Result;
  NewDialog.Close();  
  return Result;
}

答案 2 :(得分:0)

糟糕!我回来只是为了看到已经有2个答案!但是,我想发布我的版本,它可以根据字符串列表构建控件:

//dialog form
public partial class frmDialogcs : Form
{
    public string selectedString;

    //keep default constructor or not is fine
    public frmDialogcs()
    {
        InitializeComponent();
    }

    public frmDialogcs(IList<string> lst)
    {
        InitializeComponent();
        for (int i = 0; i < lst.Count; i++)
        {
            RadioButton rdb = new RadioButton();
            rdb.Text = lst[i];
            rdb.Size = new Size(100, 30);
            this.Controls.Add(rdb);
            rdb.Location = new Point(20, 20 + 35 * i);
            rdb.CheckedChanged += (s, ee) =>
            {
                var r = s as RadioButton;
                if (r.Checked)
                    this.selectedString = r.Text;
            };
        }
    }
    private void btnOK_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
    }
}
    //in main form
    private void button1_Click(object sender, EventArgs e)
    {
        var lst = new List<string>() { "a", "b", "c" };
        frmDialogcs dlg = new frmDialogcs(lst);
        if (dlg.ShowDialog() == DialogResult.OK)
        {
            string selected = dlg.selectedString;
            MessageBox.Show(selected);
        }
    }