InPowerS.Net

 找回密碼
 註冊
搜索
查看: 2000|回復: 0

[轉貼]用Vb.net實現自訂介面

[複製鏈接]
發表於 2008-12-25 22:28:13 | 顯示全部樓層 |閱讀模式
個人都不希望在別人的身上發現有與自己的相同之處。作為電腦軟體來說也是一樣,每一個用戶都希望自己使用的軟體與別人不一樣,於是誕生了換膚技術。使用者可以根據自己的喜好來選擇不同的介面,從而實現了個性化的設置。但是換膚技術有一個不足之處,那就是所有的皮膚都是由開發者預先提供的,而且數量有限。這就導致了有些用戶使用的皮膚會和另一些用戶使用的皮膚相同,從而違背了設計者的初衷。雖然有些讀者會說,開發商現在提供了下載服務,可以從它們的網站下載更多的皮膚供用戶選擇,可是從我的使用中發現這些皮膚依然是有限的,而且對於沒有條件上網的使用者來說這種服務是毫無價值。
作為一個軟體發展人員,當一種技術已經無法滿足使用者的需要的時候就該開動腦筋,想想是否可以從另一種角度來思考問題的答案。在這個前提下,通過本人的思考終於想出了一個新的方法,我將它稱為--交互介面。使用這種技術可以保證在全球範圍內不會出現相同的介面結構,從而完全實現個性化。   其實要實現這種介面在技術方式上並沒有太高的要求。實現原理就是:讓使用者自己調整每一個控制項的位置然後保存這些控制項在介面上的座標位置。在以後啟動這個程式的介面時讀取這些值,用這些值來設置控制項在介面中的位置。下面的代碼就是為實現這個功能而設計的(用vb.net編寫)
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
Dim x, y
x = e.X
y = e.Y'獲得新的x,y的座標
If Button1.Enabled = False Then
Button1.Top = y
Button1.Left = x'座標替換
End If
If TextBox1.Enabled = False Then
TextBox1.Top = y
TextBox1.Left = x
End If
End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object,
  ByVal e As System.EventArgs) Handles MenuItem2.Click
Button1.Enabled = False'禁止控制項回應事件
If TextBox1.Enabled = False Then
TextBox1.Enabled = True
End If
End Sub
Private Sub MenuItem3_Click(ByVal sender As System.Object,
  ByVal e As System.EventArgs) Handles MenuItem3.Click
TextBox1.Enabled = False
If Button1.Enabled = False Then
Button1.Enabled = True
End If
End Sub
Private Sub MenuItem4_Click(ByVal sender As System.Object,
  ByVal e As System.EventArgs) Handles MenuItem4.Click
TextBox1.Enabled = True
Button1.Enabled = True
'將新的座標保存到文字檔中
If IO.File.Exists("c:\k.txt") = True Then
IO.File.Delete("c:\txt")
Dim sw As IO.StreamWriter = IO.File.CreateText("c:\k.txt")
Dim cstringt, cstringl As String
Dim tstringt, tstringl As String
cstringt = Button1.Top
cstringl = Button1.Left
tstringt = TextBox1.Top
tstringl = TextBox1.Left
sw.WriteLine(cstringt)'寫入新座標到文字檔中
sw.WriteLine(cstringl)
sw.WriteLine(tstringt)
sw.WriteLine(tstringl)
sw.Close()
Else
Dim sw As IO.StreamWriter = IO.File.CreateText("c:\k.txt")
Dim cstringt, cstringl As String
Dim tstringt, tstringl As String
cstringt = Button1.Top
cstringl = Button1.Left
tstringt = TextBox1.Top
tstringl = TextBox1.Left
sw.WriteLine(cstringt)
sw.WriteLine(cstringl)
sw.WriteLine(tstringt)
sw.WriteLine(tstringl)
sw.Close()
End If
MsgBox("當前介面已經保存")
End Sub
Private Sub Form1_Load(ByVal sender As Object,
  ByVal e As System.EventArgs) Handles MyBase.Load
If IO.File.Exists("c:\k.txt") = True Then
Dim sr As IO.StreamReader = IO.File.OpenText("c:\k.txt")
Dim input1, input2, input3, input4 As String
input1 = sr.ReadLine
input2 = sr.ReadLine
input3 = sr.ReadLine
input4 = sr.ReadLine'讀取文件中的座標
Button1.Top = input1
Button1.Left = input2
TextBox1.Top = input3
TextBox1.Left = input4'用檔中的值來初始化控制項在介面中的位置
sr.Close()
End If
End Sub
程式說明:在MenuItem4_Click 是在調整控制項之後將控制項的新位置保存到c;\k.txt文件中。form_load中的if作用是,如果是沒有設置控制項的新位置在初始化是將不會發現c;\k.txt檔,從而使用預設的參數來指定控制項的位置。如果是有c;\k.txt檔存在就讀取其中的參數來初始化控制項的位置。在Form1_MouseUp中通過點擊視窗中的位置來獲得新的座標,使控制項移動到此座標處。對於Enabled屬性的使用是為了使控制項在移動時不回應如click等的事件。
本文移動的控制項是textbox和button兩個控制項,你可以按照本文提出的方法加入更多的控制項,從而實現千人千面。
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

小黑屋|Archiver|手機版|InPowerS.Net

GMT+8, 2018-8-18 07:13

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表