Dotnet WinForm 建立 FAQ (1)
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來說是即時的,顯示窗
體之後將立即執行下面的代碼.
9. 如何製作一個MDI的窗體
1. 建立一個新的Windows Application項目
2. 分別加入兩個窗體Form1 、Form2
3. 設置Form1的IsMdiContainer屬性爲True。使它成爲MDI主窗體。
4. 在Form2中加入一個RichTextBox控件,並設置Dock爲:Fill
5. 在Tools 窗體中拖一個MainMenu到窗體Form1,然後建立一個菜單
File|Windows|Help三個菜單項,File中包括New、Exit菜單項;Windows中包括
Cascade、Horizontal等。
6. 設置Windows菜單項的MdiList屬性=True, 這樣每一個MDI子窗口將自動
加在Windows菜單項下面。
7. 雙擊New菜單項,然後加入以下代碼:
private void menuNew_Click(object sender, System.EventArgs e)
{
Form2 NewMdiChild ;
NewMdiChild = new Form2() ;
NewMdiChild.MdiParent = this ;
NewMdiChild.Show() ;
}
8. 在Windows的Cascade等菜單項中加入以下代碼:
private void menuWindowCasca_Click(object sender, System.
EventArgs e)
{
this.LayoutMdi( MdiLayout.Cascade) ;
}
另外還有以下常用的:
this.LayoutMdi(MdiLayout.TileHorizontal);
this.LayoutMdi(MdiLayout.TileVertical);
9. F5運行。
最終版的VS.NET 不知是否會有一個通用的模板,不過用完全手工的方式產生一個
MDI的窗口,顯得有些繁瑣,不如VS.NET的IDE方式下那麼簡潔。
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來說是即時的,顯示窗
體之後將立即執行下面的代碼.
9. 如何製作一個MDI的窗體
1. 建立一個新的Windows Application項目
2. 分別加入兩個窗體Form1 、Form2
3. 設置Form1的IsMdiContainer屬性爲True。使它成爲MDI主窗體。
4. 在Form2中加入一個RichTextBox控件,並設置Dock爲:Fill
5. 在Tools 窗體中拖一個MainMenu到窗體Form1,然後建立一個菜單
File|Windows|Help三個菜單項,File中包括New、Exit菜單項;Windows中包括
Cascade、Horizontal等。
6. 設置Windows菜單項的MdiList屬性=True, 這樣每一個MDI子窗口將自動
加在Windows菜單項下面。
7. 雙擊New菜單項,然後加入以下代碼:
private void menuNew_Click(object sender, System.EventArgs e)
{
Form2 NewMdiChild ;
NewMdiChild = new Form2() ;
NewMdiChild.MdiParent = this ;
NewMdiChild.Show() ;
}
8. 在Windows的Cascade等菜單項中加入以下代碼:
private void menuWindowCasca_Click(object sender, System.
EventArgs e)
{
this.LayoutMdi( MdiLayout.Cascade) ;
}
另外還有以下常用的:
this.LayoutMdi(MdiLayout.TileHorizontal);
this.LayoutMdi(MdiLayout.TileVertical);
9. F5運行。
最終版的VS.NET 不知是否會有一個通用的模板,不過用完全手工的方式產生一個
MDI的窗口,顯得有些繁瑣,不如VS.NET的IDE方式下那麼簡潔。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.