- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将表单固定到桌面,例如小工具边栏。
它应该不受 Win+D 和显示桌面按钮的影响。
最好的方法是什么?
我可以找到 Progman 并将我的表单的父级设置为此,但我发现这不是最好的方法。
最佳答案
免责声明:仅仅因为您可以在 WinForms 中以特定方式执行某些操作而无需 API 调用或“ Hook ”,并不意味着您应该使用该技术。使窗体/窗口不可移动、最顶层等的 API 调用非常简单。请注意,通常的 API“简单技术”会遇到与下面演示的出现在桌面上的文件和文件夹图标上的技术相同的问题。
请注意,通过“干扰”Windows-D 组合键和任务栏中“显示桌面”图标的设计行为,您正在对用户机器进行非标准配置:常见的“智慧”表示这样做不是一个好主意!
“伪侧边栏”可以在 Vista 的 C# WinForms 中模拟...不受 Windows-D 隐藏或使用系统托盘中的“显示桌面”图标 hickey 的影响...无需 API 调用或“hooking”:但是有一个catch:窗体/窗口将出现在桌面上的项目(文件夹、文件)之上,并且由于它是不可移动的,您不会能够访问“在其下”的项目。如果您愿意“忍受”该限制:请继续阅读 :) 另一个“较小的怪异”在本文末尾指出。
示例:
在 Visual Studio 中创建一个新的表单解决方案:
一个。设置Form的大小、背景色等,随心所欲
添加您的控件或用户控件。
如果您希望始终出现在其他应用程序窗口的前面,请将窗体的“TopMost”属性设置为“true”,如果您希望其他应用程序的窗口能够出现在它前面,请将其设置为“false”。
将窗体的“ControlBox”、“MinimizeBox”和“MaximizeBox”属性设置为“false”。
将“FormBorderStyle”设置为“属性浏览器”下拉列表中显示的“固定样式之一”。正如您可能知道的那样,将 FormBorderStyle = FixedToolWindow 与 Form 的 Text 属性一起使用是一个“空字符串”:您将拥有一个没有 TitleBar 和 Caption 的窗口。讨论:是的,如果您愿意,您可以允许调整它的大小:只需在 SizeChanged 处理程序中编写一些代码,并使表单保持解锁状态。
这些事件处理程序应该让您了解需要什么才能使表单不可关闭、不可移动、不可最小化等。
......... 草图代码 p.o.c.如下:显然您可以重构、改进...
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
// set your Form's 'Top here ...
private void Form1_LocationChanged(object sender, EventArgs e)
{
this.Top = 100;
this.Left = Screen.PrimaryScreen.Bounds.Width - this.Width;
}
private void Form1_VisibleChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal;
}
private void Form1_Deactivate(object sender, EventArgs e)
{
this.Activate();
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal;
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("button1 is alive");
}
'button1 的'Click 事件处理程序在那里做什么?只是为了在我的测试中验证表单是否可用。
在上面的“停用事件处理程序”中重新激活表单,使表单不受 Windows-D 和“显示桌面”的影响:但这在 Vista 中也有一个奇怪的副作用:当您将焦点移开时从窗体的窗口(例如,通过单击桌面上的文件夹):任务栏将弹起,停留,(如果它被隐藏)并闪烁一会儿:我想告诉你它渴望保持活跃。
忍受卡在打开状态的 TaskBar 可能是使用此“ersatz 侧边栏”而不是使用 API 的另一个代价。
注意:不要忘记:你想要'不透明度:你有'不透明度:)
[1] 注意:您是否想考虑为用户提供隐藏或关闭表单的方法? [/1]
关于c# 将窗体固定到桌面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080968/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!