質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

5569閲覧

DataGridViewのキャストについて

churi_yuzuki

総合スコア32

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/02/20 07:24

###前提・実現したいこと
Windowsフォームにおいて、DataGridViewを用いています。
DataGridViewはコントロール内に複数あり、一つずつプロパティを変更するのは大変なので、
方法を探していたところ、

For i As Integer = 1 To 3 CType(Me.Controls("Label" + i.ToString()), Label)~ Next

のような記述を見つけたので、同じように

CType(Me.Controls("DataGridView" + i.ToString()), DataGridView)~

としてみた所、
NullRefferenceExceptionが起きてしまいます。

DataGridView型はキャストすることが出来ないのでしょうか。

また、出来なければ同様の方法はありますでしょうか。

ご教授をお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

DataGridView が Form 直下に無いか、名前が違うのでしょう。

前者なら
Dim founds = Me.Controls.Find("DataGridView" + i.ToString(), True)
で Form 直下に無くてもコントロールの配列が取得できます。

後者なら
Dim founds = Me.Controls.Where(Function(c) c.Name.StartsWith("DataGrid")).ToArray()
"DataGrid" から始まる名前のコントロールの配列が取得できます。

投稿2017/02/20 08:01

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

churi_yuzuki

2017/02/24 07:55

遅くなりました、回答ありがとうございます。 前者でした。 これを試してみたのですが、初心者なものでfoundsの型の使い方が良く分からなくて止まってました。 試行錯誤してみます。。
guest

0

ベストアンサー

NullRefferenceExceptionが発生するということは、
Me.Controls("DataGridView" + i.ToString())
この部分でNothingになっていると思われます。
DataGridViewの名前が"DataGridView1"等になっているのでしょうか?

名前で探せないのであれば

VB.NET

1For Each c As Control In Me.Controls 2  ’ここでcの型を判断してDataGridViewであれば処理する 3Next

という感じで大丈夫だと思います。

投稿2017/02/20 07:49

編集2017/02/20 07:56
YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

churi_yuzuki

2017/02/24 07:52

回答ありがとうございます。 cの型を判断してDataGridViewであれば処理するという部分を調べてやってみます。
YAmaGNZ

2017/02/24 08:09

上記のやりかたですと、Form直下のコントロールしか取得できません。 ですので、名称が合っているのであれば、hihijijiさんが書かれているように Me.Controls.Findを使ってください。 Me.Controls.FindはControlの配列を返しますので For i = 1 To 3 Dim controls As Control() = Me.Controls.Find("DataGridView" + i.ToString(), True) For Each c As Control In controls Trace.WriteLine(DirectCast(c, DataGridView).Name) Next Next という感じになります。
churi_yuzuki

2017/02/28 05:59

遅くなりました。 なるほど、controlの配列が返って来てたのですね。。 実際作っているものは、Form直下にTabControl、TabControlのTabPageの中にDataGridViewが入っています。 ボタンをクリックしたらそのDataGridViewの1列目の色を全て変えようと思って、 For i = 1 To 8 Dim controls As Control() = Me.Controls.Find("DataGridView" + i.ToString(), True) For Each c As Control In controls For j As Integer = 0 To DirectCast(c, DataGridView).RowCount - 1 DirectCast(c, DataGridView)(1, j).Style.BackColor = Color.LemonChiffon Next Next Next のように記述したところ、1回目のクリックでは一つのDataGridViewしか変わりませんでした。 どこか問題ありますかね。。 分かりにくかったら申し訳ないです。
YAmaGNZ

2017/02/28 06:50

こちらで、TabControlに8個タブを追加し、それぞれのタブページにDataGridViewを1つづつ配置して 提示されたコードを実行しましたが、正常に変化しました。 もし、”DataGridView1”という名前のコントロールがなかったとしても、要素数0のコントロール配列が 返ってくるだけでエラーが発生するわけではありません。 DataGridViewの名称が違う可能性が考えられますので、実際にどのように動作しているか ステップ実行で確認してみてください。
churi_yuzuki

2017/02/28 07:18

申し訳ありません、別のイベントが悪さをしていました。 分かりやすく解説していただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問