Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#中触发自动隐藏图标?_C#_Show Hide_Notifyicon - Fatal编程技术网

如何在c#中触发自动隐藏图标?

如何在c#中触发自动隐藏图标?,c#,show-hide,notifyicon,C#,Show Hide,Notifyicon,我有一份申请。如果应用程序在一定时间内没有被使用,它应该隐藏。当应用程序被隐藏并且我们将鼠标移到图标上时,它应该被恢复 我该怎么做?提前感谢。您必须在应用程序中定义一个计时器,用于计算鼠标不在窗体/窗口上的时间。然后隐藏你的应用程序 下载 并处理MouseOver事件,该事件将显示窗体/窗口 编辑: 如果您不需要最小化应用程序到托盘并隐藏窗口,将其保持在桌面->使用相同的算法,但不隐藏窗口,只需将透明度设置为0%或10%。当鼠标在上方时,将透明度设置为100%。要查看用户是否进行了任何输入,您可

我有一份申请。如果应用程序在一定时间内没有被使用,它应该隐藏。当应用程序被隐藏并且我们将鼠标移到图标上时,它应该被恢复


我该怎么做?提前感谢。

您必须在应用程序中定义一个计时器,用于计算鼠标不在窗体/窗口上的时间。然后隐藏你的应用程序

下载 并处理MouseOver事件,该事件将显示窗体/窗口

编辑:


如果您不需要最小化应用程序到托盘并隐藏窗口,将其保持在桌面->使用相同的算法,但不隐藏窗口,只需将透明度设置为0%或10%。当鼠标在上方时,将透明度设置为100%。

要查看用户是否进行了任何输入,您可以使用类似的方法。要使应用程序再次可见,您需要一种方法来获取全局鼠标和键盘输入,要做到这一点,您可以使用挂钩,您可以找到一种解决方案。如果钩子被触发,它实际上只取决于您使用的UI类型,但是调用特定的
hide
show
方法就足够了。

正如JesseJames所说,使用计时器测量应用程序的非活动时间,并在一段时间后将其隐藏。当鼠标悬停在Notify图标上时重新激活它。下面是一个执行此任务的示例WindowsForms解决方案:

private Timer _timer;
private int _ticks;

public Form1()
{
    _timer = new Timer { Interval = 1000, Enabled = true };
    _timer.Tick += TimerTick;

    Activated += Form1_Activated;
    MouseMove += Form1_MouseMove;
    //notifyIcon1 is an icon set through the designer
    notifyIcon1.MouseMove += NotifyIcon1MouseMove;
}

protected void TimerTick(object sender, EventArgs e)
{
    //After 5 seconds the app will be hidden
    if (_ticks++ == 5)
    {
        WindowState = FormWindowState.Minimized;
        Hide();
        _timer.Stop();
        _ticks = 0;
    }
}

protected void NotifyIcon1MouseMove(object sender, MouseEventArgs e)
{
    WindowState = FormWindowState.Normal;
    Show();
    _ticks = 0;
    _timer.Start();
}

protected void Form1_MouseMove(object sender, MouseEventArgs e)
{
    _ticks = 0;
}

也许有一个更干净的解决方案,我不知道,但它会让你走上正轨。同样的原则也适用于WPF,只是代码略有不同。希望这有帮助

我更喜欢你的第一种方法。如果应用程序是透明的,你仍然可以与之交互,对吗?因此,我认为隐藏/最小化应用程序更“安全”。。。