我有一个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
事件。当我想要它们时,似乎无法让这些事件发生。也许我错过了一些明显的东西?
答案 0 :(得分:2)
正如我在评论中提到的,当使用ShowDialog()
时,您只能使用已打开的对话框,因此它永远不会失去焦点,所以Deactivate
,LostFocus
和{ {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事件来实现此目的。