【问题标题】:Windows Forms: upon start, load but hide formWindows 窗体:启动时,加载但隐藏窗体
【发布时间】:2016-06-13 11:20:24
【问题描述】:

我正在创建一个系统托盘应用程序。初始化应用程序后,我想:

  • 初始化并加载表单,使其在后台运行
  • 但保持表单隐藏(直到用户双击托盘图标)

表单在后台加载和运行很重要,因为表单包含一个嵌入式浏览器,它将初始化一个 Web 套接字连接以接收数据。但它需要隐藏。我尝试通过使用表单的Visible 属性来解决这个问题。到目前为止,我有这个(仅显示相关代码):

public TrayApp()
{
    var ni = new NotifyIcon();     
    InitializeForm();
    ni.DoubleClick += this.ShowForm;
}

private void InitializeForm()
{
    //load the form in the background so it can start receiving incoming data, but don't actually show the form
    myForm = new MyForm();
    myForm.Show();
    myForm.Visible = false;
}

private void ShowForm(object sender, EventArgs e)
{
    myForm.Visible = true;
}

这很好用,除了一个小细节:启动应用程序时,我短暂地看到表单在隐藏之前闪烁。我想Show 方法还将Visible 标志设置为true,从而导致闪存发生。

我尝试过的其他东西,基于 cmets:

  • 不要调用myForm.Show(),只初始化表单。这样可以避免 flash 但不会加载浏览器,因此未初始化 websocket 连接
  • myForm.Hide():效果和之前一样
  • 在调用Show() 之前将Opacity 设置为0,在将Visible 设置为false 之后将其设置为1:这确实有效,但我希望有一个更清洁的解决方案

如何避免闪现并保持表单运行但隐藏?

【问题讨论】:

  • 如果你打电话给ShowShowDialog 已经来不及隐藏了。你不能避免调用这些方法吗?在有模型的地方使用抽象:创建在后台运行的模型,然后您可以随时创建视图(甚至是多个视图)并将其附加到模型以查看累积或快照状态。在使用了一些 MVVM 之后,将套接字通信放入 Form 感觉非常错误。
  • 试试 myform.Hide();
  • 在你的初始化表单中,只是不要通过隐藏它来跟随它,它已经存在一旦你完成了 new MyForm() .. 除非你有一些触发代码在显示 - 你可以运行.. 不显示课程形式
  • 也许我对套接字的东西不是很清楚。所以让我澄清一下:表单包含的唯一内容是嵌入式 CEF 浏览器。它是在该浏览器中运行的页面,具有 websocket 连接。除了托管浏览器之外,表单本身不做任何事情因此,保持表单保持打开状态很重要,否则,浏览器和 websocket 连接将被终止。使用 Hide() 将关闭表单并终止连接。
  • 如果你想弄脏把戏(假设你必须创建句柄才能工作?我不知道WebBrowser),然后执行以下操作:将表单大小设置为可能的最小值,显示表格,隐藏它,将大小设置为正常,正常显示。另请参阅this

标签: c# windows winforms


【解决方案1】:

您可以尝试在显示表单之前设置隐藏属性。

myForm = new MyForm();
myForm.Visible = false;
myForm.Show();

【讨论】:

  • 谢谢,但这只是显示表单(可能是因为 Show() 方法还将 Visible 标志设置为 true)
  • 这样不行。显示/隐藏基本都是可见=真,可见=假。
【解决方案2】:

您可以尝试编写一个初始化套接字的函数。将此函数放在 MyForm 类中,然后从 InitializeForm() 中调用它。

希望这会有所帮助。

【讨论】:

  • 套接字是从在浏览器中运行的网站初始化的(由表单托管)。无需从表单应用程序中创建套接字连接。提到“socket”这个词,我似乎把每个人都搞糊涂了,但我只是想强调一下,表单中的浏览器实际上正在运行(例如,表单已加载)是很重要的。
猜你喜欢
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
相关资源
最近更新 更多