我的Windows窗体应用程序启动另一个;后者意味着保持隐藏,并在用户按下F9键时显示和消失。
我需要隐藏的表单在另一个进程中运行,所以我使用Process.Start
。但是,无论我做什么,我都无法让表格开始隐藏。它总是出现在左下角,奇怪的是,它只显示标题栏,我可以从中最大化它。这是不受欢迎的。
我尝试使用StartInfo
,ShellExecute = false
,CreateNoWindow = true
调整WindowStyle = ProcessWindowStyleHidden
,并为其命名。
我也试过去表单设计师并将ShowInTaskbar
设置为false,但没有雪茄。在我尝试时引起我注意的一件事是WindowState
属性只能设置为Normal,Minimized或Maximized,而不是Hidden。
我很难过。有什么建议? (除了放弃Windows窗体;这是遗留代码)
编辑 :(非常重要)我忘了提到我的主应用是全屏的,并且Windows桌面已被锁定。也就是说,当机器启动时,我的主应用程序启动而不是资源管理器
答案 0 :(得分:1)
表单应该有一个名为“Visible”的属性如果将其设置为False,我不确定它是否会捕获您的F9键。
但是,您应该能够将Left和Top属性设置为屏幕边界之外的值,然后在需要时恢复适当的值。
像
这样的东西Form1.Top= 3000
Form1.Left = 3000
和
Form1.Top = _appropriateTop
Form1.Left = _appropriateLeft
答案 1 :(得分:1)
在启动时隐藏winform。这对我有用。
public Form1()
{
InitializeComponent();
var t = new Thread(new ThreadStart(HideThisForm));
t.Start();
}
delegate void FormCallback();
void HideThisForm()
{
if (this.InvokeRequired)
{
var d = new FormCallback(HideThisForm);
this.Invoke(d);
}
else
{
this.Hide();
}
}
答案 2 :(得分:0)
您是否只是尝试实现异步处理?例如,允许您的主表单处理工作的其他内容?如果要异步处理另一组代码/数据,为什么不设置一个线程来在后台完成任务? e.g。
在C#中,
public Form1()
{
InitializeComponent();
new Thread(() => DoSomethingAsync());
}
private void DoSomethingAsync()
{
// Do Something
}
这将允许您的代码块在不锁定主线程的情况下进行处理。您可以通过多种方式完成相同的逻辑,具体取决于您的具体情况 - 例如后台工作程序,线程池或一次性线程。这一切都取决于您的要求。
答案 3 :(得分:0)
我很久以前解决了这个问题,但忘了发布我的解决方案。关键是要将表单创建最小化。在设计师的InitializeComponent
中,我补充道:
TopMost = true;
TopLevel = true;
WindowState = System.Windows.Forms.FormWindowState.Minimized;
而且,为了更好的衡量,我在调用InitializeComponent
之后再次这样做了(有一种几乎难以察觉的闪烁,但它有效):
public void Init( bool pQueryAndRetrieveForm, ref bool pIsOpen ) {
InitializeComponent();
WindowState = FormWindowState.Minimized;
//More initialization code...
}