一、如何拖動沒有邊框的表單?
這個功能在VB6中,需要藉助於API函數才能實現。而在VB.NET中,憑自己的功能就能實現。首先設定表單的FormBorderStyle屬性為none以去掉表單的邊框,然後在表單上添加一個按鈕。表單中的代碼如下:
Code:
- 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中的代碼:
Code:
- 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中的代碼:
Code:
- 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下調試通過。