ListViewにアイテムを追加する
意外に毎回、やり方を忘れるのでメモしておこう。
With ListView1 .Items.Add("アイテム") .Items(.Items.Count-1).SubItems.Add("サブアイテム1") .Items(.Items.Count-1).SubItems.Add("サブアイテム2") .Items(.Items.Count-1).SubItems.Add("サブアイテム3") End With
Columnsは、デザイナで設定する前提ですね。
クラスをシリアライズしてファイル保存する
シリアルライズしてファイルの読み書きするクラス
Public Class clsSerialize ''' <summary> ''' シリアライズされたデータの読み込み ''' </summary> ''' <typeparam name="T">クラス</typeparam> ''' <param name="_fp">ファイルパス</param> ''' <param name="_cls">読み込むオブジェクト</param> ''' <remarks></remarks> Public Shared Sub loadSerialize(Of T)(_fp As String, ByRef _cls As T) Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(T)) Dim _obj As Object = Nothing If My.Computer.FileSystem.FileExists(_fp) = True Then Using fs As New System.IO.FileStream(_fp, System.IO.FileMode.Open) _obj = serializer.Deserialize(fs) End Using _cls = CType(_obj, T) End If End Sub ''' <summary> ''' シリアライズされたデータの保存 ''' </summary> ''' <typeparam name="T">クラス</typeparam> ''' <param name="_fp">ファイルパス</param> ''' <param name="_cls">保存するオブジェクト</param> ''' <remarks></remarks> Public Shared Sub saveSerialize(Of T)(_fp As String, ByRef _cls As T) Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(T)) Dim _obj As Object = _cls Using fs As New System.IO.FileStream( _fp, System.IO.FileMode.Create) serializer.Serialize(fs, _obj) fs.Flush() End Using End Sub End Class
使用方法は、
' 設定保持クラス Public Class clsSetting Private _val As Boolean Public Property val As Boolean Get Return _val End Get Set(value As Boolean) _val = value End Set End Property End Class Public _setting As New clsSetting ' クラスの読み込み clsSerialize.loadSerialize(Of clsSetting)("clsSetting.xml",_setting) ' クラスの保存 clsSerialize.saveSerialize(Of clsSetting)("clsSetting.xml",_setting)
煩雑なファイル操作を必要とせずに、変数や状態の保存、読み出しができるので、重宝しています。
キーバッファをクリアする
不用意に押されたクリックやキーで次の画面に遷移した時に意図しない動作を抑制したい時
Imports System.Runtime.InteropServices Public Class clsKeyBuff <DllImport("user32.dll", SetLastError:=True)> Private Shared Function PeekMessage( ByRef lpMsg As MSG, ByVal hwnd As Int32, ByVal wMsgFilterMin As Int32, ByVal wMsgFilterMax As Int32, ByVal wRemoveMsg As PeekMsgOption ) As Boolean End Function <DllImport("user32.dll", SetLastError:=True)> Private Shared Function TranslateMessage(ByRef lpMsg As MSG) As Boolean End Function <DllImport("user32.dll", SetLastError:=True)> Private Shared Function DispatchMessage(ByRef lpMsg As MSG) As Int32 End Function Private Enum PeekMsgOption PM_NOREMOVE = 0 ' 削除しない PM_REMOVE ' 削除する End Enum <StructLayout(LayoutKind.Sequential)> Structure MSG Public HWnd As Int32 Public Msg As Int32 Public WParam As Int32 Public LParam As Int32 Public Time As Int32 Public Pt As POINTAPI End Structure 'MSG <StructLayout(LayoutKind.Sequential)> Structure POINTAPI Public x As Int32 Public y As Int32 End Structure Const PM_REMOVE = &H1 Const WM_KEYFIRST = &H100 Const WM_KEYLAST = &H108 Const WM_MOUSEFIRST = &H200 Const WM_MOUSELAST = &H20A ''' <summary> ''' キーバッファクリア ''' </summary> ''' <param name="frm">フォームオブジェクト</param> Public Shared Sub clearBuff(frm As Form) Try Dim m As New MSG Do While PeekMessage(m, CInt(frm.Handle), WM_KEYFIRST, WM_KEYLAST, PeekMsgOption.PM_REMOVE) Loop Do While PeekMessage(m, CInt(frm.Handle), WM_MOUSEFIRST, WM_MOUSELAST, PeekMsgOption.PM_REMOVE) Loop Catch ex As Exception End Try End Class
キーバッファをクリアしたいイベント箇所に
clsKeyBuff.clearBuff(Me)
これだけでキーバッファはクリアされて意図しない動作を抑制できます。
iniファイルを読み込む
iniファイルを読み込む為のクラス
Imports System.Runtime.InteropServices Imports System.Text Public Class clsIniFile Public Declare Auto Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileString" ( <MarshalAs(UnmanagedType.LPTStr)> ByVal lpApplicationName As String, <MarshalAs(UnmanagedType.LPTStr)> ByVal lpKeyName As String, <MarshalAs(UnmanagedType.LPTStr)> ByVal lpDefault As String, <MarshalAs(UnmanagedType.LPTStr)> ByVal lpReturnedString As StringBuilder, ByVal nSize As UInt32, <MarshalAs(UnmanagedType.LPTStr)> ByVal lpFileName As String) As UInt32 End Class
使用する時は、
#Imports System.Text ret = clsIniFile.GetPrivateProfileString( "SERVER", "CONNECT", "", sb, Convert.ToUInt32(sb.Capacity), strFilePath) Dim _serverConnect As String = sb.ToString
iniファイルの中身は
[SERVER]
;接続文字列
CONNECT="Data Source=;Initial Catalog=;User ID=;Password="