gpt4 book ai didi

C# Windows 窗体 - 在控件外部单击后隐藏控件

转载 作者:行者123 更新时间:2023-12-05 04:13:42 25 4
gpt4 key购买 nike

C# WindowsForms - 在控件外部单击后隐藏控件

我有一个默认情况下不可见的图片框(例如 picturebox1)。当我单击一个按钮(假设是 button1)时,将显示 picturebox1。现在 -> 我需要 picturebox1 在我单击它的外部时再次隐藏(在表单本身或任何其他控件上)。它的工作方式与上下文菜单的工作方式相同。

我不知道该怎么做,因为任何“Click_Outside”事件都不存在。有什么简单的方法可以做到这一点吗?谢谢。

最佳答案

这是一个简单的解决方案,虽然不是一个完全容易完全理解的解决方案,因为它确实涉及捕获 WndProc 事件并使用来自 Windows inderds 的一些常量..:

这是显而易见的部分:

private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Show();
}

不幸的是我们不能使用pictureBox1.LostFocus 事件 来隐藏Picturebox

那是因为只有一些控件在点击它们时能真正获得焦点; Button 或其他交互式控件(如 ListBoxCheckBox 等)也可以。

但是 PanelPictureBox 以及 Form 本身无法通过这种方式获得焦点。因此,我们需要一个更全局化的解决方案。

解决方案通常来自 Windows 消息系统的深处:

const int WM_PARENTNOTIFY = 0x210;
const int WM_LBUTTONDOWN = 0x201;

protected override void WndProc(ref Message m)
{
if (m.Msg == WM_LBUTTONDOWN || (m.Msg == WM_PARENTNOTIFY &&
(int)m.WParam == WM_LBUTTONDOWN))
if (!pictureBox1.ClientRectangle.Contains(
pictureBox1.PointToClient(Cursor.Position)))
pictureBox1.Hide();
base.WndProc(ref m);
}

请注意,我们需要确保您仍然可以点击 PictureBox 本身;所以我们检查鼠标是否在其 ClientRectangle..

只需将其添加到表单代码中,每次在 PictureBox 外单击都会将其隐藏。

关于C# Windows 窗体 - 在控件外部单击后隐藏控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com