关闭由ShowDialog()打开的表单

时间:2016-12-14 13:32:40

标签: c# winforms lost-focus dialogresult

我有一个winform应用程序,我编写了自己的小颜色选择器,只显示系统颜色。它基本上是一个TableLayoutPanel,其中添加了一堆较小的面板,我只是设置了背景颜色。

非常简单:

enter image description here

现在我打开这个表格:

using (frmColourWindow colourPicker = new frmColourWindow (Cursor.Position.X, Cursor.Position.Y, findingPriority))
{
    colourPicker.ShowDialog();
    if (!colourPicker.SelectedColor.IsEmpty)
    {
        pnlColor.BackColor = colourPicker._SelectedColor;
    }                    
}

并在用户点击其中一个颜色面板时设置DialogResult来关闭它。

这一切都很好,我唯一无法做到的就是在失去焦点时关闭表单(例如,当用户点击其他地方或开始输入时)。我查看了DeactivateLostFocusLeave事件。当我想要它们时,似乎无法让这些事件发生。也许我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,当使用ShowDialog()时,您只能使用已打开的对话框,因此它永远不会失去焦点,所以DeactivateLostFocus和{ {1}}无法工作。

您需要使用Leave命令来使用这些事件来关闭已打开的表单。

关于解决您在关于为对象指定颜色的评论中指出的问题。你可以做到以下几点:

声明公共财产

Show()

在您的颜色选择器中将您的使用声明更改为:

Color SelectedColor {get; private set; }

这当然只是众多可能的解决方案之一。

答案 1 :(得分:0)

您可以通过使用<body> <form id="form1" runat="server"> <div> <a href="mailto:Sumit.Patil@ABC.com" target="_blank">Sumit Patil</a> <br /><br /> <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> <ItemTemplate> <asp:HyperLink ID="HyperLink1" runat="server"></asp:HyperLink> </ItemTemplate> </asp:Repeater> </div> </form> 方法显示表单然后使用Form.Deactivate事件来实现此目的。