VB.net初心者ですよろしくお願いします

テキストボックス入力制限で全角文字のみを以下の方法で実現させました

(1)テキストボックス選択時のImeMode初期値を全角ひらがなに設定
(2)ボタン押下時のイベントで入力された文字のサイズを確認し、半角が混ざっていたらエラー

これで基本的には問題ないのですが、後学のために入力文字自体を全角のみに制限できないかを調べています

いろいろ調査してみて半角のみは可能であることがわかり、実際にコーディングもしてみました
しかし全角のみは調査しても情報が見つかりません

全角のみの入力制限が可能かどうか、理由も添えてアドバイスいただけると助かります

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

参考にしてください。



Public Shared Function Fint_GetLenB(ByVal vstr_String As String) As Integer

Return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(vstr_String)

End Function

Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

Dim s As String = TextBox1.Text
If Fint_GetLenB(s) <> s.Length * 2 Then
MsgBox("半角が含まれています")
e.Cancel = True
End If

End Sub
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB.net テキストボックスの入力制限全角のみ

VB.net初心者です
テキストボックスの入力制限で全角文字のみを実現させたいのですが、いろいろ検索して調査してもわかりません。
どなたかアドバイスをいただけると助かります、よろしくお願いします。

Aベストアンサー

強制的にIMEをONにする(VBAでの処理例ですが)
http://officetanaka.net/excel/vba/tips/tips16.htm

それでもIMEを意図的に切ったり、半角に変換は可能なので
入力確定した文字を確認し、半角が入力されている場合再度入力状態へ戻すなどの処理が必要ですね

QVB.NET2003 テキストボックスに半角英数字以外入力させない

お世話になります。

初めてコーディングを行っておりますが、
文字制御についてわからないのでご享受ください。

IMEの設定 Alphaになっているテキストボックスがあります。

こちらに、直接入力や、貼り付けなどで、
全角文字、半角カナが入力されないようにするにはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ImeModeはOffの方がいいように思います

キー入力に関しては
TextBoxのKeyDownイベントで
if e.KeyCode = Keys.ProcessKey then
  e.Handled = true
  TextBox1.ImeMode = ImeMode.Off
else if e.Keycode = Key.Insert then
  ' キーボードによる貼り付け操作
  if e.shift then
    e.Handled = true
  end if
End if
といった具合で処理出来そうです

マウスの右クリックのコンテキストメニューの対策は
ContextMenuをFormに貼り付けてメニュー項目は何も設定しません
Form_Loadイベントなどで
TextBox1.ContextMenu = ContextMenu1
といった具合に設定します …

QTextBoxに半角数字のみの入力しかできないようにしたい

タイトルどおりです。
フォームに貼り付けた、TextBoxに、半角数字のみしか入力できないようにしたいです。
000000~999999までのコード(数字)を入力させるようにするわけですが、そのままだと半角英数も全角も入力できてしまいます。

GrapeCity社製のカスタムコントロール「InputMan」の“Number”を用いると簡単なのですが、これだとカーソルがボックス内の右端にきて、一の位から入力が始まってしまいます。
数字は、ボックス内の左側から入力されていくようにしたいのですが、“Number”だとなんか出来なさそう・・・?
(“Number”で左側から入力できるならそれがいいのですが)

そこで、TextBoxを使うことにしたのですが、TextBoxだと、半角数字のみしか入力できないような制限がかけるのかが、わかりません。

もし、お分かりの方がいらっしゃいましたら、ご教授下さいませ。

Aベストアンサー

コピペですみません。
VB6だと、

Private Sub TextBox_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyBack, Asc("0") To Asc("9"), Asc("-"), Asc(".")
Case &H1 ' Ctrl + A
TextBox.SelStart = 0
TextBox.SelLength = Len(TextBox.Text)
Case &H3 ' Ctrl + C
Case &H16 ' Ctrl + V
Case &H18 ' Ctrl + X
Case &H1A ' Ctrl + Z
Case Else
KeyAscii = 0
End Select
End Sub

で、いかがでしょうか。

コピペですみません。
VB6だと、

Private Sub TextBox_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyBack, Asc("0") To Asc("9"), Asc("-"), Asc(".")
Case &H1 ' Ctrl + A
TextBox.SelStart = 0
TextBox.SelLength = Len(TextBox.Text)
Case &H3 ' Ctrl + C
Case &H16 ...続きを読む

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

Q【VB】コンボボックスにデータベースから取り出した値を入れたい

VB2005です。

表題の通りですがやり方がよくわかりません。
データベースに接続し、
SQLで重複しない値を取り出すところまではできています。

SQL=SELECT DISTINCT FieldName FROM TableName

VB6の時はこんなソースでした
Do Until rs.EOF
   Combo1.AddItem.Fields("FieldName")
   rs.MoveNext
Loop

VB2005ではどう書くのでしょう?
よろしくご教授ください。

Aベストアンサー

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", dbFilePath)
  Dim sql As String = "SELECT DISTINCT FieldName FROM TableName"
  Dim conn As New OleDbConnection(connectionString)
  Dim query As New OleDbCommand(sql, conn)

  Try
    conn.Open()
    Dim reader As OleDbDataReader = query.ExecuteReader()
    While (reader.Read())
      Me.ComboBox1.Items.Add(reader.Item("FieldName"))
    End While
    reader.Close()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  Finally
    conn.Close()
  End Try

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Sourc...続きを読む

QForm間の値の渡し方

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

Aベストアンサー

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。

あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

Qラジオボタンの初期指定

ラジオボタンを12個使用する画面を今作っているのですが、初期立ち上げ時に1番目のラジオボタンを選択した状態にするのはどうすれば良いのでしょうか?

プログラムの流れ上選んでいなくても、1番目を選んだ状態に次のウィンドウは開くのですが、聞く話で、それは不安定要素があるって聞いた物ですから。

Aベストアンサー

VB.NETだったら
デザイン時に
Checkedをtrue

QVB.NETのテキストボックスの書式指定

VB.NETで開発練習中です。

フォームへ呼び出したデーターを、数値データであれば
カンマ区切りとか、小数点以下の桁数を指定するのは
どうしたらできるのでしょうか?
ソースのACCESSのテーブルには指定してあっても、
呼び出したデータには当然反映されませんよね。
初歩的ですがどなたか教えてください。
よろしくお願いします。

Aベストアンサー

No.3です。

私のレスは間違いでした。

FormのLoadイベントでテキストボックスに値を入れているのですね?

であれば、TextBoxのTextChangedイベントが発生します。このイベントで処理をします。

テキストボックスが多数あるのであれば、コントロール配列を使って処理をすればいいでしょう。

QVBAのTextBoxに半角数字のみ入力したい

VBAでTextBox2には半角数字のみしか入力できないように制御したいのですが、どうしたらよいのでしょうか。

TextBoxのプロパティでIMEModeを「8-fmIMEModeAlpha」というのにしたのですが、半角英字も入力できてしまいます。

どなたかよい方法をご教授ください。

Aベストアンサー

#3 です。

失礼。#3 だと Tab と Enter まで入力できないので、以下に差し替えます。

  blnFlag = ((KeyCode >= 48) * (KeyCode <= 57)) _
      + ((KeyCode >= 96) * (KeyCode <= 105)) _
      + (KeyCode = 8) + (KeyCode = 13) + (KeyCode = 9)

> IMEModeを「8-fmIMEModeAlpha」

これだと入力モードの変更が可能なので、3-fmIMEModeDisable にしといた方が
良いかと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング