C#之Winform中防止重复打开同一子窗体(连点好多下只显示一个窗口,而不是打开多个窗口)

最近老师让跟了一个小项目,做一个上位机软件出来,这里遇到的小问题和大家分享一下

如图,实现这样一个小功能,不管点击多少次这个分区设置,只弹出一个子窗体,在子窗体最小化后,点“分区设置按钮”,可以把最小化的子窗口继续打开,具体如下

 

 

 

 

 

话不多说,直接上代码:

 public class GenericSingleton<T> where T : Form, new()
        {
            private static T t = null;
            public static T CreateInstrance()
            {
                if (t == null || t.IsDisposed)
                {
                    t = new T();
                }
                else
                {
                    t.Activate(); //如果已经打开过就让其获得焦点  
                    t.WindowState = FormWindowState.Normal;//使Form恢复正常窗体大小
                }
                return t;
            }
        }
 private void toolStripButton1_Click(object sender, EventArgs e)
        {
            FQSET f1 = GenericSingleton<FQSET>.CreateInstrance();
            f1.Show();
        }

 

C# WinForm实现一个随鼠标移动自动隐藏或显示的悬浮窗口涉及到对鼠标事件的监听和窗口位置的动态调整。以下是一个实现此功能的详细步骤和关键代码片段: 参考资源链接:[C# WinForm创建悬浮窗口教程](https://wenku.csdn.net/doc/7qadf7zcvx?spm=1055.2569.3001.10343) 首先,我们需要在窗体添加一个Panel控件,该控件将作为悬浮窗口来使用。可以通过设置Panel的属性(如Dock属性)使其贴在窗体的边缘。 接下来,要实现窗口的自动隐藏和显示,我们需要处理几个关键事件。首先,是`Form.LocationChanged`事件,当窗体位置改变时触发,用来检测窗口是否应该隐藏。其次,是`Form.MouseMove`事件,当鼠标在窗体上移动时触发,用来决定是否显示悬浮窗口。 在`Form.LocationChanged`事件处理函数,我们需要判断窗体的新位置是否导致悬浮窗口部分或全部移出了屏幕。如果是,则执行隐藏悬浮窗口的操作。例如,可以通过设置Panel的`Visible`属性为`false`来隐藏窗口。 而在`Form.MouseMove`事件处理函数,我们需要检测鼠标是否移动到Panel控件的区域内。如果是,根据之前的隐藏状态,可能需要显示悬浮窗口,这时将Panel的`Visible`属性设置为`true`。 示例代码如下: ```csharp private void Form1_MouseMove(object sender, MouseEventArgs e) { // 假设panel悬浮窗口已经定义,并且有一个名为plHideForm的Panel控件用于显示悬浮窗口 if (plHideForm.RectangleToScreen(plHideForm.ClientRectangle).Contains(Control.MousePosition)) { // 鼠标在悬浮窗口区域内,显示窗口 plHideForm.Visible = true; } } private void Form1_LocationChanged(object sender, EventArgs e) { // 检查悬浮窗口是否已经超出屏幕范围,如果是,则隐藏窗口 if (plHideForm.Location.Y < 0) { plHideForm.Visible = false; } } ``` 上述代码片段展示了基本的逻辑实现,但要使悬浮窗口效果更为自然和流畅,可能需要进一步的优化,例如添加动画效果来平滑显示和隐藏窗口。 通过以上步骤,我们能够在C# WinForm实现一个随鼠标移动自动隐藏或显示的悬浮窗口。为了更深入地理解这个实现过程,以及如何将其应用到实际开发,你可以参考这篇文章:《C# WinForm创建悬浮窗口教程》。这篇文章提供了更多的细节和示例代码,帮助你更好地理解和掌握悬浮窗口的创建过程。 参考资源链接:[C# WinForm创建悬浮窗口教程](https://wenku.csdn.net/doc/7qadf7zcvx?spm=1055.2569.3001.10343)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值