我有一个mainform,您可以在其中打开另一个窗口并更改选项。其中一个选项是将突出显示的文本复制到剪贴板。如果用户没有突出显示文本并单击btnCopy,那么我希望显示一条消息,表明没有突出显示任何文本。当用户选择“确定”时,我希望消息框关闭,但我希望“选项”窗口保持打开状态。
现在,当用户点击“确定”时,消息框和“选项”窗口都会关闭。为什么“选项”窗口关闭?
这是我的代码:
private void btnCopy_Click(object sender, EventArgs e)
{
string copySearch = txtSavedSearches.SelectedText;
if (copySearch == "")
{
DialogResult dialog = MessageBox.Show("You did not select anything to copy. Please select the query to copy.", "Copy search", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
Clipboard.SetText(copySearch);
this.Close();
}
}
答案 0 :(得分:2)
您显然将DialogResult
的{{1}}属性设置为与btnCopy
不同的内容。
如果 - 在DialogResult.None
中不是应用程序的主窗口 - 单击Form
,其Button
属性设置为DialogResult
以外的其他内容,此次点击会导致None
关闭,而调用Form
方法会返回ShowDialog()
。
找出您设置该属性的位置并将其删除。
如果此属性的DialogResult设置为None以外的任何值,并且如果通过ShowDialog方法显示父窗体,则单击该按钮将关闭父窗体,而无需挂接任何事件。然后在单击按钮时将窗体的DialogResult属性设置为按钮的DialogResult
答案 1 :(得分:0)
为什么“选项”窗口关闭?
以下行将导致选项表单关闭:
this.Close();
您无需执行任何操作即可关闭MessageBox;当用户单击“确定”时,它会自行消失,然后您的代码将从调用MessageBox.Show
的位置恢复运行。 MessageBox.Show
是一种方法,它返回一个值,表示用户点击哪个按钮以使框消失(值因a而异)您选择在.Show(...)
调用中显示哪些按钮b)用户点击了哪个按钮
现在,当用户点击“确定”时,消息框和“选项”窗口都会关闭。为什么“选项”窗口关闭?
这不可能,因为消息框显示在IF的do-if-true部分中,并且关闭选项表单的调用在ELSE(如果为false)部分中调用。这两部分不能连续运行,它们必须是一个或另一个。您的选项表单会在没有显示消息框的情况下关闭,或者消息框显示而您的表单不会关闭
-
编辑:
Renee认为你已经设置了这个属性:
btnCopy按钮上的是None以外的其他内容
然后你还打开了这样的选项表格:
OptionsForm f = new OptionsForm();
f.ShowDialog();
这两个组合在一起会导致你的表单选项在点击btnCopy的任何时候关闭(除非取消clickevent)