2010-08-10 63 views
0

使用Visual Studio 2008和VB.NET ...不透明表格叠加而不覆盖任务栏

我创建了一个表格(OpaqueForm),这是其他形式的,我会用的ShowDialog打开之间的媒介形式。这个想法是,当我想使用.ShowDialog显示一个表单时,这个OpaqueForm(不透明度不是100%)位于主表单和对话框表单之间,有效地“淡化”底层主表单。

OpaqueForm将FormBorderStyle属性设置为None,并在构造函数中接受它调用.ShowDialog的Form对象。效果运作良好,但有一个警告。任务栏也由OpaqueForm覆盖;我假设,因为它有一个FormBorderStyle None和一个最大化的WindowState。

我不希望OpaqueForm覆盖任务栏,因为如果让我的模态窗体阻止用户切换任务将是不礼貌的。我仍然可以使用FormBorderStyle的None来防止OpaqueForm覆盖任务栏吗?

回答

1

不知道我看到这会发生。只要确保覆盖层与Show(所有者)一起显示,以便它始终位于顶部,并且它具有与覆盖表单完全相同的大小和位置。

你会在我的回答this thread中找到这样一个覆盖的示例代码。

+0

.ShowDialog(所有者)在调整表单以匹配基础表单后工作。 – HardCode 2010-08-11 21:00:01

1

为什么不把“不透明”面板放在另一个表格的顶部。使整个用户窗口不透明是没有意义的。因为如果应用程序没有运行最大化,他们会想要点击其他应用程序。

+0

+1 - 你是对的,只覆盖了应用程序的表单,而不是整个用户窗口。 – HardCode 2010-08-11 21:00:29

0

将表单大小的大小设置为屏幕的工作区域。

Dim f as New Form() 
f.FormBorderStyle = FormBorderStyle.None 
f.Location = New Point(0, 0) 
f.Size = My.Computer.Screen.WorkingArea.Size 

这会做到这一点。


编辑


如果需要放置不透明形式的主屏上,使用下面的代码:如果您想放置一个

For Each scr In Screen.AllScreens 
    If scr.Primary = True Then 
     Dim f As New Form() 
     f.FormBorderStyle = FormBorderStyle.None 
     f.Location = New Point(0, 0) 
     f.Size = scr.WorkingArea.Size 
    End If 
Next 

在每个屏幕上形成,只需删除条件即可跳过检查主屏幕。

+0

这款多显示器是否兼容?我不这么认为。 – McKay 2010-08-11 21:01:19

+0

我编辑了代码,以便它支持多个显示器。 – 2010-08-12 11:39:16

0

我有一个.ShowDialog()语句,导致子窗体显示足够大,它覆盖任务栏。

事实证明,问题是我在子窗体代码中都将MaximizeBox设置为False。不知道为什么,但将其更改为MaximizeBox = True使最大化的窗体停止侵入任务栏区域。