明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Dotnet WinForm 創(chuàng)建 FAQ1(轉(zhuǎn)貼)(編程技巧)

[摘要]來自程序員大本營(yíng)dotnet版Dotnet WinForm 建立 FAQ小氣的神如何建立你的第一個(gè)窗體,希望下面的說明可以成為你快速開始的一個(gè)指引.1. 如何設(shè)置一個(gè)From的邊界2. 如何建立一個(gè)透明的From3. 如何設(shè)置窗體在屏幕中的位置4. 如何使最小化和最大化按鈕不可用5. 如何使一個(gè)窗...
來自程序員大本營(yíng)dotnet版

Dotnet WinForm 建立 FAQ

小氣的神

如何建立你的第一個(gè)窗體,希望下面的說明可以成為你快速開始的一個(gè)指引.

1. 如何設(shè)置一個(gè)From的邊界
2. 如何建立一個(gè)透明的From
3. 如何設(shè)置窗體在屏幕中的位置
4. 如何使最小化和最大化按鈕不可用
5. 如何使一個(gè)窗體不見
6. 如何設(shè)置使窗體成為非矩形的.
7. 如何使一個(gè)窗體在屏幕的最頂端.
8. 如何顯示一個(gè)Model和非Model的窗體
9. 如何制作一個(gè)MDI的窗體
10.如何將你的窗體不顯示在任務(wù)條上.
11.如何制作一個(gè)帶啟動(dòng)屏幕的窗體.
12.如何使你的窗體TrayIcon.
13.如何修改控制窗體的尺寸和長(zhǎng)寬尺寸.
14.如何建立一個(gè)Windows Explorer風(fēng)格的窗體.
15.如何設(shè)置初始的啟動(dòng)窗體
16.如何建立一個(gè)有背景圖像的窗體


 

1. 如何設(shè)置一個(gè)From的邊界
Form總共有七種不同的邊界風(fēng)格讓你設(shè)置,你可以在設(shè)計(jì)時(shí)刻也可以運(yùn)行時(shí)通過代碼動(dòng)態(tài)的來設(shè)置它.這七種邊界風(fēng)格分別是:
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)
SizableTool Window
(System.Windows.Forms.FormBorderStyle.SizableToolWindow)
在設(shè)計(jì)方式下在VS.NET IDE的 Properties window中設(shè)置FormBorderStyle屬性就可以了.
在運(yùn)行方式下你可以用代碼來完成:
DlgBx1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog

這七種邊界類型VB6中就有,沒有什么大的變化,運(yùn)行方式下你需要對(duì)照不同的枚舉變量進(jìn)行設(shè)置.

2. 如何建立一個(gè)透明的From
你可以通過兩種方法在設(shè)計(jì)時(shí)刻和運(yùn)行時(shí)刻來做到這一點(diǎn).
設(shè)計(jì)時(shí)刻,你可以在VS.NET IDE的 Properties window, 設(shè)置Opacity 屬性達(dá)到這個(gè)效果.這個(gè)值從0.0到1.0 . 0表示完全透明,1.0表示完全不透明.
運(yùn)行時(shí)刻你可以用下面的編碼設(shè)置窗體的Opactiy屬性來做到.具體:
frmTransparentForm.Opacity = 0.76; ( C# )
看得出現(xiàn)在很簡(jiǎn)單了,你已經(jīng)不用再去了解什么Alpha變量了.透明始終只是一種效果,不要濫用它.

3. 如何設(shè)置窗體在屏幕中的位置
你可以設(shè)置窗體的StartPosition屬性,VS.NET一般給你一個(gè)保守的選項(xiàng)” WindowsDefaultLocation“ 這樣系統(tǒng)在Load窗體時(shí)將根據(jù)用戶當(dāng)前的計(jì)算機(jī)設(shè)置來確定一個(gè)值,你也可以在設(shè)計(jì)時(shí)將它改成另一個(gè)值”Center”.
如果你一定要在設(shè)計(jì)方式下確定窗體在屏幕出現(xiàn)的位置你可以先設(shè)置StartPosition為Manual,然后設(shè)置Location的X和Y的值.
運(yùn)行時(shí)用代碼實(shí)現(xiàn)似乎更簡(jiǎn)潔一些:
Form1.Location = new Point (100, 100) ( VB.NET ) 

當(dāng)然你也可以分別修改的Location的X和Y值,對(duì)應(yīng)的是窗體的Left和Top屬性,比如:
Form1.Left += 200 ( VB.NET )
Form1.Top -= 100 ( VB.NET )
另外一個(gè)屬性將也將影響窗體在屏幕的位置:DesktopLocation 這個(gè)屬性主要是在你設(shè)置窗體的位置相對(duì)于任務(wù)欄時(shí)非常實(shí)用(當(dāng)你把任務(wù)條放在屏幕的頂或左邊時(shí),其實(shí)相應(yīng)改動(dòng)了desktop coordinates (0,0)),你可以這樣設(shè)置這個(gè)不出現(xiàn)在設(shè)計(jì)屬性窗口中的屬性,
Form1.DesktopLocation = new Point (100,100)
窗體在屏幕中的位置將主要取決于各自用戶具體的硬件和設(shè)置情況,所以保守的作法是用默認(rèn)的” WindowsDefaultLocation”或 ”Center”;專業(yè)的作法是自己先獲取系統(tǒng)的設(shè)置然后編碼動(dòng)態(tài)計(jì)算后進(jìn)行設(shè)置,不然很容易在屏幕上找不到你的窗體.

4. 如何使最小化和最大化按鈕不可用
在設(shè)置窗體的Form.MinimizeBox和Form.MaximizeBox 當(dāng)為True時(shí)表示顯示,False時(shí)表示不可.用編程方式見下:
frmMaxMin.MinnimizeBox = False ( VB.NET)
frmMaxMin.MaxmnimizeBox = True( VB.NET )

5. 如何使一個(gè)窗體不見
我想最直接的辦法是你調(diào)用 Hide()方法來做到這一點(diǎn).不過我想提供另一種方法,看了之后你會(huì)獲得一些其它的啟發(fā). ( 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都設(shè)置成0 ,我想這種方式和Hide()調(diào)用的底層可能是不同的。

6. 如何設(shè)置使窗體成為非矩形的.
這個(gè)問題我想我提供的不是最專業(yè)的作法,至少它還不能達(dá)到我期望的那樣,也就是說它在某些事件中它還會(huì)變回矩形.但至少我可以告訴你:如果試圖調(diào)用原來的Win32’s API SetWindowRng是不行的,我曾如此的嘗試過.現(xiàn)在你可能需要知道有關(guān)窗體的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. 如何使一個(gè)窗體在屏幕的最頂端.
這是很實(shí)用的一個(gè)功能,現(xiàn)在你不用在調(diào)用其它API了,只用設(shè)置TopMost 屬性為True就可以了.對(duì)于這個(gè)屬性在設(shè)計(jì)時(shí)刻和運(yùn)行時(shí)刻都是可以進(jìn)行修改的.代碼方式:
 myTopForm.TopMost = True ( VB.NET) 


8. 如何顯示一個(gè)Model和非Model的窗體
Model和Modeless的窗體主要將取決于你的應(yīng)用,最多的是用在顯示對(duì)話框.當(dāng)你需要Model的窗體時(shí)你調(diào)用MyForm. ShowDialog而非Model的調(diào)用MyForm.Show,對(duì)于ShowDialog有一個(gè)可選參數(shù)ower可以讓你為一個(gè)窗體建立父子關(guān)系.比如:
' Visual Basic
Private Sub mnuAbout_Click(…args…)
 Dim f As New FormOption
 f.ShowDialog Me
End Sub

有一點(diǎn)需要注意的是對(duì)于ShowDialog來說,當(dāng)執(zhí)行到這一句,窗體顯示,但這之后的代碼將不會(huì)執(zhí)行,只到窗口關(guān)閉之后才繼續(xù)執(zhí)行,而對(duì)于Show來說是即時(shí)的,顯示窗體之后將立即執(zhí)行下面的代碼.