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

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

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

Re[8]: TextBoxのプロパティNameの末尾番号を


(過去ログ 32 を表示中)

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

■15795 / inTopicNo.1)  TextBoxのプロパティNameの末尾番号を取得したい。
  
□投稿者/ C#ビギナー (1回)-(2008/03/22(Sat) 13:50:54)

分類:[C#] 

こんにちは。
C#初心者です。 Visual C# 2008 Express Edition を使用しています。

質問の内容は、

あるFormにTextBoxが8個有り、Nameプロパティで txtA1 〜 txtA8 まであります。
この8個のTextBoxのTextプロパティを変数に置き換えるため、while文で回して変数を
取得したいのですが、下記の部分の文法が解りません。

string[] HoleName = new string[8];

int i = 2;
while (i <= 8)
{
   HoleName[i] = This.txtA[]←(この部分をどのようにして指定するかわかりません。)
   i++;
}

どのようにコントロールのNameプロパティの末尾を指定したらよいでしょうか?

引用返信 編集キー/
■15797 / inTopicNo.2)  Re[1]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ やじゅ (265回)-(2008/03/22(Sat) 14:15:36)
やじゅ さんの Web サイト
No15795 (C#ビギナー さん) に返信
> HoleName[i] = This.txtA[]←(この部分をどのようにして指定するかわかりません。)
>
> どのようにコントロールのNameプロパティの末尾を指定したらよいでしょうか?
>

あってるかな、VB使いなのでC#は微妙・・・
HoleName[i] = This.Controls("txtA" + i).Text

コントロールをまとめる方法
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard20.htm
引用返信 編集キー/
■15801 / inTopicNo.3)  Re[2]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ 通りすがっちゃった (4回)-(2008/03/22(Sat) 16:02:17)
2008/03/22(Sat) 16:04:05 編集(投稿者)

> HoleName[i] = This.Controls("txtA" + i).Text

C#ならこうでは?
HoleName[i] = this.Controls["txtA" + i].Text

[追記]
こうした方がいいのかな?
HoleName[i] = this.Controls["txtA" + i.ToString()].Text
引用返信 編集キー/
■15803 / inTopicNo.4)  Re[3]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ 出水 (14回)-(2008/03/22(Sat) 16:40:22)
いっそのこと、テキストボックスそのものをリスト化しちゃえばどうでしょう

メンバ変数としてこうして持ってやって…
List<System.Windows.Forms.TextBox> textlist = new List<System.Windows.Forms.TextBox>();

フォームのロード時にリストにテキストを入れてやって…
private void Form1_Load(object sender, EventArgs e)
{
textlist.Add(textBox1);
textlist.Add(textBox2);
}

テキストを一気に変更
foreach (var f in textlist){ f.Text = "Changed"; }

引用返信 編集キー/
■15852 / inTopicNo.5)  Re[4]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ C# (1回)-(2008/03/24(Mon) 09:14:15)
おはようございます。
皆さん、回答ありがとうございます。
下記のように記述することで、無事解決できました。

> HoleName[i] = this.Controls["txtA" + i.ToString()].Text

しかし、別の構文でエラーが出ます。
内容は、上記のように、TextBoxのプロパティ「Text」では上記のように「.Txet」が使用できるのですが、
CheckBoxのCheckedプロパティには使用できません。

if (this.Controls["chkHole" + i.ToString()].Checked == true)

                   このCheckedを認識しない。

原因は、どこにあるのでしょうか?。Textプロパティは使えても、Checkedプロパティには
「Controls」は使用できないのでしょうか?

引用返信 編集キー/
■15853 / inTopicNo.6)  Re[5]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ C#ビギナー (2回)-(2008/03/24(Mon) 09:18:31)
> 
> if (this.Controls["chkHole" + i.ToString()].Checked == true)
>                                                ↑
>                    このCheckedを認識しない。

すみません、↑がずれました。 

引用返信 編集キー/
■15854 / inTopicNo.7)  Re[5]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ επιστημη (891回)-(2008/03/24(Mon) 09:20:52)
επιστημη さんの Web サイト
> 内容は、上記のように、TextBoxのプロパティ「Text」では上記のように「.Txet」が使用できるのですが、
> CheckBoxのCheckedプロパティには使用できません。
>
> if (this.Controls["chkHole" + i.ToString()].Checked == true)
> ↑
>                    このCheckedを認識しない。
>
> 原因は、どこにあるのでしょうか?。Textプロパティは使えても、Checkedプロパティには
> 「Controls」は使用できないのでしょうか?

TextはどんなControlにもありますが、Checkedを持つControlは限られてるっしょ。
適切にキャストしてやらなあきません。

引用返信 編集キー/
■15856 / inTopicNo.8)  Re[6]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ ぽぴ王子 (334回)-(2008/03/24(Mon) 09:37:11)
ぽぴ王子 さんの Web サイト
No15852 (C# さん) に返信

そのいち。
ハンドル名を変えると投稿回数がリセットされる上に、回答者側が
同一人物として見ることが困難になるので、なんで他の人の質問に
別のやつがしゃしゃり出てきて礼してるんだ?ってなことになっちゃう。
なのでできればハンドル名は統一されたい。
あと「C#」とか「C#ビギナー」ってのはありきたりすぎてこれまた
あんまりなので、それなりに判別しやすい名前にされたい。
C#さん=C#ビギナーさん だと仮定しての話。

そのに。
個人的には解決方法は出水さんの方式を推奨したい。
ただ、まだ理解しにくいかもしれないので、そっちの方が本当は
いいんだよってことで勉強してもらえると吉。

そのさん。
this.Controls プロパティは Control というクラスを返す。
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.controls.aspx
正確には ControlCollection を返して、その中から名前で探してきた
ものが Control クラスなわけだが。

>>HoleName[i] = this.Controls["txtA" + i.ToString()].Text

こういった方法が取れるのは、Control クラスに Text という
プロパティがあって、そのまま利用できているから。

> しかし、別の構文でエラーが出ます。
> 内容は、上記のように、TextBoxのプロパティ「Text」では上記のように「.Txet」が使用できるのですが、
> CheckBoxのCheckedプロパティには使用できません。
> 
> if (this.Controls["chkHole" + i.ToString()].Checked == true)
>                                                ↑
>                    このCheckedを認識しない。
> 
> 原因は、どこにあるのでしょうか?。Textプロパティは使えても、Checkedプロパティには
> 「Controls」は使用できないのでしょうか?

これができないのは、Checked プロパティは CheckBox クラスが持っている
プロパティであって、Control クラスは持っていないから。
やるとすればキャストしてあげる。

CheckBox chk = this.Controls["chkHole" + i.ToString()] as CheckBox;
if (chk != null && chk.Checked == true)
{
    HogeHoge;
}

as でキャストしてやると、CheckBox に変換できないコントロール(例えば
テキストボックスだとか)は null で返るので、そのときは HogeHoge 処理を
行わないようにするといった処理が必要。もちろん Checked プロパティも
参照してはいけない。

たぶんこの辺の説明でちんぷんかんぷんになるかもしれないので、その場合は
もうちょっと基礎から勉強したほうがいいと思う。
基礎をすっとばすとあとで苦労するので、これでもか!ってぐらい基礎はちゃんと
やっておくべき。

引用返信 編集キー/
■15911 / inTopicNo.9)  Re[7]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ C#ビギナー (3回)-(2008/03/25(Tue) 14:36:02)
No15856 (ぽぴ王子 さん) に返信

ぽぴ王子さん。ありがとうございます。
まだC#を始めたばかりで、とりあえず実践しながらと思い、製作を始めました。
今回の質問内容も納得がいくまで勉強して、今後につなげたいと思います。
ちなみに、

> as でキャストしてやると、CheckBox に変換できないコントロール(例えば
> テキストボックスだとか)は null で返るので、そのときは HogeHoge 処理を
> 行わないようにするといった処理が必要。

上記の内容は、else で返せばよいのでしょうか?

>
> たぶんこの辺の説明でちんぷんかんぷんになるかもしれないので、その場合は
> もうちょっと基礎から勉強したほうがいいと思う。
> 基礎をすっとばすとあとで苦労するので、これでもか!ってぐらい基礎はちゃんと
> やっておくべき。

頑張って勉強します。ありがとうございました。
引用返信 編集キー/
■15912 / inTopicNo.10)  Re[8]: TextBoxのプロパティNameの末尾番号を取得したい。
□投稿者/ επιστημη (892回)-(2008/03/25(Tue) 14:59:51)
επιστημη さんの Web サイト
>>as でキャストしてやると、CheckBox に変換できないコントロール(例えば
>>テキストボックスだとか)は null で返るので、そのときは HogeHoge 処理を
>>行わないようにするといった処理が必要。
>
> 上記の内容は、else で返せばよいのでしょうか?

って疑問がうかんだらまずはやってみるのがプログラミングのお勉強ちゃうのん?

引用返信 編集キー/
■15932 / inTopicNo.11)  Re[8]: TextBoxのプロパティNameの末尾番号を
□投稿者/ PATIO (54回)-(2008/03/25(Tue) 19:21:20)
2008/03/25(Tue) 19:25:00 編集(投稿者)
2008/03/25(Tue) 19:24:19 編集(投稿者)

No15911 (C#ビギナー さん) に返信
>>as でキャストしてやると、CheckBox に変換できないコントロール(例えば
>>テキストボックスだとか)は null で返るので、そのときは HogeHoge 処理を
>>行わないようにするといった処理が必要。
>
> 上記の内容は、else で返せばよいのでしょうか?

実践はせめてC#の文法が理解できてからの方が良いです。
最初はコンソールプログラムでやった方がウインドウ周りの事とか
考えないでいいから良いと思うんだけど、みんなウインドウが出ないと
面白くないとかですっ飛ばしちゃうんだよねぇ。
で、この辺の話はちゃんと入門書を使ってC#の文法を勉強すれば出てくる話なので
何かC#の文法を勉強する為の本なり、Web上のHPなりを見てやることをお勧めします。
指しあたっては、この辺とか。

http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html

コンソールプログラムだとC#の部分だけに注目すればよくなるので
C#の勉強をするには良いと思いますよ。
この辺の部分がクリアできてその上でウインドウ周りの制御に
手を出した方が良いです。
あと、とりあず試せる環境があるなら試して見てから質問することです。
その方が身に付きますよ。

追伸:
コンソールプログラムもやり始めると実は結構面白いはずです。
うまくプログラミングすれば、今まで何十行も使って組んでいた
物が数行で組めたりするのもプログラミングの面白さです。
この辺の面白さがわかるとウインドウが出るとか出ないとかは
あんまり関係なくなります。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -