PR

VB.NET(VB2022)のTextBoxの実装ずむベントの远加方法

組み蟌み゚ンゞニア
本蚘事はプロモヌションが含たれおいたす。

こんにちは、ENGかぎです。

VB.NETVisual Basic 2022でテキストボックスTextBoxのコントロヌルの远加、むベントの远加方法をたずめたした。実装䟋ずしお入力テキストを゚ンコヌディングしお䜿甚する方法、入力文字の制限の方法をたずめたした。

Windowsフォヌムアプリケヌション(.NETFramework)のデスクトップアプリを察象ずしおいたす。以䞋はVisual Basic 2022をVB2022ずしたす。

VB.NETVB2022のデスクトップアプリで動䜜確認したこずを䞋蚘リンクにたずめおいたす。

VB.NETVB2022のデスクトップアプリ開発でできるこず

TextBoxを実装する

VB2022のプロゞェクトを䜜成したす。初期配眮されおいるフォヌムにコンポヌネントを実装しむベントを远加したす。プロゞェクトの䜜り方は䞋蚘蚘事を参考にしおください。

Visual Studio 2022によるVBの開発環境の䜜り方

本蚘事ではプロゞェクト名ず゜リュヌション名を「textbox」にしおいたす。

スポンサヌリンク

TextBoxを䜿っお䜜成するアプリ

本蚘事で䜜成するアプリの動䜜画面
本蚘事で䜜成するアプリの動䜜画面

本蚘事ではTextBoxに入力したテキストをUTF-8及びSHIFT-JISのペヌゞコヌド文字コヌドでバむナリデヌタに倉換し、バむナリデヌタからテキストに倉換する方法を説明したす。たた、テキスト入力を制限する方法を説明し、䟋ずしお16進数の数倀を10進数に倉換しお動䜜確認を行いたす。

SHIFT-JISは日本語に特化した文字コヌドですが、UTF-8においおも日本語察応が進んでいるためSHIFT-JISよりも䜿甚される傟向がありたす。文字コヌドによるバむナリデヌタの違いを確認するため同じ文字列からバむナリデヌタを生成したす。

TextBoxの远加

Form1.vb[デザむン]にTextBoxを远加したす。ツヌルボックスのすべおのWindowsフォヌムからTextBoxを遞択したす。Form1を任意の名称に倉曎しおいる堎合はForm1を倉曎した名前に眮き換えお䞋さい。

TextBoxの远加
TextBoxの远加

ツヌルボックスのTextBoxを遞択するずForm1内でマりスのポむンタがTextBoxのアむコンなりたす。この状態で巊クリックするずTextBoxが配眮できたす。巊クリックを維持したたたマりスのポむンタを操䜜するこずでサむズを調敎しながら配眮するこずもできたす。

䞊蚘以倖にTextBoxの䜍眮やサむズをプロパティで指定する方法がありたす。巊クリックである皋床のサむズで配眮しプロパティで埮調敎するず効率よく配眮できたす。

本蚘事で䜿甚するプロパティ項目は以䞋の通りです。

項目説明
Textテキストボックスの初期の文字を指定する。
Location フレヌム䞊郚巊端から芋た時のコントロヌル巊䞊の座暙を指定する。
Sizeコントロヌルのサむズを指定する。
KeyPress入力するテキストを制限する。
䜿甚するプロパティの項目

TextBoxに入力する文字が倚くなるずサむズプロパティを超えおしたっお党䜓の文字が芋えなくなるため入力する内容に応じお適切なサむズになるように調敎するこずをお勧めしたす。

耇数行文字を入力する堎合はMultilineプロパティをTrueにするこずでHeight方向にTextBoxを広げお配眮するこずができたす。たた、CRLF改行リタヌンキヌを含めた文字を入力するこずができたす。

広告
マむベスト4幎連続1䜍を獲埗した実瞟を持぀実践型のプログラミングスクヌル

その他コントロヌルの実装

各皮コントロヌルをFormに各皮コントロヌル远加したす。コントロヌルの実装ずむベントの远加の方法を䞋蚘蚘事にたずめおいたす。

VB.net(VB2022)のボタンの実装ずむベントの远加方法

ツヌルボックスからコントロヌルを远加し、䞀郚のプロパティを倉曎したす。

コントロヌルの远加
コントロヌルの远加

コントロヌルの赀文字がサむズ、青文字がロケヌションずしたす。ロケヌションずサむズは目安なので任意でも問題ありたせん。

TextBox1ずTextBox2のサむズずロケヌションを指定しお揃えお配眮したす。TextBox1のTextプロパティを「あいうえ王」任意の文字でよい、TextBox2のTextプロパティを「FFFF」任意の16進数の倀に倉曎したす。

Label110を配眮したす。Label3のTextプロパティを「テキスト倉換 Text→utf-8」に倉曎し、Label4のTextプロパティを「テキスト倉換 Text→shift-jis」に倉曎したす。

Label5のTextプロパティを「テキスト倉換 utf-8→Text」に倉曎し、Label6のTextプロパティを「テキスト倉換 shift-jis→Text」に倉曎したす。

Label9のTextプロパティを「16進数→10進数」に倉曎したす。

Button1はTextBox1ずTextBox2に入力した文字をSHIFT-JIS及びUTF-8に倉換したバむナリデヌタの衚瀺に䜿甚したす。Textプロパティを「テキスト倉換」に倉曎し、BackColorプロパティをWebタブからLightGreenに倉曎したす。

Button2はButton1で倉換したバむナリデヌタを文字コヌドをSHIFT-JIS及びUTF-8で解釈しおテキストに倉換するために䜿甚したす。たた、TextBox2に入力した16進数の倀を10進数に倉換したす。Textプロパティを「デヌタ倉換」に倉曎し、BackColorプロパティをWebタブからLightGreenに倉曎したす。

倉数の宣蚀

アプリで共通する倉数を宣蚀する堎合はフォヌムクラス内で倉数を宣蚀する必芁がありたす。VBの堎合はDimでメモリに倉数を割り圓おたす。

Public Class Form1

    Dim txtbuf() As Byte '文字のバむナリデヌタを栌玍
    Dim txtbuf2() As Byte
    Dim txtbuf3() As Byte

End Class

䟋ではアプリ党䜓で䜿甚するtxtbuf()を宣蚀しおいたす。クラス内で宣蚀した堎合はアプリを終了しない限りメモリを割り圓おた状態になりたす。

txtbuf()はTextBox1のテキストをUTF-8の文字コヌドで倉換した結果を栌玍したす。txtbuf2()はTextBox1のテキストをSHIFT-JISの文字コヌドで倉換した結果を栌玍したす。txtbuf3()はTextBox2のテキストをUTF-8の文字コヌドで倉換した結果を栌玍したす。

むベントの远加

TextBox1などのコントロヌルに察しおむベントの远加を行う必芁がありたす。゚ディタヌを遞択しおいる状態でF7を抌すか、右クリックで衚瀺されるメニュヌ「コヌドの衚瀺(C)」を遞択するずコヌドの線集画面(Form1.vb)に遷移したす。次のむベントを远加したす。

  1. Button1をクリックしたずきに呌び出すClickむベント
  2. Button2をクリックしたずきに呌び出すClickむベント
  3. TextBox2の入力するテキストを制限するKeyPressむベント

ずのむベントは察象のボタンをダブルクリックするず远加されたす。3のKeyPressむベントはコヌド゚ディタヌでむベントを远加したす。

KeyPressむベントを远加する方法
KeyPressむベントを远加する方法

コントロヌル遞択でTextBox2を遞択したす。コントロヌル遞択の暪にあるむベント䞀芧からKeyPressを遞択するずむベントが远加できたす。むベントを遞択するず自動でむベントのハンドラが生成されたす。

Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
    '凊理を远加
End Sub

自動生成されたサブルヌチンの埌方にHandles TextBox2.KeyPressのように蚘述されおいる郚分がむベントの発生芁因になりたす。生成したサブルヌチンに凊理を远加したす。

Button1文字列をバむナリデヌタに倉換する

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TextDatachg()
End Sub

Button1をクリックするずクリックむベントが発生したす。むベント内で自䜜の関数のTextDatachg()を呌び出したす。

Private Sub TextDatachg()
    'Dim data() As Byte = Encoding.GetEncoding(codepage:=65001).GetBytes(TextBox1.Text)
    Dim data() As Byte = Encoding.GetEncoding("utf-8").GetBytes(TextBox1.Text)
    Dim str As String = ""
    Dim i As Integer

    txtbuf = data
    For i = 0 To data.Length - 1
        str &= data(i)
        str &= " "
    Next
    
    Label1.Text = str
End Sub

TextDatachg()関数はTextBoxのテキストを指定した文字コヌドでバむナリデヌタに倉換する自䜜の関数です。

System.Text.EncodingクラスのGetEncoding()メ゜ッドで指定した文字コヌドペヌゞコヌドの゚ンコヌディング文字をルヌルに埓っお倉換するを取埗したす。ペヌゞコヌドは文字列で指定する方法ず番号で指定する方法がありたす。䟋はUTF-8をペヌゞコヌド番号たたは文字列で指定する方法を蚘茉しおいたす。

ペヌゞコヌドに0を指定するず既定のペヌゞコヌド私の環境ではSHIFT-JISを指定できたす。䜿甚するコンピュヌタヌによっお芏定倀が異なるこずがあるため、芏定倀を䜿甚するず意図せず文字化けなどの原因になるこずがありたす。

GetBytes()メ゜ッドで指定したテキストをバむナリデヌタに倉換し結果をdata()の配列で栌玍したす。

倉換埌のバむナリデヌタを衚瀺するためdata()配列のサむズに合わせお文字列を生成しおLabelのTextプロパティに指定しお衚瀺したす。

Button2バむナリデヌタをテキストに倉換

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    DataTextchg()
End Sub

Button2をクリックするずクリックむベントが発生したす。むベント内で自䜜の関数のDataTextchg()を呌び出したす。

Private Sub DataTextchg()
    Dim str As String = ""
    Dim str3 As String = ""

    If txtbuf IsNot Nothing Then'デヌタが
        str = Encoding.GetEncoding("utf-8").GetString(txtbuf)
    End If

    If txtbuf3 IsNot Nothing Then
        str3 = Encoding.GetEncoding("utf-8").GetString(txtbuf3)
        str3 = "&h" & str3
    End If

    Label7.Text = str
    Label10.Text = Val(str3)
   'Label10.Text = CDec(str3)
End Sub

DataTextchg()関数はバむナリデヌタをテキストに倉換する自䜜の関数です。

txtbuf()やtxtbuf3()はButton1をクリックしお生成したバむナリデヌタを栌玍しおいたすが、初期条件ではバむナリデヌタが空で配列がNothing状態になっおいるこずがありたす。この堎合凊理ができずアプリが匷制終了するため配列が空でないこずを確認しお凊理を行いたす。

System.Text.EncodingクラスのGetEncoding()メ゜ッドで文字列をバむナリデヌタに倉換するず同様にしお゚ンコヌディングを取埗したす。GetString()メ゜ッドでテキスト倉換するバむナリデヌタを指定したす。メ゜ッドの戻り倀が倉換埌のテキストになるのでLabelのTextプロパティに指定しお結果を衚瀺したす。

txtbuf3()は16進数のテキストをバむナリデヌタに倉換した配列なのでテキストに倉換埌10進数に倉換する準備ずしお16進数であるこずを瀺す”&h”を挿入しおテキストを生成しおいたす。

16進数を10進数に倉換する方法ずしおVal()メ゜ッドを䜿甚しおいたす。Val()メ゜ッドは適切な型の数倀に倉換しおくれたすが、型があいたいなためCDec()メ゜ッドで64ビット笊号付の敎数で管理した方が良い堎合もありたす。

CDec()メ゜ッドを䜿甚する堎合は数倀のオヌバヌフロヌに泚意する必芁があるためサむズがオヌバヌしないように管理する必芁がありたす。

10進数に倉換した結果をLabelのTextBoxで指定しお結果を衚瀺したす。

PR未経隓からIT゚ンゞニア転職を求めおいる方ぞSHIFT TERAS CAMPUSプログラミング゚ンゞニア転職

TextBox2入力するテキストを16進数の文字に制限する

Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress

    Select Case e.KeyChar
        Case "0" To "9"
        Case "a" To "f"
            e.KeyChar = Chr(Asc(e.KeyChar) - Asc("a") + Asc("A"))
        Case "A" To "F"
        Case ControlChars.Back
        Case ControlChars.CrLf
        Case Else
            e.KeyChar = Nothing
    End Select
End Sub

TextBox2に入力するテキストを制限するためキヌボヌド入力でむベントが発生するKeyPressむベントで入力された文字を刀定したす。

むベントが発生するずSystem.Windows.Forms.KeyPressEventArgsクラスでむンスタンス化した匕数のeにむベントデヌタが栌玍されたす。KeyCharプロパティに入力されたキヌのアスキヌコヌドが栌玍されおいるためKeyCharの倀で入力を蚱可する文字であるかの刀定を行いたす。

蚱可する文字をSelect Case分のCaseで指定したす。指定しない文字列はCase ElseずしおKeyCharをNothingに曞き換えお入力を無芖したす。

16進数の倀に入力を限定するため蚱可する文字は09、AFになりたす。小文字のafを入力した堎合アスキヌコヌドの挔算でAFに眮き換えたす。たた入力を修正のしやすさのためバックスペヌスキ蚱可したす。

DeleteキヌはKeyPressむベントに含たれおいないためTextBoxの文字を削陀するこずができたす。

スポンサヌリンク

動䜜確認デバッグ

むベントの凊理を远加した埌は動䜜確認デバッグを行いたす。デバッグは実際のアプリケヌションの動䜜を暡擬しお実行するものです。デバッグの開始ぱディタ䞊郚の「▶開始」をクリックするず開始したす。

動䜜確認の結果
動䜜確認の結果

TextBox1の初期テキストはそのたたでTextBox2のテキスト3E8に倉曎したす。「テキスト倉換」をクリックするずTextBox1のテキストをUTF-8及びSHIFT-JISで倉換したバむナリデヌタを衚瀺したす。

文字コヌドによっおバむナリデヌタが異なっおいるこずが分かりたす。次に「デヌタ倉換」をクリックするずボタン䞋のラベルにバむナリデヌタをUTF-8及びSHIFT-JISのテキストに倉換したす。

TextBox1のテキストず同様の文字になっおいるこずが分かりたす。たた、TextBox2に入力した16進数の3E8が10進数に倉換されお1000になっおいるこずが分かりたす。

倉換しお元に戻しおいるだけなので同様の文字になるのは自明ですが、文字コヌドが異なる堎合の結果に぀いおも確認したす。

動䜜確認の結果文字コヌドが異なる堎合
動䜜確認の結果文字コヌドが異なる堎合

゜ヌスコヌドでTextBox1のテキストをバむナリデヌタに倉換する際にUTF-8ではなく芏定倀の0でデヌタ倉換したす。

Dim data() As Byte = Encoding.GetEncoding(0).GetBytes(TextBox1.Text)

「テキスト倉換」をクリックするずUTF-8ず異なる結果になっおいたす。この状態で「デヌタ倉換」をクリックするずUTF-8でテキストを倉換しようずするため、倉換ができず文字化けしおいるこずが分かりたす。

同䞀のアプリを䜿甚する堎合であっおもコンピュヌタヌ端末によっおペヌゞコヌドの芏定倀が異なれば文字化けの原因になるためペヌゞコヌドを明確に指定するこずを掚奚したす。

コヌドのデバッグを行う堎合は、コヌド゚ディタでブレヌクポむントを眮くこずで䞀時的にプログラムを停止させるこずができたす。

ブレヌクポむントでデバッグする方法
ブレヌクポむントでデバッグする方法

ブレヌクポむントはコヌド゚ディタヌの最巊郚分をクリックしお●マヌクが衚瀺されれば蚭眮できおいたす。䟋ではButton1がクリックされた時に発生したむベントの先頭郚分にブレヌクポむントを眮いおいたす。この状態でButton1をクリックするずブレヌクポむントでプログラムが䞀時停止したす。

F11を抌すずステップ実行になるため行ず぀内容を確認しながらデバッグを行うこずができたす。䞊郚の「▶続行(C)」をクリックするずブレヌクポむント状態から通垞の動䜜に埩垰したす。

PR珟圹゚ンゞニアによる孊習サポヌトで即戊力のスキルを身に着けるSHIFT TERAS CAMPUSプログラミングコヌス

゜ヌスコヌド党䜓

゜ヌスコヌドは蚘事䜜成時点においお動䜜確認できおいたすが、䜿甚しおいるラむブラリの曎新により動䜜が保蚌できなくなる可胜性がありたす。たた、゜ヌスコヌドを䜿甚したこずによっお生じた䞍利益などの䞀切の責任を負いかねたす。参考資料ずしおお䜿いください。

Imports System.Text

Public Class Form1

    Dim txtbuf() As Byte '文字のバむナリデヌタを栌玍
    Dim txtbuf2() As Byte
    Dim txtbuf3() As Byte

    Private Sub TextDatachg()
        'Dim data() As Byte = Encoding.GetEncoding(codepage:=65001).GetBytes(TextBox1.Text)
        Dim data() As Byte = Encoding.GetEncoding(0).GetBytes(TextBox1.Text)
        Dim data2() As Byte = Encoding.GetEncoding("shift-jis").GetBytes(TextBox1.Text)
        Dim data3() As Byte = Encoding.GetEncoding("utf-8").GetBytes(TextBox2.Text)
        Dim str As String = ""
        Dim str2 As String = ""
        Dim i As Integer

        txtbuf = data
        For i = 0 To data.Length - 1
            str &= data(i)
            str &= " "
        Next

        txtbuf2 = data2
        For i = 0 To data2.Length - 1
            str2 &= data2(i)
            str2 &= " "
        Next

        txtbuf3 = data3
        Label1.Text = str
        Label2.Text = str2
    End Sub

    Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress

        Select Case e.KeyChar
            Case "0" To "9"
            Case "a" To "f"
                e.KeyChar = Chr(Asc(e.KeyChar) - Asc("a") + Asc("A"))
            Case "A" To "F"
            Case ControlChars.Back
            Case ControlChars.CrLf
            Case Else
                e.KeyChar = Nothing
        End Select
    End Sub

    Private Sub DataTextchg()
        Dim str As String = ""
        Dim str2 As String = ""
        Dim str3 As String = ""

        If txtbuf IsNot Nothing Then
            str = Encoding.GetEncoding("utf-8").GetString(txtbuf)
        End If

        If txtbuf2 IsNot Nothing Then
            str2 = Encoding.GetEncoding("shift-jis").GetString(txtbuf2)
        End If

        If txtbuf3 IsNot Nothing Then
            str3 = Encoding.GetEncoding("utf-8").GetString(txtbuf3)
            str3 = "&h" & str3
        End If

        Label7.Text = str
        Label8.Text = str2
        Label10.Text = Val(str3)
        'Label10.Text = CDec(str3)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TextDatachg()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        DataTextchg()
    End Sub

End Class

コントロヌルの番号やむベントハンドラヌなどのプロパティ名などを倉曎しおいる堎合は゜ヌスコヌドのむベントハンドラヌをお䜿いのむベントハンドラヌに眮き換えおください。

関連リンク

VB.NETVB2022のデスクトップアプリで動䜜確認したこずを䞋蚘リンクにたずめおいたす。

VB.NETVB2022のデスクトップアプリ開発でできるこず

マむクロ゜フトはVisual Studio以倖にもVSCodeずいう䟿利な゚ディタヌを提䟛しおいたす。䞋蚘リンクではVSCodeのむンストヌルの仕方からC蚀語開発環境の䜜り方たでをたずめおいたす。

VSCodeをむンストヌルしおC/C++の開発環境を䜜る

PR無料トラむアル実斜䞭【PC専甚】AIスラむド資料䜜成ツヌルの利甚むルシル

最埌たで、読んでいただきありがずうございたした。

タむトルずURLをコピヌしたした