Back to Top

Daily Archives: 2016年3月30日

VB.NET INIファイルを読み書きする

VBで、INIファイルの読み込み・書き込み、をする方法を説明します。

INIファイルは、単純なテキストファイルなので、テキストエディタで編集することも出来ます。

ここでは、KERNEL32.DLLを読み込み、Win32APIを使用して、INIファイルを読み書きします。

INIファイルの読み込み・書き込み

INIファイルの読み書き関数

<DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)>
Public Shared Function GetPrivateProfileString(
    ByVal lpAppName As String,
    ByVal lpKeyName As String, ByVal lpDefault As String,
    ByVal lpReturnedString As System.Text.StringBuilder, ByVal nSize As Integer,
    ByVal lpFileName As String) As Integer
End Function

<DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)>
Public Shared Function WritePrivateProfileString(
    ByVal lpApplicationName As String,
    ByVal lpKeyName As String,
    ByVal lpString As String,
    ByVal lpFileName As String) As Long
End Function

----------------------------------------------------------------------------------
'iniファイルから取得する
Public Function GetIniString(ByVal lpSection As String, ByVal lpKeyName As String, ByVal lpFileName As String) As String
    Dim strValue As System.Text.StringBuilder = New System.Text.StringBuilder(1024)

    Dim sLen = GetPrivateProfileString(lpSection, lpKeyName, "", strValue, 1024, lpFileName)
    Dim str As String = strValue.ToString()

    Return str
End Function

'iniファイルに書き込む
Public Function PutIniString(ByVal lpSection As String, lpKeyName As String, ByVal lpValue As String, ByVal lpFileName As String) As Boolean
    Dim result As Long = WritePrivateProfileString(lpSection, lpKeyName, lpValue, lpFileName)
    Return result <> 0
End Function

呼び出し側

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim FilePath As String = "C:\work\MyFile.ini"

    Dim s As String = GetIniString("Section1", "KEY1", FilePath)
    PutIniString("Section2", "KEY1", "AAAA", FilePath)
End Sub

 

VB.NETコントロール検索

コントロールを検索する方法はさまざまな方法があります。その例を記載します。

特定のコントロール検索

'Panel内のコントロール(子コントロール)は検索できない
'Panel内を検索するには、Meをパネルオブジェクトにする
Dim ctrl As Control = Me.Controls("TextBox1")
If ctrl IsNot Nothing Then
    MessageBox.Show("コントロール有り")
End If

または

'Panel内のコントロール(子コントロール)も検索できる
Dim ctrls As Control() = Me.Controls.Find("TextBox1", False)
If 0 < ctrls.Length Then
    DirectCast(ctrls(0), TextBox).Text += "***"
End If

複数のコントロール検索

[方法1]
'ボタンのコントロールを検索する
'子コントロールは検索できない
For Each btn As Button In Me.Controls.OfType(Of Button)()
    btn.Text = "***"
Next

-------------------------------------------------------------------------
[方法2]
'指定コントロールを検索する
Dim myButtons = {Button1, Button2, Button3, Button4, Button5, Button6}
For Each btn In myButtons
    btn.Text = "***"
Next

-------------------------------------------------------------------------
[方法3]
For no As Integer = 1 To 10
    Dim btns = Me.Controls.Find("button" & no, True)
    If btns.Length > 0 Then
        btns(0).Text = "***"
    End If
Next

全コントロール検索

Public Function getAllControls(ByVal top As Control) As Control()
    Dim ctrls As ArrayList = New ArrayList
    For Each c As Control In top.Controls
        ctrls.Add(c)
        ctrls.AddRange(getAllControls(c))
    Next
    Return DirectCast(ctrls.ToArray(GetType(Control)), Control())
End Function


---------------------------------------------------------------------------
[呼び出し側]

Dim ctrls As Control() = getAllControls(Me)