在消息框上选择“确定”时WinForm关闭

时间:2017-11-28 17:26:18

标签: c# winforms c#-4.0

我有一个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();
            }

        }

2 个答案:

答案 0 :(得分:2)

您显然将DialogResult的{​​{1}}属性设置为与btnCopy不同的内容。

如果 - 在DialogResult.None中不是应用程序的主窗口 - 单击Form,其Button属性设置为DialogResult以外的其他内容,此次点击会导致None关闭,而调用Form方法会返回ShowDialog()

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

来自MSDN (Button.DialogResult)

  

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

答案 1 :(得分:0)

  

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

以下行将导致选项表单关闭:

                this.Close();

您无需执行任何操作即可关闭MessageBox;当用户单击“确定”时,它会自行消失,然后您的代码将从调用MessageBox.Show的位置恢复运行。 MessageBox.Show是一种方法,它返回一个值,表示用户点击哪个按钮以使框消失(值因a而异)您选择在.Show(...)调用中显示哪些按钮b)用户点击了哪个按钮

  

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

这不可能,因为消息框显示在IF的do-if-true部分中,并且关闭选项表单的调用在ELSE(如果为false)部分中调用。这两部分不能连续运行,它们必须是一个或另一个。您的选项表单会在没有显示消息框的情况下关闭,或者消息框显示而您的表单不会关闭

-

编辑:

Renee认为你已经设置了这个属性:

enter image description here

btnCopy按钮上的

是None以外的其他内容

然后你还打开了这样的选项表格:

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

这两个组合在一起会导致你的表单选项在点击btnCopy的任何时候关闭(除非取消clickevent)