记录项目中用到的一些公用函数(取IP与MAC地址、取当前项目的目录路径、取所有枚举值、只允许运行项目的一个实例、DataTable行列转置)

1.取得当前项目的目录路径

原理:通过Net类库取得IP地址,通过WMI取得MAC地址。

 

源代码:

Public Class GetIP '取得当前登陆IP Public Shared Function GetLoginIP() As String Dim Address() As System.Net.IPAddress Address = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList Return Address(0).ToString() End Function '取得当前登陆MAC地址 Public Shared Function GetMACFromIP(ByVal A_strIP As String) As String Dim Wmi As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") For Each WmiObj As System.Management.ManagementObject In Wmi.Get If CBool(WmiObj("IPEnabled")) Then Return WmiObj("MACAddress") End If Next Return Nothing End Function End Class

 

2.取得当前项目的目录路径

 

源代码:

''' <summary> ''' 取得当前项目的目录路径 ''' </summary> ''' <param name="strLastPath">要获取的文件夹(或者文件)的名称(或者相对路径)</param> ''' <returns></returns> ''' <remarks></remarks> Public Shared Function GetPath(ByVal strLastPath As String) As String ' Dim strPath As String = System.Text.RegularExpressions.Regex.Replace(Application.StartupPath, "(///w+){2}$", "") ' System.IO.Directory.GetCurrentDirectory Dim strPath As String = AppDomain.CurrentDomain.BaseDirectory() If strPath.IndexOf("/bin/") <> -1 Then strPath = Application.StartupPath + "/../../" + strLastPath Else strPath = Application.StartupPath + "/" + strLastPath ' If strLastPath.IndexOf(".rpt") <> -1 Then strPath = Application.CommonAppDataPath + Replace("/" + strLastPath, "/", "//") ' "E://林业项目//Hnlygis//Hnlygis//ReportsManage//作业设计汇总表//年度庭院林种植农户规划登记表.rpt" End If Return strPath End Function

 

3.返回枚举的所有值

 

源代码:

''' <summary> ''' 返回枚举的所有值 ''' </summary> ''' <param name="objType">枚举类型</param> ''' <returns></returns> ''' <remarks></remarks> Public Shared Function GetEnumList(ByVal objType As Type) As List(Of String) Dim listWorkState As New List(Of String) For Each itemenum As Object In [Enum].GetValues(objType) listWorkState.Add(itemenum.ToString()) Next Return listWorkState End Function

 

4.只允许运行项目的一个实例

 

源代码:

'只允许运行项目的一个实例(在Main函数里面使用下面两种方式都可,vb.net直接配置即可) Public Shared Sub MutexFormThread() If (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length > 1) Then My.Application.ApplicationContext.ExitThread() End If 'Dim initMutexShip As Boolean = True 'Dim createFormShip As Boolean = False 'Dim formMutex As New System.Threading.Mutex(initMutexShip, "myMutex", createFormShip) 'If Not (initMutexShip And createFormShip) Then ' My.Application.ApplicationContext.ExitThread() ' 'SetBeforeForm(System.Diagnostics.Process.GetCurrentProcess().Handle) 'End If End Sub

 

5.DataTable行列转置

 

源代码:

Public Shared Function InvertDataTable(ByVal objDataTable As DataTable) As DataTable '行列转置 Dim newDataTable As New DataTable() '添加列 For i As Integer = 0 To objDataTable.Rows.Count - 1 newDataTable.Columns.Add("Column" + (i + 1).ToString(), Type.GetType("System.String")) Next '添加行 For Each dc As DataColumn In objDataTable.Columns Dim drNew As DataRow = newDataTable.NewRow() For i As Integer = 0 To objDataTable.Rows.Count - 1 drNew("Column" & (i + 1).ToString()) = objDataTable.Rows(i)(dc.Ordinal) Next newDataTable.Rows.Add(drNew) Next Return newDataTable End Function

你可能感兴趣的:(function,String,Integer,Class,each,VB.NET)