Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的自定义对话框?_C#_Winforms_Dialog - Fatal编程技术网

C#中的自定义对话框?

C#中的自定义对话框?,c#,winforms,dialog,C#,Winforms,Dialog,我有一个按钮,当点击时,会打开一个对话框,上面有各种控件,如单选按钮和文本框。如果确定,则该对话框中的值将传递回按钮,其余代码将使用这些值进行处理。如果取消,则不执行任何操作 我该怎么做?我想用这些控件创建另一个窗体,并让该按钮调用新窗体,但我希望其他控件停止,直到窗体像对话框一样完成。一种方法是在对话框窗体中创建事件。根据要发送回的值的数量,您可以在事件委托中只包含参数。更好的方法是为包含要返回的属性列表的参数创建一个小类或结构 如果单击“确定”,则使用对话框中的值触发事件。对于“取消”,不触

我有一个按钮,当点击时,会打开一个对话框,上面有各种控件,如单选按钮和文本框。如果确定,则该对话框中的值将传递回按钮,其余代码将使用这些值进行处理。如果取消,则不执行任何操作


我该怎么做?我想用这些控件创建另一个窗体,并让该按钮调用新窗体,但我希望其他控件停止,直到窗体像对话框一样完成。

一种方法是在对话框窗体中创建事件。根据要发送回的值的数量,您可以在事件委托中只包含参数。更好的方法是为包含要返回的属性列表的参数创建一个小类或结构

如果单击“确定”,则使用对话框中的值触发事件。对于“取消”,不触发事件

在带有按钮的表单中,您为事件连接了一个处理程序。它接收你的价值观,然后你可以用它们做任何你需要的事情

1.)使用所有必要的UI元素创建您所讨论的表单。同时添加一个确定和取消按钮

2.)在“确定”和“取消”按钮的属性窗格中,分别将对话框结果值设置为“确定”和“取消”。此外,还可以将窗体的CancelButton属性设置为已创建的Cancel按钮的属性

3.)向对话框中添加与要返回的值相对应的其他属性

4.)要显示该对话框,请按照

using( MyDialog dialog = new MyDialog() )
{
   DialogResult result = dialog.ShowDialog();

   switch (result)
   {
    // put in how you want the various results to be handled
    // if ok, then something like var x = dialog.MyX;
   }

}

你可以这样做。创建一个新表单。从主窗体,您可以使用以下命令调用自定义窗体:

CustomForm customForm = new CustomForm();
customForm.ShowDialog(); 

确保将相关按钮添加到自定义表单,并将其DialogResult属性设置为OK、Cancel或其他任何选项。

在处理对话框的代码中,您还可以显式设置结果。例如,您可以将以下代码放入按钮单击事件处理程序中

OnOKButton_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
    this.Dispose();
}
  • 将按钮添加到windows窗体。我通常将按钮命名为cmdOK或cmdCancel

  • 在对话框窗体中定义“取消”和“确定”按钮

当表单可以自行处理时,为什么要通过代理添加大量管道?确实如此,但通常有几种方法可以实现。在这种情况下,对话框中有公共属性、委托和事件等。我刚提供了另一种选择,我可以从离家40英里的办公室步行上班。这不是个好主意。并非所有想法都是平等产生的;)