4

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

很简单:

在此处输入图像描述

现在我打开这个表格:

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

并通过设置DialogResult用户单击其中一个颜色面板的时间来关闭它。

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

4

2 回答 2

3

正如我在评论中提到的,在使用时,ShowDialog()您只能使用您打开的对话框,因此它永远不会失去焦点,所以事件就像Deactivate,LostFocus并且Leave不起作用。

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

至于解决您在评论中指出的关于为对象分配颜色的问题。您可以执行以下操作:

声明公共财产

Color SelectedColor {get; private set; }

在您的颜色选择器中并将您的 using 语句更改为:

var colourPicker = new frmColourWindow (Cursor.Position.X, Cursor.Position.Y, findingPriority);
colourPicker.Closed += (o, args) => { pnlColor.BackColor = colourPicker.SelectedColor };
colourPicker.Show(); 

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

于 2016-12-14T13:55:37.147 回答
0

您可以通过使用该Show()方法显示表单然后使用Form.Deactivate事件来实现此目的。

于 2016-12-14T13:49:59.667 回答