【发布时间】:2017-04-29 20:41:06
【问题描述】:
我有一个 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、LostFocus 和Leave 事件。只是似乎无法让这些事件在我想要的时候触发。也许我遗漏了一些明显的东西?
【问题讨论】:
-
使用
ShowDialog()打开表单时,您只能“使用”该表单,直到它被关闭。如果我正确理解您想要什么,请使用Show()而不是ShowDialog()那么这些事件应该会触发。 -
当然可以,选择面板并单击ApplicationSettings。如果您需要更多帮助,请按 F1。
-
@Bojan,如果我使用
Show(),然后从颜色选择器内部以编程方式使用Close(),如何从颜色选择器中获取选定的颜色?因为一旦表单关闭,后面的小面板必须设置为该颜色 -
@CodeVader 有多种方法可以实现这一点,您可以在设置颜色的颜色选择器上添加
OnClose或OnClosing事件侦听器(前提是所选颜色是可公开访问的属性),您可以有一个将颜色发送到调用程序表单的自定义事件,您可以将要为其设置背景的对象作为参数传递给颜色选择器...
标签: c# winforms lost-focus dialogresult