VB2005環境です。
DataGridViewコントロールの、列ごとに入力制限をかけたいと
思っています。
たとえば、1列目は数字のみ入力可能、2行目は半角英数字…と
いった具合です。
また、できればある列にはIMEMODEを設定してやりたいとも
思っています。
KeyDownイベントで、列の名前ごとにif文をかまして、文字を弾けば
いいかと思っていたのですが、思ったより手間で、コピペでの入力
には対応できません。
プロパティでなんとかならないかと思ったのですが、デザイナからは
そのようなものは見つかりませんでした。
何かシンプルに入力制御をかけられる方法はないでしょうか?
ご教授お願いいたします。
No.1ベストアンサー
- 回答日時:
vb2005は触った事がある位ですが・・・(vb2003も大差無いけど・・・)
DataGridView.CellValidating イベント と言うのが、.NET Framework version 2.0 で新しく追加されたらしくて、セルが入力フォーカスを失い、内容の検証が有効になった場合にイベントが発生するそうです。
チェックは入力が終わった段階で行いますので、入力途中は制限しません。
これが正しい使い方かわからないので、間違っていたら誰か訂正してください。
Imports System.Text.RegularExpressionsで、正規表現が使えるようにしてください。
Private Sub DataGridView1_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
'新しいレコードの行ならチェックしない
If DataGridView1.Rows(e.RowIndex).IsNewRow Then Return
DataGridView1.Rows(e.RowIndex).ErrorText = ""
Select Case e.ColumnIndex
Case 0
If Regex.IsMatch(e.FormattedValue.ToString(), "^[0-9]+$") = False Then
e.Cancel = True
DataGridView1.Rows(e.RowIndex).ErrorText = "数字だけにしてね"
End If
Case 1
If Regex.IsMatch(e.FormattedValue.ToString(), "^[a-zA-Z0-9]+$") = False Then
e.Cancel = True
DataGridView1.Rows(e.RowIndex).ErrorText = "半角英数にしてね"
End If
End Select
End Sub
IMEの設定の変更は、こんなでいいのか?
Private Sub DataGridView1_CellStateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellStateChangedEventArgs) Handles DataGridView1.CellStateChanged
If e.Cell.Selected = True Then
Select Case e.Cell.ColumnIndex
Case 0, 1
DataGridView1.ImeMode = Windows.Forms.ImeMode.Off
Case 2
DataGridView1.ImeMode = Windows.Forms.ImeMode.On
End Select
End If
End Sub
回答ありがとうございます。
入力の段階で弾きたいので、CellValidating だとちょっと
タイミング的に遅いようです。
しかし、ロジックを参考にさせていただきました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
3分あったら何をしますか?
カップ麺にお湯を入れて、できるまでの3分間で皆さんは何をしていますか?
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
自分の通っていた小学校のあるある
進学したり大人になってから、「あれって自分の小学校だけだったのかな」と思うことありますよね。 逆に「他の小学校ってそんなことするの!?」と思ったり。 そんな「自分の通っていた小学校」のあるあるを教えてください!
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
DataGridViewの桁数制限に関して
Visual Basic(VBA)
-
DataGridViewのセル編集完了後に値を設定するには
Visual Basic(VBA)
-
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
-
4
初心者)DataGridViewの入力桁数を制限したいのですが
Visual Basic(VBA)
-
5
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
6
DataGridViewの内容をDBに反映する時
Visual Basic(VBA)
-
7
VB.NET2003 テキストボックスに半角英数字以外入力させない
Visual Basic(VBA)
-
8
CellEnterイベント仕様について
Visual Basic(VBA)
-
9
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
10
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
11
CloseとDisposeの違い
Visual Basic(VBA)
-
12
DataGridViewのフォーカス遷移について
Visual Basic(VBA)
-
13
DataGridViewでyyyy/MM/dd
Visual Basic(VBA)
-
14
DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
15
DataGridViewで入力チェック後、フォーカスをあてたい
Visual Basic(VBA)
-
16
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
17
DateTimePickerでに年月までしか選択できないようにしたいです。
Visual Basic(VBA)
-
18
VB.net 重複チェックがしたいです
Visual Basic(VBA)
-
19
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
20
VB.NETでコンボボックスの1行目を空白にしたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クロスサイト・スクリプティン...
-
エクセルVBA テキストボックス...
-
初歩的な事だと思います。 Sub...
-
DataGridView 列ごとの入力制限
-
DataGridViewの桁数制限に関して
-
入力フォームの値をQRコードで...
-
TextBoxから数字が文字...
-
テキストボックスの番号を使っ...
-
VBA R1C1形式で変数の入力について
-
X(元Twitter)で問題があり、お...
-
EXCEL VBA で指定した範囲に入...
-
アクセスのマクロ
-
エディットボックスの入力制限...
-
Excel-VBAでInputBox+Pulldown...
-
python:paiza.ioでのinput関数...
-
スマートフォン向けフォームで...
-
VBAのユーザーフォーム上で名簿...
-
INPUTタグ disabledでテキスト...
-
excel vba でユーザーフォーム...
-
Loopの強制終了 マクロ Excel VBA
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
初歩的な事だと思います。 Sub...
-
テキストボックスの番号を使っ...
-
Excel-VBAでInputBox+Pulldown...
-
EXCEL VBA で指定した範囲に入...
-
VBAでInputBoxの再入力をさせる...
-
DataGridView 列ごとの入力制限
-
数字以外の入力をエラーにする...
-
TextBoxから数字が文字...
-
入力フォームの値をQRコードで...
-
excel vba でユーザーフォーム...
-
「イ分」・・・フンという文字...
-
エディットボックスの入力制限...
-
DataGridViewの桁数制限に関して
-
アクセスのマクロ
-
c#でTextBoxの入力制限
-
TextBoxに特定の文字のみ入力を...
-
教えて!全角文字「μ」の半角
-
入力モードを自動的に半角カタ...
-
X(元Twitter)で問題があり、お...
おすすめ情報