隐藏的表单出现在左下角

时间:2011-09-08 20:42:36

标签: .net winforms hide

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

我需要隐藏的表单在另一个进程中运行,所以我使用Process.Start。但是,无论我做什么,我都无法让表格开始隐藏。它总是出现在左下角,奇怪的是,它只显示标题栏,我可以从中最大化它。这是不受欢迎的。

我尝试使用StartInfoShellExecute = falseCreateNoWindow = true调整WindowStyle = ProcessWindowStyleHidden,并为其命名。

我也试过去表单设计师并将ShowInTaskbar设置为false,但没有雪茄。在我尝试时引起我注意的一件事是WindowState属性只能设置为Normal,Minimized或Maximized,而不是Hidden。

我很难过。有什么建议? (除了放弃Windows窗体;这是遗留代码)

编辑 :(非常重要)我忘了提到我的主应用是全屏的,并且Windows桌面已被锁定。也就是说,当机器启动时,我的主应用程序启动而不是资源管理器

4 个答案:

答案 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...
}