C# WinForm在'时关闭;ok';在messagebox上选择

C# WinForm在'时关闭;ok';在messagebox上选择,c#,winforms,c#-4.0,C#,Winforms,C# 4.0,我有一个主窗体,您可以在其中打开另一个窗口并更改选项。其中一个选项是将高亮显示的文本复制到剪贴板。如果用户没有突出显示文本并单击btnCopy,那么我希望显示一条消息,说明没有突出显示文本。当用户选择“确定”时,我希望messagebox关闭,但希望“选项”窗口保持打开状态 现在,当用户单击“确定”时,消息框和“选项”窗口都会关闭。为什么“选项”窗口关闭 这是我的密码: private void btnCopy_Click(object sender, EventArgs e)

我有一个主窗体,您可以在其中打开另一个窗口并更改选项。其中一个选项是将高亮显示的文本复制到剪贴板。如果用户没有突出显示文本并单击btnCopy,那么我希望显示一条消息,说明没有突出显示文本。当用户选择“确定”时,我希望messagebox关闭,但希望“选项”窗口保持打开状态

现在,当用户单击“确定”时,消息框和“选项”窗口都会关闭。为什么“选项”窗口关闭

这是我的密码:

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();
            }

        }
为什么“选项”窗口关闭

以下行将导致选项窗体关闭:

                this.Close();
你不需要做任何事情来关闭MessageBox;当用户单击OK时,它会自动消失,然后您的代码会从调用
MessageBox.Show
的位置开始恢复运行<代码>MessageBox.Show是一种返回值的方法,该值指示用户单击哪个按钮以使方框消失(该值根据a)您选择在调用
时显示哪些按钮。Show(…)
和b)用户单击了哪个按钮

现在,当用户单击“确定”时,消息框和“选项”窗口都会关闭。为什么“选项”窗口关闭

这是不可能的,因为消息框显示在if的do if true部分,关闭选项窗体的调用在ELSE(do if false)部分调用。这两个部分不能连续运行,它们必须是一个或另一个。选项窗体关闭时未显示messagebox,或者messagebox显示但窗体未关闭

-

编辑:

Renee相信您已设置此属性:

在你的btnCopy按钮上是除无之外的其他内容

然后您还打开了选项窗体,如下所示:

OptionsForm f = new OptionsForm();
f.ShowDialog();

这两件事结合在一起,会导致您的表单选项在单击btnCopy时关闭(除非取消clickevent)

您显然将
btnCopy
DialogResult
属性设置为与
DialogResult.None
不同的属性

如果-在非应用程序主窗口的
表单中-单击了设置了
对话框结果
属性的
按钮
(与
不同),此单击会导致
表单
关闭,并调用
ShowDialog()
返回该对话框结果的方法

找出设置该属性的位置并将其删除


发件人:

如果此属性的DialogResult设置为None以外的任何值,并且父窗体是通过ShowDialog方法显示的,则单击该按钮将关闭父窗体,而无需连接任何事件。单击按钮时,表单的DialogResult属性将设置为按钮的DialogResult


消息框只有在不在else Close中时才打开。这是错误的,
this.Close()
else
部分。用户问“选项窗口为什么关闭”-我回答了这个问题,并指出问题中提出的事件顺序不可能是这样的。评估你的否决票是否合理。那么,因为你的帖子没有解决问题,你说OP在他的观察结果上撒谎?我认为你们的答案更可能是错的。@RenéVogt OP可能在他的代码上撒谎。老实说,他没有说实话。我无法用OP提供的信息再现他所展示的问题。此外,Caius的回答准确地说明了.NET WinForms的行为。OP对我们隐藏了一些东西。仅此代码不会在显示messagebox时关闭第一个窗口,是否触发了其他事件?我会使用调试器并逐步执行,一定有其他地方正在调用close()。因为您只显示了一条“OK”消息,所以不需要关心messagebox的对话框结果,因此,您可以删除
DialogResult dialog=
部分。您是否在设计器中设置了btnCopy的DialogResult属性?您的代码似乎不完整。我试图重现您的问题,但使用您提供的代码,程序的行为就像您所说的那样。未选择文本时,只显示MessageBox,单击确定后,MessageBox关闭,窗口保持打开状态。当文本被选中时,它会被复制到剪贴板,所有内容都会关闭。好的,我现在明白了。我收回我的话,你是对的。重要的是,它是主窗口,但不是子窗口。你值得投票。