.net 隐藏窗体显示在左下角
我的Windows窗体应用程序启动另一个窗体;后者意味着保持隐藏,并在用户按下F9键时出现和消失 我需要隐藏表单在另一个进程中运行,因此我使用.net 隐藏窗体显示在左下角,.net,winforms,hide,.net,Winforms,Hide,我的Windows窗体应用程序启动另一个窗体;后者意味着保持隐藏,并在用户按下F9键时出现和消失 我需要隐藏表单在另一个进程中运行,因此我使用process.Start。然而,无论我做什么,我都无法让表单开始隐藏。它总是出现在左下角,奇怪的是,它只显示标题栏,我可以从中最大化它。这是不希望的 我试着用ShellExecute=false,CreateNoWindow=true,WindowStyle=ProcessWindowStyleHidden来调整StartInfo,你可以这么说 我还尝试
process.Start
。然而,无论我做什么,我都无法让表单开始隐藏。它总是出现在左下角,奇怪的是,它只显示标题栏,我可以从中最大化它。这是不希望的
我试着用ShellExecute=false
,CreateNoWindow=true
,WindowStyle=ProcessWindowStyleHidden
来调整StartInfo
,你可以这么说
我还尝试去表单的设计器,将ShowInTaskbar
设置为false,但没有设置。当我尝试时,有一件事引起了我的注意,WindowState
属性只能设置为普通、最小化或最大化,而不能隐藏
我被难住了。有什么建议吗?(避免删除Windows窗体;这是遗留代码)
编辑:(非常重要)我忘了提到我的主应用程序是全屏的,windows桌面被锁定。也就是说,当机器启动时,我的主应用程序将启动,而不是资源管理器。你只是想实现异步处理吗?例如,允许主窗体在其他窗体工作时进行处理?如果您想异步处理另一组代码/数据,为什么不在后台设置一个线程来完成任务呢?e、 g 在C#中
这将允许您的代码块在不锁定主线程的情况下进行处理。您可以通过多种方式完成相同的逻辑,具体取决于您的环境,例如后台工作线程、线程池或一次性线程。这完全取决于您的要求。表单应该有一个名为“Visible”的属性。如果将其设置为False,我不确定它是否会捕获您的F9键 但是,您应该能够将Left和Top属性设置为屏幕边界之外的值,然后在需要时恢复适当的值 差不多
Form1.Top= 3000
Form1.Left = 3000
及
在启动时隐藏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();
}
}
我很久以前就解决了这个问题,但是忘记发布我的解决方案了。关键是使表单的创建最小化。在设计器中的
InitializeComponent
中,我添加了:
TopMost = true;
TopLevel = true;
WindowState = System.Windows.Forms.FormWindowState.Minimized;
而且,为了更好的衡量,我在调用InitializeComponent
后再次这样做(几乎可以察觉到闪烁,但它可以工作):
如果隐藏的表单是您自己的代码库的一部分(一个任务,但必须运行异步的单独进程),我们可以帮助您编写异步代码,这样您就不需要单独的进程。另外请注意,WinForms现在已经很老了,但它绝对不是遗留下来的。这是否绝对要求它在自己的AppDomain中是一个单独的进程?是的,先生,它绝对必须是一个单独的应用程序。我不知道AppDomains,也许我应该用它来代替
Process.Start()
?如何操作?这只能在您启动的应用程序中完成,而不能从您的外壳更换中完成。从你的问题来看,这是否合适还不清楚。不能这样做,它们必须保持完全独立的过程。也许我可以用另一种方式启动第二个应用程序,而不是使用“Process.Start”…?糟糕的是,我想的是单独的线程,而不是进程。试试这个新的例子。是的,我知道那个属性。我尝试在InitializeComponent()
中将其设置为false,但CLR在过程中的某个地方将其更改为True。启动调用。。。我可以尽快将其设置为false,但再次声明,表单将在一段时间内可见。。。我会考虑改变位置作为最后的手段,必须有一个更优雅的解决方案,可以将不透明度属性设置为0。
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();
}
}
TopMost = true;
TopLevel = true;
WindowState = System.Windows.Forms.FormWindowState.Minimized;
public void Init( bool pQueryAndRetrieveForm, ref bool pIsOpen ) {
InitializeComponent();
WindowState = FormWindowState.Minimized;
//More initialization code...
}