.net 隐藏窗体显示在左下角

.net 隐藏窗体显示在左下角,.net,winforms,hide,.net,Winforms,Hide,我的Windows窗体应用程序启动另一个窗体;后者意味着保持隐藏,并在用户按下F9键时出现和消失 我需要隐藏表单在另一个进程中运行,因此我使用process.Start。然而,无论我做什么,我都无法让表单开始隐藏。它总是出现在左下角,奇怪的是,它只显示标题栏,我可以从中最大化它。这是不希望的 我试着用ShellExecute=false,CreateNoWindow=true,WindowStyle=ProcessWindowStyleHidden来调整StartInfo,你可以这么说 我还尝试

我的Windows窗体应用程序启动另一个窗体;后者意味着保持隐藏,并在用户按下F9键时出现和消失

我需要隐藏表单在另一个进程中运行,因此我使用
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...
}