现在的位置: 首页 > 综合 > 正文

WinForm开发FAQ

2012年04月08日 ⁄ 综合 ⁄ 共 3680字 ⁄ 字号 评论关闭

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来说是即时的,显示窗体之后将立即执行下面的代码.

抱歉!评论已关闭.