在处理该表单之前,如何创建新表单并使所有其他表单不可点击?

我曾经阅读过有关如何创建新表单并将其置于所有其他窗口之上的教程,因此您只能单击它 – 例如在Internet Explorer中,例如当您单击浏览文件时,您无法单击主窗口,直到您使用浏览窗口完成。

另外,从表单中获取值的最佳方法是什么,为了在我的第二个表单上进行扩展,我有一个列表框,当用户点击其中一个值时,第一个表单(mainform)应该得到事件 – 这可能吗?

您要查找的是将窗体显示为模式对话框。 Form.ShowDialog() 在这里,您可以阅读有关此主题的更多信息。

您可以通过几种方式访问​​父表单(后表单):

  • 使模态表单构造函数从as参数接受parent
  • 将父表单引用放入可以从模态表单访问的某个全局变量中

要从子表单中获取事件,您可以执行以下操作:

 form.myListBox.SelectedIndexChanged += new System.EventHandler(this.myListBox_SelectedIndexChanged); form.ShowDialog(); 

您需要将myListBox控件设置为public才能从父(调用方)表单访问它。

这听起来像你想要的:

 using (MyCustomForm form = new MyCustomForm(...)) { if (form.ShowDialog() == DialogResult.OK) { // Now use the values in form // (eg through properties of the form) } } 

只需使用一个模态forms,这是通过在创建它的实例后调用.ShowDialog()来完成的。

要获取值,只需将它们存储在表单的属性中,然后在父窗口/代码超出范围之前从父窗口/代码中读取这些属性。 您将在新表单的代码隐藏中处理SelectionChanged事件,并使用该值设置属性。

试试这个:

创建表单并在您的调用代码中执行以下操作:

 MyForm form = new MyForm(); form.ShowDialog(); 

要获取值,只需在表单上创建映射到控件值的属性(确保在访问属性之前不要丢弃表单!):

 public class MyForm { //... public string FirstName { get { return firstNameTextBox.Text; } } } 

然后在对话框完成后从调用代码调用属性:

 MyForm form = new MyForm(); if(form.ShowDialog() == DialogResult.OK) { string myFirstName = form.FirstName; // etc }