从用户控件打开winform并将值传递给usercontrol

时间:2010-02-04 07:27:34

标签: c# winforms user-controls

我想知道是否有可能让用户控件打开一个允许用户选择其中的选项的winform,然后当他关闭表单时 - 他选择的选项/值将返回给用户控件?

3 个答案:

答案 0 :(得分:6)

为什么不在对话框表单上创建一些公共属性,并在对话框关闭后从UserControl访问它们?

public class OptionsForm : Form
{
    // ...

    public string Option1 { get; set; }
    public bool Option2 { get; set; }
}

然后,在UserControl中:

public void ShowOptionsForm()
{
    using (var form = new OptionsForm())
    {
        if (form.ShowDialog() == DialogResult.OK)
        {
            var option1Value = form.Option1;
            var option2Value = form.Option2;

            // use option values...
        }
    }
}

答案 1 :(得分:4)

答案 2 :(得分:0)

这是一个关于如何做到的简短示例。这不完整你必须填写一些空白,但它应该让你知道如何解决你的问题。

此代码用于构建控件并构成

MyUserControl ctrl = new MyUserControl();
Action<typeYouPassBack> callBack = myUserControl.FormCallBack;
MyOptionForm form = new MyOptionForm(callBack);

表单类必须看起来像这样:(重要的部分是action参数)

class MyOptionForm : Form
{
  private readonly Action<typeYouPassBack> _callBack;
  public MyOptionForm(Action<typeYouPassBack> callBack)
  {
    _callBack = callBack;
    Close += form_Close;
  }

  privatre void form_close(object sender, EventARgs e)
  {
     typeYouPassBack postBackData = //populate the postback data
     _callBack(postBackData);
  }
}

类型Action只是一个带有签名void f(T arg)的委托。在上面的代码中,用户控件需要一个名为“FormCallBack”的方法,当然,只要在将其分配给“回调”变量时使用正确的名称,就可以将其命名为任何名称