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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) エクセルのマクロを教えてください。 1 2022/03/30 09:29
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
DataGridViewの桁数制限に関して
Visual Basic(VBA)
-
DataGridViewの内容をDBに反映する時
Visual Basic(VBA)
-
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
-
4
DataGridViewのセル編集完了後に値を設定するには
Visual Basic(VBA)
-
5
初心者)DataGridViewの入力桁数を制限したいのですが
Visual Basic(VBA)
-
6
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
7
CloseとDisposeの違い
Visual Basic(VBA)
-
8
VB.NET2003 テキストボックスに半角英数字以外入力させない
Visual Basic(VBA)
-
9
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
10
DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
11
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
12
C# dataGridViewの値だけクリア
C言語・C++・C#
-
13
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
14
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
15
CellEnterイベント仕様について
Visual Basic(VBA)
-
16
DataGridViewでyyyy/MM/dd
Visual Basic(VBA)
-
17
c#でTextBoxの入力制限
C言語・C++・C#
-
18
[VB.net] DataGridViewの列ヘッダー複数行表示に伴う不具合?について
Visual Basic(VBA)
-
19
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
20
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
EXCEL VBA で指定した範囲に入...
-
テキストボックスの番号を使っ...
-
初歩的な事だと思います。 Sub...
-
Excel-VBAでInputBox+Pulldown...
-
VBAでInputBoxの再入力をさせる...
-
DataGridView 列ごとの入力制限
-
アクセスのマクロ
-
エディットボックスの入力制限...
-
excel vba でユーザーフォーム...
-
TEXTAREA に入力時の位置
-
SQL で数値フィールドにDBNULL...
-
VBA R1C1形式で変数の入力について
-
数字以外の入力をエラーにする...
-
エディットの入力チェック
-
「ゔ」をHTMLで記述したい
-
textboxに数字だけを入力させる...
-
教えて!全角文字「μ」の半角
-
c#でTextBoxの入力制限
-
vbaで同じテキストボックスを繰...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
初歩的な事だと思います。 Sub...
-
Excel-VBAでInputBox+Pulldown...
-
テキストボックスの番号を使っ...
-
VBAでInputBoxの再入力をさせる...
-
DataGridViewの桁数制限に関して
-
EXCEL VBA で指定した範囲に入...
-
「イ分」・・・フンという文字...
-
数字以外の入力をエラーにする...
-
教えて!全角文字「μ」の半角
-
エディットボックスの入力制限...
-
DataGridView 列ごとの入力制限
-
VBA R1C1形式で変数の入力について
-
TextBoxから数字が文字...
-
アクセスのマクロ
-
excel vba でユーザーフォーム...
-
HTMLで全角文字のみ入力するに...
-
accessで該当するレコードがな...
-
入力フォームの値をQRコードで...
-
複数行の入力を受け取る方法
おすすめ情報