VB.NET窗體操作技巧兩則 2003-03-18· ·劉紅軍 劉樂坤 ··yesky
一、如何拖動沒有邊框的窗體?
這個功能在VB6中,需要借助于API函數才能實現。而在VB.NET中,憑自己的功能就能實現。首先設置窗體的FormBorderStyle屬性為none以去掉窗體的邊框,然后在窗體上添加一個按鈕。窗體中的代碼如下:
Public Class Form1 Inherits System.Windows.Forms.Form
Private mouse_offset As Point Private Sub form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown mouse_offset = New Point(e.X, e.Y) End Sub
Private Sub form1_MouseMove(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove '按住鼠標左右鍵均可拖動窗體 If e.Button = MouseButtons.Left Or e.Button = MouseButtons.Right Then Dim mousePos As Point = Sender.findform().MousePosition '獲得鼠標偏移量 mousePos.Offset(-mouse_offset.X, -mouse_offset.Y) '設置窗體隨鼠標一起移動 Sender.findform().Location = mousePos End If End Sub
Private Sub BtnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '關閉窗體 Me.Close() End Sub End Class
二、多個窗體之間互相調用
在VB6中,多個窗體之間可以很方便地互相調用,如:在Form1中,只需要用一條“Form2.Show” 語句就能顯示窗體Form2。然而在VB.NET中窗體處理機制發生了很大的變化:在訪問窗體之前,你必須進行窗體實例化;如果在項目中有多處代碼訪問同一窗體,則你必須把它的同一實例指針傳遞給這些代碼,否則新創建的窗體實例就不再是原先的窗體了。
下面的代碼實現窗體Form1和Form2之間互相調用,Form1為主窗體。Form1上的按鈕BtnShowFrm2的標題為“顯示Form2”,Form2上的按鈕BtnShowFrm1的標題為“顯示Form1”。
1、Form1中的代碼:
Public Class Form1 Inherits System.Windows.Forms.Form '創建Form2的一個新的實例 Dim Frm2 As New Form2()
Public Function Instance2(ByVal frm As Form2) Frm2 = frm End Function
Private Sub BtnShowFrm2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnShowFrm2.Click '以下語句保證在Form2以及其他窗體中訪問Form1時, '都將得到Form1的同一個窗體實例。 Frm2.Instance(Me) Frm2.Show() Me.Hide() End Sub
End Class
2、Form2中的代碼:
Public Class Form2 Inherits System.Windows.Forms.Form Dim frm1 As Form1 '借助一個新增的Instance屬性來生成窗體frm1的實例 Public Function Instance(ByVal frm As Form1) frm1 = frm End Function
Private Sub BtnShowFrm1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnShowFrm1.Click Me.Hide() frm1.Show() End Sub
Private Sub Form2_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed '如果Form2被關閉,則設置Form1的按鈕BtnShowFrm2不可用。 frm1.BtnShowFrm2.Enabled = False frm1.Show() End Sub End Class
以上代碼全部在Windows XP,VB.NET下調試通過
|