Home > All Tags > VB.net

[原创]VB.net 通过Google Map API计算路程距离

评分 0.00, 满分 5星 0 票 No comments

利用Google Directions API (Google Map) http://code.google.com/intl/zh-CN/apis/maps/documentation/directions/
和VB.net 输入目的地(支持中文地址、经纬度等)计算出距离。
如:输入 北京|上海|天津
运行程序 会计算从A地出发依次到北京、上海、天津 三地的总距离,可选择是否包含返回的距离(天津到A地的距离)。
如果需要线路优化 可以参照API 介绍中的 optimize:true。开启后会自动安排路线。

已经在VB.net 2003 通过测试。

做的着急有些地方直接复制的,代码没有优化,有些重复,但不影响最终使用。

'需要以下命名空间
Imports System.web
Imports System.Xml
Imports System.IO

'需要声明的变量
Dim gstrPatch As String = "C:\XXX\map.xml"

    Private Sub btnCalc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalc.Click
     '判断输入的目的地是否为空。
        If txtROAD_ROUTE.Text = "" Then Exit Sub

        Try

          If MsgBox("路程距离数据会受到网络、关键字的影响,可能与实际距离相差很大,仅供参考。", MsgBoxStyle.YesNo, "系统提示") = MsgBoxResult.No Then Exit Sub
  
          Dim arrROAD As String()
          Dim strWaypoints As String  
          Dim i As Integer = 0
  
          arrROAD = txtROAD_ROUTE.Text.Split("|")
          Dim arrCalc(arrROAD.Length - 1) As String
      '对搜索的目的地编码
          For t As Integer = 0 To arrROAD.Length - 1
              arrROAD(t) = HttpUtility.UrlEncode(arrROAD(t), System.Text.Encoding.UTF8)  
          Next
         
      '编码重组
          For t As Integer = 0 To arrROAD.Length - 2
              If strWaypoints = "" Then
                  strWaypoints = arrROAD(t)
              Else
                  strWaypoints = strWaypoints & "|" & arrROAD(t)
              End If
          Next
         
      '39.049435,121.782503 为出发地 经纬度,可以替换成路名、地名等,注意中文请注意转码。
          Dim strURL As String
          strURL = "<a href="http://maps.google.com/maps/api/directions/xml?origin=39.049435,121.782503&destination">http://maps.google.com/maps/api/directions/xml?origin=39.049435,121.782503&destination</a>=" & arrROAD(arrROAD.Length - 1) & _
                  "&waypoints=" & strWaypoints & _
                  "&sensor=false"
  
          Dim myWebClient As New System.Net.WebClient
          'myWebClient.DownloadFile("<a href="http://maps.google.com/maps/api/directions/xml?origin=39.049435,121.782503&destination">http://maps.google.com/maps/api/directions/xml?origin=39.049435,121.782503&destination</a>=" & strdifang & "&waypoints=&sensor=false", "C:\msdn.xml")
          myWebClient.DownloadFile(strURL, gstrPatch)
  
          Dim xmlDoc As New XmlDocument
          Dim XmlFileName As String = gstrPatch
  
          If File.Exists(XmlFileName) Then
              xmlDoc.Load(XmlFileName)
              Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("DirectionsResponse").ChildNodes
              Dim xn1 As XmlNode
              Dim xn2 As XmlNode
              Dim xn3 As XmlNode
                  For Each xn1 In nodeList
                      For Each xn2 In xn1
                          For Each xn3 In xn2
                              If xn3.Name = "distance" Then
                                  arrCalc(i) = xn3.ChildNodes.Item(1).InnerText
                                  i = i + 1
                              End If
                          Next
                      Next
                  Next
          End If
  
          Dim douKM As Double
          Dim strLast As String
  
          If MsgBox("是否计算往返路程?", MsgBoxStyle.YesNo, "系统提示") = MsgBoxResult.Yes Then
              strURL = "<a href="http://maps.google.com/maps/api/directions/xml?origin">http://maps.google.com/maps/api/directions/xml?origin</a>=" & arrROAD(arrROAD.Length - 1) & "&destination=39.049435,121.782503" & _
                       "&sensor=false"
              myWebClient.DownloadFile(strURL, gstrPatch)
              '*计算
  
              Dim xmlDoc2 As New XmlDocument
              Dim XmlFileName2 As String = gstrPatch
  
              If File.Exists(XmlFileName2) Then
                  xmlDoc2.Load(XmlFileName2)
                  Dim nodeList As XmlNodeList = xmlDoc2.SelectSingleNode("DirectionsResponse").ChildNodes
                  Dim xn12 As XmlNode
                  Dim xn22 As XmlNode
                  Dim xn32 As XmlNode
                      For Each xn12 In nodeList
                          For Each xn22 In xn12
                              For Each xn32 In xn22
                                  If xn32.Name = "distance" Then
                                      strLast = xn32.ChildNodes.Item(1).InnerText
                                  End If
                              Next
                          Next
                      Next
              End If
  
              For r As Integer = 0 To arrCalc.Length - 1
                  douKM = douKM + CType(Replace(arrCalc(r), " km", ""), Double)
              Next
  
              douKM = douKM + CType(Replace(strLast, " km", ""), Double)
          Else
              For r As Integer = 0 To arrCalc.Length - 1
                  douKM = douKM + CType(Replace(arrCalc(r), " km", ""), Double)
              Next
          End If
      '显示距离 KM 单位
          txtDISTANCE.Text = douKM

        Catch ex As Exception
            MsgBox("获取距离数据失败。")
        End Try

    End Sub

[原创]VB.net 根据日期取本周第一天 可自定义

评分 0.00, 满分 5星 0 票 No comments

.net 里面的每周第一天默认是星期日,实在是不符合中国人的行为习惯。
以下函数 可以返回 传入日期所在星期的第一天,可自定义星期的第一天 是星期一、二、三 …  … 日

  Private Function FirstDayOfWeek(ByVal day As DateTime, ByVal weekStarts As DayOfWeek) As DateTime
        Dim d As DateTime = day
        Do While d.DayOfWeek <> weekStarts
            d = d.AddDays(-1)
        Loop
        Return d
    End Function

VB.net DT distinct 功能

评分 0.00, 满分 5星 0 票 No comments
'*----------------------------------------------------------------
'*
'*         函数名称:   VB.net DT distinct 功能
'*         摘    要:   用法 dt = SelectDistinct("新DT名", 需要过滤的DT, "字段名")
'*
'*----------------------------------------------------------------

#Region "DT 临时表 去重复 DT 内 distinct -停止使用"

    Public Function SelectDistinct(ByVal TableName As String, _
                                ByVal SourceTable As DataTable, _
                                ByVal FieldName As String) As DataTable
        Dim dt As New DataTable(TableName)
        dt.Columns.Add(FieldName, SourceTable.Columns(FieldName).DataType)
        Dim dr As DataRow, LastValue As Object
        For Each dr In SourceTable.Select("", FieldName)
            If LastValue Is Nothing OrElse Not ColumnEqual(LastValue, dr(FieldName)) Then
                LastValue = dr(FieldName)
                dt.Rows.Add(New Object() {LastValue})
            End If
        Next
        'If Not ds Is Nothing Then ds.Tables.Add(dt)
        Return dt
    End Function

    Private Function ColumnEqual(ByVal A As Object, ByVal B As Object) As Boolean
        '
        ' Compares two values to determine if they are equal. Also compares DBNULL.Value.
        '
        ' NOTE: If your DataTable contains object fields, you must extend this
        ' function to handle the fields in a meaningful way if you intend to group on them.
        '
        If A Is DBNull.Value And B Is DBNull.Value Then Return True ' Both are DBNull.Value.
        If A Is DBNull.Value Or B Is DBNull.Value Then Return False ' Only one is DBNull.Value.
        Return A = B                                                ' Value type standard comparison
    End Function

#End Region

[原创]VB.net 写入修改Host

评分 0.00, 满分 5星 0 票 No comments
    '提前调用
    Imports System.IO
    Imports System.ServiceProcess
     '窗体内 放置 一个RichTextBox 命名为 rtbHost
		
    Private Function Write_Host(ByVal strIP as string,ByVal strHost as string) As String
        Dim strReturn As String = "OK"
        Try
            '读数据
            Dim operachina As String
            Dim strFileName As String

            strFileName = Environ$("SystemRoot") & "\System32\drivers\etc\hosts"

            Dim SR As New StreamReader(strFileName)
            rtbHost.Text = SR.ReadToEnd

            SR.Close()

            If rtbHost.Find(strHost) < 0 Then

                operachina = strIP + "   " + strHost + vbCrLf

                '写数据
                rtbHost.AppendText(vbCrLf + operachina)

                Dim SW As New StreamWriter(strFileName)
                SW.Write(rtbHost.Text)
                SW.Close()

                '重启DNS服务
                Dim service As New ServiceController

                service.ServiceName = "Dnscache"

                If service.Status = ServiceControllerStatus.Running Then

                    service.Stop()
                    service.WaitForStatus(ServiceProcess.ServiceControllerStatus.Stopped)
                    service.Start()
                    service.WaitForStatus(ServiceProcess.ServiceControllerStatus.Running)
                ElseIf service.Status = ServiceControllerStatus.Stopped Then
                    service.Start()
                    service.WaitForStatus(ServiceProcess.ServiceControllerStatus.Running)
                End If

            End If

        Catch ex As Exception
            strReturn = ex.Message
            Throw
        End Try
        Return strReturn
    End Function
    
    '使用方法
     If Write_Host("192.168.1.100","test.wuxing.name") <> "OK" Then MsgBox("DNS解析错误,可能无法访问。")
     System.Diagnostics.Process.Start("IEXPLORE.EXE", "http://test.wuxing.name/")

[原创]PointFar Spread 使用 RadioButton MultiOption 单选

评分 0.00, 满分 5星 0 票 No comments

想用 PointFar Spread 的 RadioButton MultiOption 进行单选,但是自带的 Spread Designer选择 cell style 为 MultiOption 后没有任何效果,没有checkbox 好用。只好采用代码的方式解决了。

       '1.将以下代码 放入 Form Load 或其他事件中
        With Me.spList4.ActiveSheet
            Dim multiType As New FarPoint.Win.Spread.CellType.MultiOptionCellType
            multiType.Items = New String() {" "}
            For i As Integer = 0 To .RowCount - 1
                    .Cells(i, 0).CellType = multiType
                If i = 0 Then
		'选中第一行,第一列的 0为选中 1为非选
                    .Cells(0, 0).Value = 0
                End If
            Next
        End With
     
   '2.然后加入 以下事件代码 实现单选
    Private Sub spList4_LeaveCell(ByVal sender As System.Object, ByVal e As FarPoint.Win.Spread.LeaveCellEventArgs) Handles spList4.LeaveCell
        Me.spList4.ActiveSheet.Cells(e.Row, 0).Value = 1
        Me.spList4.ActiveSheet.Cells(e.NewRow, 0).Value = 0
    End Sub

[原创]用户控件 IP文本框 VB.net

评分 0.00, 满分 5星 0 票 No comments

vb.net 的textbox 没有 mask 特地制作一个 以备使用。
源码打包 MyIPBox 附带实例。

Public Class IpBox
    Inherits System.Windows.Forms.UserControl

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'UserControl overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
    Friend WithEvents textBox3 As System.Windows.Forms.TextBox
    Friend WithEvents label3 As System.Windows.Forms.Label
    Friend WithEvents textBox4 As System.Windows.Forms.TextBox
    Friend WithEvents label1 As System.Windows.Forms.Label
    Friend WithEvents textBox1 As System.Windows.Forms.TextBox
    Friend WithEvents label2 As System.Windows.Forms.Label
    Friend WithEvents textBox2 As System.Windows.Forms.TextBox
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Panel1 = New System.Windows.Forms.Panel
Me.textBox3 = New System.Windows.Forms.TextBox
Me.label3 = New System.Windows.Forms.Label
Me.textBox4 = New System.Windows.Forms.TextBox
Me.label1 = New System.Windows.Forms.Label
Me.textBox1 = New System.Windows.Forms.TextBox
Me.label2 = New System.Windows.Forms.Label
Me.textBox2 = New System.Windows.Forms.TextBox
Me.Panel1.SuspendLayout()
Me.SuspendLayout()
'
'Panel1
'
Me.Panel1.BackColor = System.Drawing.SystemColors.Window
Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
Me.Panel1.Controls.Add(Me.textBox3)
Me.Panel1.Controls.Add(Me.label3)
Me.Panel1.Controls.Add(Me.textBox4)
Me.Panel1.Controls.Add(Me.label1)
Me.Panel1.Controls.Add(Me.textBox1)
Me.Panel1.Controls.Add(Me.label2)
Me.Panel1.Controls.Add(Me.textBox2)
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel1.Location = New System.Drawing.Point(0, 0)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(118, 18)
Me.Panel1.TabIndex = 0
'
'textBox3
'
Me.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.textBox3.Location = New System.Drawing.Point(59, -1)
Me.textBox3.Name = "textBox3"
Me.textBox3.Size = New System.Drawing.Size(24, 14)
Me.textBox3.TabIndex = 11
Me.textBox3.Text = ""
Me.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'label3
'
Me.label3.BackColor = System.Drawing.Color.Transparent
Me.label3.Font = New System.Drawing.Font("Arial", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.label3.Location = New System.Drawing.Point(83, 1)
Me.label3.Name = "label3"
Me.label3.Size = New System.Drawing.Size(4, 14)
Me.label3.TabIndex = 12
Me.label3.Text = "."
Me.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'textBox4
'
Me.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.textBox4.Location = New System.Drawing.Point(87, -1)
Me.textBox4.Name = "textBox4"
Me.textBox4.Size = New System.Drawing.Size(24, 14)
Me.textBox4.TabIndex = 13
Me.textBox4.Text = ""
Me.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'label1
'
Me.label1.BackColor = System.Drawing.Color.Transparent
Me.label1.Font = New System.Drawing.Font("Arial", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.label1.Location = New System.Drawing.Point(27, 3)
Me.label1.Name = "label1"
Me.label1.Size = New System.Drawing.Size(4, 10)
Me.label1.TabIndex = 8
Me.label1.Text = "."
Me.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'textBox1
'
Me.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.textBox1.Location = New System.Drawing.Point(3, -1)
Me.textBox1.Name = "textBox1"
Me.textBox1.Size = New System.Drawing.Size(24, 14)
Me.textBox1.TabIndex = 7
Me.textBox1.Text = ""
Me.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'label2
'
Me.label2.BackColor = System.Drawing.Color.Transparent
Me.label2.Font = New System.Drawing.Font("Arial", 10.5!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.label2.Location = New System.Drawing.Point(55, 1)
Me.label2.Name = "label2"
Me.label2.Size = New System.Drawing.Size(4, 14)
Me.label2.TabIndex = 10
Me.label2.Text = "."
Me.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'textBox2
'
Me.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.textBox2.Location = New System.Drawing.Point(31, -1)
Me.textBox2.Name = "textBox2"
Me.textBox2.Size = New System.Drawing.Size(24, 14)
Me.textBox2.TabIndex = 9
Me.textBox2.Text = ""
Me.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'IpBox
'
Me.Controls.Add(Me.Panel1)
Me.Name = "IpBox"
Me.Size = New System.Drawing.Size(118, 18)
Me.Panel1.ResumeLayout(False)
Me.ResumeLayout(False)

    End Sub

#End Region

    Public strIP As String
    Public Property IPAddress() As String
        Get
            strIP = ""
            strIP += IIf(textBox1.Text.Trim() <> "", textBox1.Text.Trim(), "0")
            strIP += "."
            strIP += IIf(textBox2.Text.Trim() <> "", textBox2.Text.Trim(), "0")
            strIP += "."
            strIP += IIf(textBox3.Text.Trim() <> "", textBox3.Text.Trim(), "0")
            strIP += "."
            strIP += IIf(textBox4.Text.Trim() <> "", textBox4.Text.Trim(), "0")
            Return strIP
        End Get

        Set(ByVal Value As String)
            strIP = Value
            Dim arrIP As String() = strIP.Split(".")
            If arrIP.Length > 0 Then
                Try

                    Value = Convert.ToInt32(arrIP(0).Trim)
                    If Value < 0 Then
                        textBox1.Text = "0"
                    ElseIf Value > "255" Then
                        textBox1.Text = "255"
                    Else
                        textBox1.Text = Value.ToString
                    End If

                Catch ex As Exception
                    textBox1.Text = "0"
                Finally
                    textBox1.Text = "0"
                End Try
            End If

            If arrIP.Length > 1 Then
                Try

                    Value = Convert.ToInt32(arrIP(1).Trim)
                    If Value < 0 Then
                        textBox2.Text = "0"
                    ElseIf Value > "255" Then
                        textBox2.Text = "255"
                    Else
                        textBox2.Text = Value.ToString
                    End If

                Catch ex As Exception
                    textBox2.Text = "0"
                Finally
                    textBox2.Text = "0"
                End Try
            End If

            If arrIP.Length > 2 Then
                Try

                    Value = Convert.ToInt32(arrIP(2).Trim)
                    If Value < 0 Then
                        textBox3.Text = "0"
                    ElseIf Value > "255" Then
                        textBox3.Text = "255"
                    Else
                        textBox3.Text = Value.ToString
                    End If

                Catch ex As Exception
                    textBox3.Text = "0"
                Finally
                    textBox3.Text = "0"
                End Try
            End If

            If arrIP.Length > 3 Then
                Try

                    Value = Convert.ToInt32(arrIP(3).Trim)
                    If Value < 0 Then
                        textBox4.Text = "0"
                    ElseIf Value > "255" Then
                        textBox4.Text = "255"
                    Else
                        textBox4.Text = Value.ToString
                    End If

                Catch ex As Exception
                    textBox4.Text = "0"
                Finally
                    textBox4.Text = "0"
                End Try
            End If
        End Set

    End Property


    Private Sub textBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles textBox1.TextChanged _
                                                                                                        , textBox2.TextChanged _
                                                                                                        , textBox3.TextChanged _
                                                                                                        , textBox4.TextChanged
        If sender.Text.Trim <> "" Then
            Dim val As Integer = Convert.ToInt32(sender.Text.Trim)
            If val < 0 Then
                sender.Text = "0"
            ElseIf val > 255 Then
                sender.Text = "255"
                sender.SelectionStart = sender.TextLength
            End If
        End If
    End Sub


    Private Sub textBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles textBox1.KeyDown
        If e.KeyCode = Keys.Right And textBox1.SelectionStart = textBox1.TextLength Then
            textBox2.Focus()
            textBox2.SelectAll()
        End If
    End Sub


    Private Sub textBox2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles textBox2.KeyDown
        If textBox2.Text.Trim = "" And e.KeyCode = Keys.Back Then
            textBox1.Focus()
            textBox1.SelectionStart = textBox1.Text.Length
        End If
        If e.KeyCode = Keys.Right And textBox2.SelectionStart = textBox2.TextLength Then
            textBox3.Focus()
            textBox3.SelectAll()
        ElseIf e.KeyCode = Keys.Left And textBox2.SelectionStart = 0 Then
            textBox1.Focus()
            textBox1.SelectAll()
        End If
    End Sub


    Private Sub textBox3_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles textBox3.KeyDown
        If textBox3.Text.Trim = "" And e.KeyCode = Keys.Back Then
            textBox2.Focus()
            textBox2.SelectionStart = textBox2.Text.Length
        End If
        If e.KeyCode = Keys.Right And textBox3.SelectionStart = textBox3.TextLength Then
            textBox4.Focus()
            textBox4.SelectAll()
        ElseIf e.KeyCode = Keys.Left And textBox3.SelectionStart = 0 Then
            textBox2.Focus()
            textBox2.SelectAll()
        End If
    End Sub


    Private Sub textBox4_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles textBox4.KeyDown
        If textBox4.Text.Trim = "" And e.KeyCode = Keys.Back Then
            textBox3.Focus()
            textBox3.SelectionStart = textBox3.Text.Length
        End If
        If e.KeyCode = Keys.Left And textBox4.SelectionStart = 0 Then
            textBox3.Focus()
            textBox3.SelectAll()
        End If
    End Sub

    Private Sub textBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textBox1.KeyPress
        If Char.IsControl(e.KeyChar) Then
        Else
            If Not Char.IsDigit(e.KeyChar) Then
                e.Handled = True
            End If
        End If
        If e.KeyChar = "." Then
            textBox2.Focus()
            textBox2.SelectAll()
        End If
    End Sub


    Private Sub textBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textBox2.KeyPress
        If Char.IsControl(e.KeyChar) Then
        Else
            If Not Char.IsDigit(e.KeyChar) Then
                e.Handled = True
            End If
        End If
        If e.KeyChar = "." Then
            textBox3.Focus()
            textBox3.SelectAll()
        End If
    End Sub


    Private Sub textBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textBox3.KeyPress
        If Char.IsControl(e.KeyChar) Then
        Else
            If Not Char.IsDigit(e.KeyChar) Then
                e.Handled = True
            End If
        End If
        If e.KeyChar = "." Then
            textBox4.Focus()
            textBox4.SelectAll()
        End If
    End Sub


    Private Sub textBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textBox4.KeyPress

        If Char.IsControl(e.KeyChar) Then
        Else
            If Not Char.IsDigit(e.KeyChar) Then
                e.Handled = True
            End If
        End If

    End Sub

    Private Sub IpBox_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SizeChanged
         Dim nTextBoxWidth As Integer = (Me.Width - 3 * label1.Width) / 4
            textBox1.Location = New Point(0, 2)
            textBox1.Width = nTextBoxWidth
            textBox1.Height = Me.Height

            label1.Left = textBox1.Right
            label1.Top = 0
            label1.Width = label1.Width
            label1.Height = Me.Height - 4

            textBox2.Left = label1.Right
            textBox2.Top = 2
            textBox2.Width = nTextBoxWidth
            textBox2.Height = Me.Height

            label2.Left = textBox2.Right
            label2.Top = 0
            label2.Width = label1.Width
            label2.Height = Me.Height - 4

            textBox3.Left = label2.Right
            textBox3.Top = 2
            textBox3.Width = nTextBoxWidth
            textBox3.Height = Me.Height

            label3.Left = textBox3.Right
            label3.Top = 0
            label3.Width = label1.Width
            label3.Height = Me.Height - 4

            textBox4.Left = label3.Right
            textBox4.Top = 2
            textBox4.Width = nTextBoxWidth
            textBox4.Height = Me.Height - 4
    End Sub
End Class

[原创]VB.net Group Box 窗口内 自由 拖拽

评分 0.00, 满分 5星 0 票 No comments
#Region "Group Box 拖拽"

    Dim CurrX As Integer
    Dim CurrY As Integer
    Dim MousX As Integer
    Dim MousY As Integer
    Dim MovBoll As Boolean

    '*--将 gpbMATERIAL_INFO 更换为 自己Group Box的名字
    Private Sub gpbATT_FILE_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles gpbMATERIAL_INFO.MouseDown
        MousX = e.X
        MousY = e.Y
        MovBoll = True
    End Sub

    Private Sub gpbATT_FILE_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles gpbMATERIAL_INFO.MouseMove
         If MovBoll = True Then
            CurrX = sender.Left - MousX + e.X
            CurrY = sender.Top - MousY + e.Y
            sender.Location = New System.Drawing.Point(CurrX, CurrY)
        End If
    End Sub

    Private Sub gpbATT_FILE_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles gpbMATERIAL_INFO.MouseUp
        MovBoll = False
    End Sub


#End Region

[原创]VB.net 使用XML 对 FpSpread 列宽记忆

评分 0.00, 满分 5星 0 票 1 comment
'需要引入的 命名空间
Imports System.Xml
Imports System.IO

#Region "XML 读取 写入 生成"
Private Sub createXML(ByVal xmlFileName As String)
	Try
	
		Dim writer As New Xml.XmlTextWriter(xmlFileName, System.Text.Encoding.GetEncoding("utf-8"))
		'使用自动缩进便于阅读
		writer.Formatting = Xml.Formatting.Indented
		writer.WriteRaw("<!--l version=""1.0"" encoding=""utf-8""-->")
		writer.WriteRaw("<!--   Xing   -->")
		'书写根元素()
		writer.WriteStartElement("xx")
		'关闭根元素
		writer.WriteFullEndElement()
		'将XML写入文件并关闭writer
		writer.Close()
	
	Catch ex As System.Exception
		MsgBox(ex.Message & vbCrLf & ex.StackTrace)
	End Try
End Sub

Private Sub FpSpread_Column_Size_load(ByVal FpSpread As FarPoint.Win.Spread.FpSpread)
	Dim xmlDoc As New XmlDocument
	Dim XmlFileName As String = "C:\XX\INI\FpSpread_Config.xml" '修改为实际XML路径
	Dim intCol As Integer
	
	Try
	
		If File.Exists(XmlFileName) Then
			xmlDoc.Load(XmlFileName)		
			Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("xx").ChildNodes '获取xx节点的所有子节点
			Dim xn As XmlNode
			
			For Each xn In nodeList
				Dim xe As XmlElement = CType(xn, XmlElement)				
				If xe.GetAttribute("form") = Me.Name And xe.GetAttribute("Name") = FpSpread.Name Then				
					Dim nls As XmlNodeList = xe.ChildNodes '继续获取xe子节点的所有子节点
					Dim xn1 As XmlNode
					
					For Each xn1 In nls '遍历
						Dim xe2 As XmlElement = CType(xn1, XmlElement) '转换类型
						
						intCol = xe2.Name.Substring(1, xe2.Name.Length - 1)
						FpSpread.ActiveSheet.Columns(Val(intCol)).Width = Integer.Parse(xe2.InnerText)					
					Next xn1
				
				End If
			
			Next
		End If
		
	Catch ex As System.Exception
		File.Delete(XmlFileName)
	End Try
End Sub

Private Sub FpSpread_Column_Size_save(ByVal FpSpread As FarPoint.Win.Spread.FpSpread)
	Dim xmlDoc As New XmlDocument
	Dim XmlFileName As String = "C:\xx\INI\FpSpread_Config.xml" '修改为实际XML路径
	Dim intRecord As Integer
	
	Try
	If File.Exists(XmlFileName) = False Then
		createXML(XmlFileName)
	End If
	
	xmlDoc.Load(XmlFileName)	
	Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("xx").ChildNodes '获取xx节点的所有子节点
	Dim xn As XmlNode
	
		For Each xn In nodeList '遍历所有子节点
			Dim xe As XmlElement = CType(xn, XmlElement) '将子节点类型转换为XmlElement类型
			If xe.GetAttribute("form") = Me.Name And xe.GetAttribute("Name") = FpSpread.Name Then '如果form属性值为“当前窗口”Name为 当前spread 那么就 清空下面的数据
			intRecord += 1
			xe.RemoveAll() '*清空数据
			
				If intRecord < 2 Then
				xe.SetAttribute("form", Me.Name)
				xe.SetAttribute("Name", FpSpread.Name)
				
				Dim child_node As XmlElement
					For i As Integer = 0 To FpSpread.ActiveSheet.Columns.Count - 1
						child_node = xmlDoc.CreateElement("C" & i)
						child_node.InnerText = FpSpread.ActiveSheet.Columns(i).Width
						xe.AppendChild(child_node)
					
					Next
				End If
			End If
		Next xn
	
	If intRecord < 1 Then
		Dim root As XmlNode = xmlDoc.SelectSingleNode("xx")
		Dim xe1 As XmlElement = xmlDoc.CreateElement("spread")
		xe1.SetAttribute("form", Me.Name)
		xe1.SetAttribute("Name", FpSpread.Name)
		
		Dim child_node As XmlElement
			For i As Integer = 0 To FpSpread.ActiveSheet.Columns.Count - 1
			child_node = xmlDoc.CreateElement("C" & i)
			child_node.InnerText = FpSpread.ActiveSheet.Columns(i).Width
			xe1.AppendChild(child_node)
	
		Next
	
		root.AppendChild(xe1) '添加到节点中
	
	End If
	
	xmlDoc.Save(XmlFileName) '保存。
	Catch ex As System.Exception
	
	End Try
	
End Sub
#End Region

#Region "Form Load"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
	'spread load
	FpSpread_Column_Size_load(Me.spListMain)
End Sub
#End Region

#Region "form 关闭"
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
	FpSpread_Column_Size_save(Me.spListMain)
End Sub
#End Region

生成的XML文件内如如下

<?xml version="1.0" encoding="utf-8"?>
<!--   Xing   -->
<xx>
  <spread form="FORM1" Name="spListMain">
    <C0>60</C0>
    <C1>90</C1>
    <C2>106</C2>
    <C3>60</C3>
    <C4>80</C4>
    <C5>60</C5>
    <C6>178</C6>
    <C7>60</C7>
    <C8>119</C8>
    <C9>82</C9>
    <C10>145</C10>
    <C11>88</C11>
    <C12>123</C12>
    <C13>60</C13>
  </spread>
  <spread form="FORM1" Name="spListList">
    <C0>17</C0>
    <C1>65</C1>
    <C2>65</C2>
    <C3>31</C3>
    <C4>60</C4>
    <C5>65</C5>
    <C6>118</C6>
    <C7>69</C7>
    <C8>62</C8>
    <C9>71</C9>
    <C10>34</C10>
    <C11>52</C11>
    <C12>58</C12>
    <C13>58</C13>
    <C14>59</C14>
    <C15>106</C15>
    <C16>34</C16>
    <C17>34</C17>
  </spread>
  <spread form="FORM1" Name="spList1">
    <C0>60</C0>
    <C1>60</C1>
    <C2>60</C2>
    <C3>32</C3>
    <C4>60</C4>
    <C5>71</C5>
    <C6>60</C6>
    <C7>60</C7>
    <C8>60</C8>
    <C9>60</C9>
    <C10>60</C10>
    <C11>72</C11>
    <C12>68</C12>
    <C13>70</C13>
    <C14>60</C14>
    <C15>60</C15>
    <C16>60</C16>
    <C17>60</C17>
    <C18>60</C18>
    <C19>60</C19>
    <C20>60</C20>
    <C21>60</C21>
    <C22>65</C22>
  </spread>
</xx>