C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: groupbox内のテキストの一気設定の方法について


(過去ログ 103 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■61615 / inTopicNo.1)  groupbox内のテキストの一気設定の方法について
  
□投稿者/ 裕猫 (249回)-(2011/08/23(Tue) 11:34:38)

分類:[C#] 

開発環境
OS: WindowsXP SP3
言語: VisualStudio2010 C#

グループボックス内のテキストボックスを一気にnullにしようとしますが
for (int CT1 = 1; CT1 < 30; CT1++)
{
TextBox txt1 = (TextBox)this.Controls[string.Format("textBox{0}", CT1)];
txt1.Text = null;
}
で実行すると「NullReferenceExceptionはハンドルされませんでした」のエラーになってしまいます。
textbox1〜10までgroupbox1 11〜20まではgroupbox2 21〜29まではgroupbox3にあります。
どのようにしたらできるかわからなくて困っています。よろしくお願いいたします。
引用返信 編集キー/
■61616 / inTopicNo.2)  Re[1]: groupbox内のテキストの一気設定の方法について
□投稿者/ なまら (1回)-(2011/08/23(Tue) 11:44:30)
this.Controlsだとthis(このケースだとフォーム?)上に直接配置されているものが対象になりますので、
groupbox1〜3はこのコレクションに含まれますが、textbox1〜はgroupbox上に配置されていますので、このコレクション
には含まれません。
このため、this.Controlsからgroupboxを抽出し、そのgroupboxのControlsコレクションでtextboxを操作すればよいと思います。
引用返信 編集キー/
■61617 / inTopicNo.3)  Re[1]: groupbox内のテキストの一気設定の方法について
□投稿者/ 魔界の仮面弁士 (2322回)-(2011/08/23(Tue) 11:46:32)
No61615 (裕猫 さん) に返信
> グループボックス内のテキストボックスを一気にnullにしようとしますが
TextBox.Text に null を代入しても、Text プロパティは null になりません。(空文字列になります)


> TextBox txt1 = (TextBox)this.Controls[string.Format("textBox{0}", CT1)];
グループボックス上のテキストボックスは、
form1.Controls ではなく、groupBox1.Controls の配下にあります。

> どのようにしたらできるかわからなくて困っています。

(案1) 各コントロールの Controls も再帰的に探すようにする。

(案2) .Controls[名前] ではなく、.Controls.Find(名前, true) を使って探すようにする。

(案3) リフレクションを通じて、フィールド変数名から辿るようにする。

(案4) 後から処理しやすいよう、Form の Load イベント等で、各TextBox を配列等に放り込んでおく。

(案5) 一括処理させたいコントロールをデザイナ上で管理できるよう、IExtenderProvider を
 継承したクラスを用意する。

http://dobon.net/vb/dotnet/control/findcontrolbyname.html
引用返信 編集キー/
■61619 / inTopicNo.4)  Re[2]: groupbox内のテキストの一気設定の方法について
□投稿者/ 裕猫 (250回)-(2011/08/23(Tue) 15:01:42)
なまら さん 魔界の仮面弁士様
 ご指導ありがとうございました。
> this.Controlsだとthis(このケースだとフォーム?)上に直接配置されているものが対象になりますので、
> groupbox1〜3はこのコレクションに含まれますが、textbox1〜はgroupbox上に配置されていますので、このコレクション
> には含まれません。
> このため、this.Controlsからgroupboxを抽出し、そのgroupboxのControlsコレクションでtextboxを操作すればよいと思います。

>グループボックス上のテキストボックスは、
>form1.Controls ではなく、groupBox1.Controls の配下にあります。

thisでやっていたのが悪かったわけですね。thisをgroupbox1〜3にすることで動作させられました。ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -