DataGridView列ごとの入力制限

このQ&Aのポイント
  • VB2005環境で、DataGridViewコントロールの列ごとに入力制限をかける方法を教えてください。
  • KeyDownイベントを使用して、列の名前ごとにif文を書くことで、入力制限を行うことができます。しかし手間がかかります。
  • デザイナから入力制限をかける方法は見つかりませんでした。シンプルに入力制御をかける方法はありますか?
回答を見る
  • ベストアンサー

DataGridView 列ごとの入力制限

VB2005環境です。 DataGridViewコントロールの、列ごとに入力制限をかけたいと 思っています。 たとえば、1列目は数字のみ入力可能、2行目は半角英数字…と いった具合です。 また、できればある列にはIMEMODEを設定してやりたいとも 思っています。 KeyDownイベントで、列の名前ごとにif文をかまして、文字を弾けば いいかと思っていたのですが、思ったより手間で、コピペでの入力 には対応できません。 プロパティでなんとかならないかと思ったのですが、デザイナからは そのようなものは見つかりませんでした。 何かシンプルに入力制御をかけられる方法はないでしょうか? ご教授お願いいたします。

  • ginfix
  • お礼率34% (330/962)

質問者が選んだベストアンサー

  • ベストアンサー
回答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

ginfix
質問者

お礼

回答ありがとうございます。 入力の段階で弾きたいので、CellValidating だとちょっと タイミング的に遅いようです。 しかし、ロジックを参考にさせていただきました。 ありがとうございました。

関連するQ&A

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

    VBAでTextBox2には半角数字のみしか入力できないように制御したいのですが、どうしたらよいのでしょうか。 TextBoxのプロパティでIMEModeを「8-fmIMEModeAlpha」というのにしたのですが、半角英字も入力できてしまいます。 どなたかよい方法をご教授ください。

  • DataGridViewでMauseDown

    VB.NETでDataGridViewでMauseDownイベントを実装するとCellContentClickイベントやCellClickイベントが発生しなくなりました。 VB.NETのバージョンは4.6.2です。 Panelコントロール上に配置したDataGridViewのCellContentClickイベント内でClickされたセルの列に応じた処理を行っています。 このDataGridViewにDrag&Dropの機能を設けるべく、MouseDownイベントを追加しました。 MouseDownイベント内に記述した処理の動作も問題無く、全体の動作確認を行っていると、DataGridViewのCellContentClickイベントが発生していない事に気がつきました。 CellContentClickイベント内の処理の1行目にブレークポイントを設置して確認しました。 試しにMouseDownイベント自体をコメントアウトするとCellContentClickイベント内の処理は実行されました。 MouseDownイベント、CellContentClickイベントの両方を動作させる方法はありますでしょうか?

  • c♯テキストボックスの半角カナのみの入力

    こんばんは、現在Visual Studio2013でC♯用いてコードを書いています。 そこで困ったことがあるのですが、テキストボックスの入力文字制限で半角カナだけにしたく、コントロールのImeModeプロパティをKatakanaHalfにしたのですが、全角文字も入力出来てしまいます。 ImeModeプロパティのみの変更で半角カナだけの入力が可能だと思ったのですが、他にもプロパティ値を変更する必要はあるのでしょうか?

  • DataGridViewでコードで値を入力したい

    VB2005のDataGridViewですが、行と列を指定して そのセルに値を入力したいと思いますが、どのプロ パティに行番号・列番号を入れればいいのでしょうか?

  • DataGridViewの入力内容をリアルタイムでTextBoxにコピーしたい

    よろしくお願いします。 Vb2005+Access2003でWindowsアプリケーションを開発しています。 表題のとおりなんですが、DataGridViewの2列目にあるセルにテキストを入力したら、その入力中のテキストをTextBoxにも反映させたいと考えているのですが、そういったことはできるのでしょうか?方法がありましたら、教えてください。もしできなければ、エンターキーを押したらTextBoxに反映する、という方法でも良いと考えています。 キーボードから入力された内容をDataGridViewとTextBoxの二つのコントロールに同時に表示するということができるのかわからないので、変な質問をしてたらすみません!色々と調べてみたのですがよくわからないので投稿させていただきました。どうぞよろしくお願いします。

  • DatagridViewの値確定

    VB2005です。 DataGridViewを私用しています。 EditModeはEditOnEnterです。 特定のセルの値を変更し、カーソルがその列から移動していない状態で、 Buttonコントロールをクリックすると、ボタンクリック時のイベントの前に、 そのセルのCellValueChangedイベントが発生します。 が、同じ要にセルの値を変更し、カーソルがその列から移動していない状態で、 HScrollBarコントロールをクリックすと、CellValueChangedイベントが発生しません。 そうすると、変更した値が反映されず、前の値で処理が進んでしまいます。 HScrollBarコントロールをクリックしたときも、DataGridViewの値が 確定される方法はないでしょうか。 よろしくお願いいたします。

  • DataGridViewに空白がある場合はエラーにしたい

    よろしくお願いします。VB2005とAccess2005で開発しています。 Form上にDataGridViewを配置しています。 列の一番右端の入力をし終えて、次の新しい行に移動する前に、入力し終えた行に空白のセルがあったらエラーを返したい(空白があります、メッセージを表示したい)のですが、どのような処理を書いたらよいのかわからず悩んでいます。 ちなみにこのDataGridViewはエンターキーで横移動するようなDataGridViewを継承したユーザーコントロールです。 参考サイト→http://www.vbstation.net/tips/inherits_control.htm 一番右端の列を入力し終えたときにどのような処理を行えば良いか教えてください。

  • DataGridView入力確定前の値を取得

    VB.net (VS2005)のDataGridViewに関してですが、 セルの入力が確定される前の値を取得したいのですが いい方法はないでしょうか。 入力可能状態のセルに文字を張付けたとき、 RowStateChangedイベントが発生するのですが、 Enterキーを押下して入力を確定する前に、 張付けた文字列を取得したいです。

  • VB2010のDataGridViewについて

    VB初心者です。 VisualBasic2010のDataGridViewの表示についての質問です。 DataGridViewは通常、行単位でデータを管理する形式になっていますが、 行と列を逆にして操作したいのです。 古いバージョンのVBではコントロール右上のマークをクリックするとタスクが出てきてそこで設定できるようなのですが、VB2010ではタスクの中の操作がなくなっています。 もし、VB2010でも設定する方法があるのでしたら教えてください。 古いバージョンのVBで行と列の入れ換えを行っているサイトがあるので参考までに↓ http://d.hatena.ne.jp/Yamaki/20091214/1260767140

  • DataGridViewの桁数制限に関して

    VB2008 DataGridViewを用いて開発を行っていますが、そのDataGridViewのある列だけ 入力の桁数制限を掛けたいと考えています。 数字のみしか受け付けない方法等はHP上で検索できたものの、やはり桁数制限 だけは調べられませんでした。。。 あるHPより、以下のような記述も見つけましたが、この場合だと数字が打ちこめて しまいます。 そもそも打ちこめる桁数も制限をかける方法はないでしょうか、、、 教えて下さい。 Private Sub DataGridView1_CellValidating・・・・ If e.FormattedValue.ToString.Length < 5 Then '5文字以上の場合 e.Cancel = True 'キャンセル End If よろしくお願いします。

専門家に質問してみよう