Dotnet WinForm 建立 FAQ
小气的神 2001.08.31
如何建立你的第一个窗体 , 希望下面的说明可以成为你快速开始的一个指引 .
1. 如何设置一个 From 的边界
2. 如何建立一个透明的 From
3. 如何设置窗体在屏幕中的位置
4. 如何使最小化和最大化按钮不可用
5. 如何使一个窗体不见
6. 如何设置使窗体成为非矩形的 .
7. 如何使一个窗体在屏幕的最顶端 .
8. 如何显示一个 Model 和非 Model 的窗体
9. 如何制作一个 MDI 的窗体
10. 如何将你的窗体不显示在任务条上 .
11. 如何制作一个带启动屏幕的窗体 .
12. 如何使你的窗体 TrayIcon.
13. 如何修改控制窗体的尺寸和长宽尺寸 .
14. 如何建立一个 Windows Explorer 风格的窗体 .
15. 如何设置初始的启动窗体
16. 如何建立一个有背景图像的窗体
** 1. 如何设置一个 From 的边界 **
Form 总共有七种不同的边界风格让你设置 , 你可以在设计时刻也可以运行时通过代码动态的来设置它 . 这七种边界风格分别是 :
None (System.Windows.Forms.FormBorderStyle.None )
Fixed 3D (System.Windows.Forms.FormBorderStyle.Fixed3D)
Fixed Dialog (System.Windows.Forms.FormBorderStyle.FixedDialog)
Fixed Single(System.Windows.Forms.FormBorderStyle.FixedSingle)
Fixed Tool Window(System.Windows.Forms.FormBorderStyle.FixedToolWindow)
Sizable(System.Windows.Forms.FormBorderStyle.Sizable)
Sizable Tool Window
(System.Windows.Forms.FormBorderStyle.SizableToolWindow)
在设计方式下在 VS.NET IDE 的 Properties window 中设置 FormBorderStyle 属性就可以了 .
在运行方式下你可以用代码来完成 :
DlgBx1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
这七种边界类型 VB6 中就有 , 没有什么大的变化 , 运行方式下你需要对照不同的枚举变量进行设置 .
** 2. 如何建立一个透明的 From **
你可以通过两种方法在设计时刻和运行时刻来做到这一点 .
设计时刻 , 你可以在 VS.NET IDE 的 Properties window, 设置 Opacity 属性达到这个效果 . 这个值从 0.0 到 1.0 . 0 表示完全透明 ,1.0 表示完全不透明 .
运行时刻你可以用下面的编码设置窗体的 Opactiy 属性来做到 . 具体 :
frmTransparentForm.Opacity = 0.76; ( C# )
看得出现在很简单了 , 你已经不用再去了解什么 Alpha 变量了 . 透明始终只是一种效果 , 不要滥用它 .
** 3. 如何设置窗体在屏幕中的位置 **
你可以设置窗体的 StartPosition 属性 ,VS.NET 一般给你一个保守的选项 ” WindowsDefaultLocation“ 这样系统在 Load 窗体时将根据用户当前的计算机设置来确定一个值 , 你也可以在设计时将它改成另一个值 ”Center”.
如果你一定要在设计方式下确定窗体在屏幕出现的位置你可以先设置 StartPosition 为 Manual, 然后设置 Location 的 X 和 Y 的值 .
运行时用代码实现似乎更简洁一些 :
Form1.Location = new Point (100, 100) ( VB.NET )
当然你也可以分别修改的 Location 的 X 和 Y 值 , 对应的是窗体的 Left 和 Top 属性 , 比如 :
Form1.Left += 200 ( VB.NET )
Form1.Top -= 100 ( VB.NET )
另外一个属性将也将影响窗体在屏幕的位置 :DesktopLocation 这个属性主要是在你设置窗体的位置相对于任务栏时非常实用 ( 当你把任务条放在屏幕的顶或左边时 , 其实相应改动了 desktop coordinates (0,0)), 你可以这样设置这个不出现在设计属性窗口中的属性 ,
Form1.DesktopLocation = new Point (100,100)
窗体在屏幕中的位置将主要取决于各自用户具体的硬件和设置情况 , 所以保守的作法是用默认的 ” WindowsDefaultLocation” 或 ”Center”; 专业的作法是自己先获取系统的设置然后编码动态计算后进行设置 , 不然很容易在屏幕上找不到你的窗体 .
** 4. 如何使最小化和最大化按钮不可用 **
在设置窗体的 Form.MinimizeBox 和 Form.MaximizeBox 当为 True 时表示显示 ,False 时表示不可 . 用编程方式见下 :
frmMaxMin.MinnimizeBox = False ( VB.NET)
frmMaxMin.MaxmnimizeBox = True ( VB.NET )
** 5. 如何使一个窗体不见 **
我想最直接的办法是你调用 Hide() 方法来做到这一点 . 不过我想提供另一种方法 , 看了之后你会获得一些其它的启发 . ( VB.NET )
Private Const WS_EX_TOOLWINDOW As Int32 = &H80
Private Const WS_POPUP As Int32 = &H80000000
Private Const WS_VISIBLE As Int32 = &H10000000
Private Const WS_SYSMENU As Int32 = &H80000
Private Const WS_MAXIMIZEBOX As Int32 = &H10000
Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
Get
Dim cp As System.Windows.Forms.CreateParams
cp = MyBase.CreateParams
cp.ExStyle = WS_EX_TOOLWINDOW
cp.Style = WS_POPUP Or WS_VISIBLE Or WS_SYSMENU Or WS_MAXIMIZEBOX
cp.Height = 0
cp.Width = 0
Return cp
End Get
End Property
原来是把 Height 和 Width 都设置成 0 ,我想这种方式和 Hide() 调用的底层可能是不同的。
** 6. 如何设置使窗体成为非矩形的 . **
这个问题我想我提供的不是最专业的作法 , 至少它还不能达到我期望的那样 , 也就是说它在某些事件中它还会变回矩形 . 但至少我可以告诉你:如果试图调用原来的 Win32’s API SetWindowRng 是不行的 , 我曾如此的尝试过 . 现在你可能需要知道有关窗体的 Region 属性
' // ( VB.NET )
Public Sub SetWindowRegion()
Dim FormPath As System.Drawing.Drawing2D.GraphicsPath
Dim Reg As Drawing.Region
Dim lRet As Long
FormPath = New Drawing2D.GraphicsPath()
FormPath.AddEllipse(New Rectangle(0, 0, 250, 120))
Me.Region = New Region(FormPath)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Region = Nothing
SetWindowRegion()
End Sub
Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
Me.Region = Nothing
SetWindowRegion()
End Sub
** 7. 如何使一个窗体在屏幕的最顶端 . **
这是很实用的一个功能 , 现在你不用在调用其它 API 了 , 只用设置 TopMost 属性为 True 就可以了 . 对于这个属性在设计时刻和运行时刻都是可以进行修改的 . 代码方式 :
myTopForm.TopMost = True ( VB.NET)
** 8. 如何显示一个 Model 和非 Model 的窗体 **
Model 和 Modeless 的窗体主要将取决于你的应用 , 最多的是用在显示对话框 . 当你需要 Model 的窗体时你调用 MyForm. ShowDialog
而非
Model
的调用
MyForm.Show
,对于
ShowDialog 有一个可选参数 ower 可以让你为一个窗体建立父子关系 . 比如 :
' Visual Basic
Private Sub mnuAbout_Click(…args…)
Dim f As New FormOption
f.ShowDialog Me
End Sub
有一点需要注意的是对于 ShowDialog 来说 , 当执行到这一句 , 窗体显示 , 但这之后的代码将不会执行 , 只到窗口关闭之后才继续执行 , 而对于 Show 来说是即时的 , 显示窗体之后将立即执行下面的代码 .