【发布时间】:2017-07-28 16:18:46
【问题描述】:
我目前正在学习如何使用 Windows 窗体。我有一个控制一切的主 Windows 窗体 (MainForm)。在执行过程中的某个时刻,我想打开另一个 Windows 窗体,其中包含一个列表框 (ListboxForm) 和一个按钮 (DoneButton),用于指示用户何时完成了 ListboxForm。我已经设法让 ListboxForm 显示出来,但我不确定如何让 MainForm 在用户按下 DoneButton 后等待并继续执行。
现在,当 ListboxForm 弹出并且用户单击 DoneButton 时,仍然显示 ListboxForm 并且没有任何反应。我不确定为什么会这样——我在 DoneButton 的按钮代码中有一个 this.close。
这是我的 ListboxForm 代码:
public partial class ListboxForm : Form
{
List<string> _items = new List<string>();
public UpdateGhubAndWebConfigForm()
{
InitializeComponent();
_items.Add("Option 1");
_items.Add("Option 2");
_items.Add("Option 3");
listBox1.DataSource = _items;
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { }
// This is for 'DoneButton'
private void button1_Click(object sender, EventArgs e)
{
LoggingProvider.Log.Info("ListboxForm DoneButton clicked with index: " + listBox1.SelectedIndex.ToString());
DoStuff();
this.Close();
}
private void Form1_Load(object sender, EventArgs e) { }
private void label1_Click(object sender, EventArgs e) { }
public static void DoStuff() { }
}
然后 MainForm 像这样打开/创建一个 ListboxForm:
if(displayListboxForm == true)
{
var listboxForm = new ListboxForm();
listboxForm.ShowDialog();
// Now I want MainForm to wait until the user clicks DoneButton in ListboxForm
MessageBox.Show("User has selected an option from ListboxForm");
}
【问题讨论】:
-
ListBoxForm是如何从MainForm触发的?你可以发布整个方法吗?在单击完成按钮后,我没有看到任何会导致 ListBoxForm 保持显示的异常情况。
-
它包含在一个任务中。文章底部显示了触发 ListboxForm 的块。
-
DoneButton 的按钮点击事件真的触发了吗?您的日志条目是否已创建?
-
在 ListBoxForm 的设计器中验证 DoneButton 的点击事件实际上是由 button1_Click 方法处理的。
-
是的,复制表单会导致异常。正确设置它们并触发事件后,如果您仍然需要帮助使其成为 MainForm 的模态,请告诉我
标签: c# forms winforms windows-forms-designer