- PR -

DataGridViewの入力制限

1
投稿者投稿内容
きむた
会議室デビュー日: 2007/02/21
投稿数: 10
投稿日時: 2007-02-21 15:47
いつも参考にさせて頂いております。

DataGridViewに列を追加し、列の編集を選択した時に『MaxInputLength』というプロパティがあります。
この設定画面上では変更できるのですが、プログラムから設定するにはどのようにすればいいのでしょうか?
DataGridView.Columns(0). っとやっても MaxInputLength が出てくれません。
ご教授お願い致します。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-02-21 16:02
MaxInputLength はどのクラスのプロパティですか?
DataGridView.Columns(0)の型は何ですか?
そこに原因があります。ヘルプで調べてみて下さい。
きむた
会議室デビュー日: 2007/02/21
投稿数: 10
投稿日時: 2007-02-21 16:43
KI様 ご返答ありがとうございます。

DataGridViewのプロパティの所ににColumnsの項目があります。
(コレクション)と表示されているので、クリックをすると列の追加ができます。
その列のプロパティ上に『MaxInputLength』あります。
Columnsのプロパティで設定する為、やってみたのですが出てくれないのです。
ヘルプ等も見てみましたが、該当する所を見つけられず困っています。

記入を忘れていましたがVB2005です。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-02-21 17:02
何か全然前進してなくね?w

[ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2007-02-21 17:06 ]
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-02-21 17:31
どうも言いたいことが上手く伝わらなかったようです。
コードから設定するのであれば、デザイナのことは関係ないので、今は忘れて下さい。

コードから設定しようと試みている箇所で、
(仮にフォーム上の DataGridView の名前を dataGridView1 としますと)

dataGridView1.Columns(0)

のように書いていらっしゃるのですよね?
この後ろに「.」と入力すると入力候補が表示されますが、
そのときに表示されるのはあくまで「dataGridView1.Columns(0)」の型
(正確にはコンパイル時の型)のメンバです。
だからこういうケースではまず「dataGridView1.Columns(0)」がどういう型なのかを
MSDNを辿って調べることです。

DataGridView の Columns プロパティ

http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridview.columns(VS.80).aspx

DataGridViewColumnCollection の Item プロパティ

http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridviewcolumncollection.item(VS.80).aspx


一方で、MaxInputLength は、どのクラスのプロパティでしょうか?
これもMSDNで検索してみてください。


以上を理解した上で、キャストを用いることで解決できるはずです。
きむた
会議室デビュー日: 2007/02/21
投稿数: 10
投稿日時: 2007-02-21 19:19
KI様 大変丁寧にお教え頂きありがとうございます。

「Columns」は、「DataGridViewColumnCollection」であるとの理解でよろしいのでしょうか?
「MaxInputLength」は「DataGridViewTextBoxColumn」のプロパティであることが分かりました。
しかし、私が初心者すぎて【キャスト用いる】と言う具体的な方法が分かりません。
申し訳ありませんが、どこを調べたら良いのか再度お教え頂けないでしょうか?
よろしくお願い致します。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-02-21 20:53
引用:
「Columns」は、「DataGridViewColumnCollection」であるとの理解でよろしいのでしょうか?



その通りです。MSDNのDataGridView.Columns プロパティのページに
以下のように書いてあるはずです。

引用:

Visual Basic (宣言)
Public ReadOnly Property Columns As DataGridViewColumnCollection



その後ろの「(0)」はプロパティ名が省略されていますので、
デフォルトのプロパティである Item を使っています。

http://msdn2.microsoft.com/ja-jp/library/6dbs9yfy(VS.80).aspx

したがって、dataGridView1.Columns(0)の型は、
Itemプロパティの型ですので DataGridViewColumn です。
DataGridViewColumn はDataGridViewの列を表すクラスです。
DataGridViewTextBoxColumn クラスは DataGridViewColumn クラスのサブクラスにあたります。

デザイナで設定された DataGridView のインデックス0にあたる列が
テキストボックスタイプの列になっているのであれば、
dataGridView1.Columns(0) が表す列(つまり1列目)の実体は DataGridViewTextBoxColumn です。
しかし、dataGridView1.Columns(0) だけでは DataGridViewColumn 型として認識されるため、
MaxInputLength プロパティは入力候補に表示されないのです。
こういう場合は「DataGridViewTextBoxColumn」型にキャストすることで解決できます。

キャストについては「DirectCast」「CType」「TryCast」を調べてください。
こんな感じで使います。

DirectCast(dataGridView1.Columns(0), DataGridViewTextBoxColumn).MaxInputLength = 10
きむた
会議室デビュー日: 2007/02/21
投稿数: 10
投稿日時: 2007-02-22 09:42
KI様

親切丁寧にお教え頂きありがとうございました。
こういう使い方を全く知らなかった為、すごく勉強になりました。
クラスとサブクラスの関係、調べ方についてもかなり理解できたと思います。
キャストについても、変数等色々応用が出来そうです。
本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)