我有一个由C#和Visual Studio 2010提供支持的Windows窗体应用程序.
如何将我的应用程序最小化到系统托盘(而不是任务栏),然后在系统托盘中双击时将其恢复?任何的想法?另外,如何在系统托盘中的图标中创建一些菜单,当我右键单击它时,它会显示一个菜单,如登录,断开连接,连接等等.此外,是否有任何方法可以显示从系统托盘弹出气球?
PS:我已经添加了一个notifyIcon,但我不知道如何使用它.
我希望我的窗口只能在我的应用程序中的所有其他窗口之上.如果我设置窗口的TopMost属性,它将变为所有应用程序的所有窗口之上,我不希望这样.
我有一个表单,我想在应用程序中打开它时总是在顶部,但我不希望它在主窗体最小化或其他应用程序导航时位于顶部.我希望它只在我的应用程序中处于领先地位.
在问题的答案之后:如何使窗口始终保持在.Net的顶部?
this.TopMost = true;
Run Code Online (Sandbox Code Playgroud)
使表单位于顶部,但在导航到另一个应用程序或关闭主表单时,表单仍然位于顶部.
请问如何使表单仅在应用程序的顶部,同时使用户仍然可以在主窗体上工作?
我将首先解释为什么需要它,因为我预计第一个响应将是"你为什么需要它?".我想检测鼠标光标何时位于屏幕边缘,我不想使用挂钩.因此,我创建了一个像素宽的TOPMOST不可见窗口.
我在Win XP上使用C++,所以当创建窗口时(CreateWindowEx(WS_EX_TOPMOST | WS_EX_TRANSPARENT ...)一切正常.
不幸的是,如果用户移动另一个最顶层的窗口,例如窗口上的任务栏,我就不会移动鼠标.
我试图解决这个问题,类似于以下建议的方法: 如何保持MDI窗口始终位于顶部
我首先尝试在WM_WINDOWPOSCHANGED中检查我最顶层窗口的Z顺序
case WM_WINDOWPOSCHANGED :
WINDOWPOS* pWP = (WINDOWPOS*)lParam;
Run Code Online (Sandbox Code Playgroud)
然后pWP-> hwnd指向我的窗口并且pWP-> hwndInsertAfter为0,这意味着我的窗口位于Z的顶部,即使它被任务栏覆盖.然后我尝试了:
case WM_WINDOWPOSCHANGED :
HWND topWndHndl = GetNextWindow(myHandle, GW_HWNDPREV)
GetWindowText(topWndHndl, pszMem, cTxtLen + 1);
Run Code Online (Sandbox Code Playgroud)
而且我总是得到"默认IME"窗口在我的窗口顶部.即使尝试使用SetWindowPos()或BringWindowToTop()将窗口置于顶部,"默认IME"也会保持在顶部.我不知道什么是"默认IME"以及如何检测任务栏是否在我的窗口之上.
所以我的问题是:如何检测我的最顶层窗口不再是最顶层的窗口以及如何将它保持在顶部?
PS我知道周期性地将我的窗口置于顶部的"强力"方法仍然很难看,并且可能会对通知窗口进行一些不必要的推断.(将我的窗口置于顶部将隐藏通知窗口.)
谢谢你的时间和建议!
我对C#比较陌生.我有一个带按钮的窗口.如果窗口没有聚焦,我第一次点击按钮,第一次点击会抓住窗口的焦点,所有后续点击将执行各自的操作.
有没有办法执行与按钮关联的事件而不是抓住焦点?
我有以下示例代码
[STAThread]
static void Main(string[] args)
{
Thread thread = new Thread(() =>
{
using (var mww = new Form1())
{
Application.Run(mww);
}
});
thread.Start();
thread.Join();
thread = new Thread(() =>
{
using (var mww = new Form1())
{
Application.Run(mww);
}
});
thread.Start();
thread.Join();
thread = new Thread(() =>
{
using (var mww = new Form1())
{
Application.Run(mww);
}
});
thread.Start();
thread.Join();
}
Run Code Online (Sandbox Code Playgroud)
其中Form1定义为:
public partial class Form1 : Form
{
private readonly Timer _myTimer = new Timer();
public Form1() …Run Code Online (Sandbox Code Playgroud)