程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB6 >> 自定義窗體樣式以及個人總結

自定義窗體樣式以及個人總結

編輯:VB6

前言

========================================================

現在參加工作了,感覺中並沒有原想象的那麼忙,在我的心中,一個干寫程序的人,就是應該要比較的忙,現在我還記得學校裡的一個老師說過,一個沒有通宵寫過程序的程序員不能算是真正的程序員,現在我不管那位老師說的偏激不偏激,但是在我心中至少是這樣的,所以我現在還不算一個真正的程序員.

我還是我,還是一個我自認為不是很喜歡追蹤潮流的人,下面我就講的就是一些老的東西,算是一個分享,高手就飄過.

多說一句,現在園子裡有首頁問題,如果大家覺得這篇放首頁有問題,我馬上就撤下.

=========================================================

1, 自定義自定義窗體樣式

第一步,設置窗體樣式

this.FormBorderStyle=System.Windows.Forms.FormBorderStyle.None

設置了以後,這個窗體就沒有了邊框,也就沒有了縮放和移動的功能,甚至連關閉也沒有了

第二步,瘋狂panel

//窗體上面放panel1(System.Windows.Forms.DockStyle.Fill)
//panel1裡面有panel2,panel3,panel4,panel5,panel6
//分別用於上,左,右,中,底
Me.Panel1 = New System.Windows.Forms.Panel
Me.Panel2 = New System.Windows.Forms.Panel
Me.Panel3 = New System.Windows.Forms.Panel
Me.Panel4 = New System.Windows.Forms.Panel
Me.Panel5 = New System.Windows.Forms.Panel
Me.Panel6 = New System.Windows.Forms.Panel
Me.Panel1.Controls.Add(Me.Panel6)
Me.Panel1.Controls.Add(Me.Panel5)
Me.Panel1.Controls.Add(Me.Panel4)
Me.Panel1.Controls.Add(Me.Panel3)
Me.Panel1.Controls.Add(Me.Panel2)
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel2.Dock = System.Windows.Forms.DockStyle.Top
Me.Panel3.Dock = System.Windows.Forms.DockStyle.Left
Me.Panel4.Dock = System.Windows.Forms.DockStyle.Right
Me.Panel5.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel6.Dock = System.Windows.Forms.DockStyle.Bottom

這樣就有了一個大致的模型了

第三步,在各個panel中加入各自應該有的東西

比如在panel2中加上標題欄,在panel3中加入左邊框,

第四步,移動,最小/大化

可以在panel2裡加上自己做的幾個按鈕(我做的是picturebox)

我做的如下

事件響應如下

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Me.WindowState = FormWindowState.Minimized
End Sub
'放大事件響應
Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
Me.WindowState = FormWindowState.Maximized
End Sub

還有一個不好做的地方,那就是移動了,

要用到系統API

<DllImport("user32.dll")> _
Public Shared Function ReleaseCapture() As Boolean
End Function
<DllImport("user32.dll")> _
Public Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal imsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Boolean
End Function
Public Const WM_SYSCOMMAND As Integer = &H112
Public Const SC_MOVE As Integer = &HF010
Public Const HTCAPTION As Integer = &H2

然後就加入事件響應來達到移動的效果

'點擊上邊框的panel時的響應
Private Sub Panel1_MouseDomn(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Panel2.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
AwardListForm2.ReleaseCapture()
AwardListForm2.SendMessage(Me.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0)
End If
End Sub

好了,有了放大,縮小,關閉的功能就自己做吧,現在這個自定義窗體裡的難點都講了,其他的就自己做吧

2, 產生不重復的隨機數,這個是從網上找的.我做一下摘錄

我個人認為比較好的方式1,

原理,先將所有的數據裝入一個鏈表A,再定義一個鏈表B用於存儲產生的隨機數,產生一個隨機數,將這個數

先保存到B中, 然後將這個數在A中剔除,,如此下去就可能產生要隨機的B

看示例:

Private Sub GenerateRandNum(ByVal A As List(Of String), ByVal B As List(Of String), ByVal num As Integer)
Dim rand As Integer
Randomize()
For i As Integer = 1 To num
rand = Int(Rnd() * A.Count)
B.Add(A(rand))
A.RemoveAt(rand)
Next
End Sub

方式2,就是比較法,

就是在A鏈表中並不剔除元素,而是每產生一個隨機數,就與B中已有的數比較,B中存在就再重新產生一個,再比較,

直到產生一個B中沒有和隨機數

示例:

Private Function GenerateRandoms(ByVal sum As Integer, ByVal num As Integer) As Integer()
Dim c(num) As Integer
Dim k As Integer
Randomize()
For i As Integer = 0 To num
c(i) = Int(Rnd() * sum)
k = i
For j As Integer = 1 To k - 1
If c(j) = c(k) Then
i = i - 1
Exit For
End If
Next
Next
Return c
End Function
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved