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

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

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

Re[1]: numericupdownの値取得


(過去ログ 42 を表示中)

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

■22455 / inTopicNo.1)  numericupdownの値取得
  
□投稿者/ マロン (3回)-(2008/07/23(Wed) 19:16:51)

分類:[C#] 

お世話になります。
ちょっと行き詰まってしまったので、ご指導いただければ幸いです。

Formにnumericupdownコントロールが100個配置してあり、
for文でnumericupdownの値を配列に代入したいと思います。

numericupdownの名前 : layer1_1, layer1_2, ..., layer1_10, layer2_1,...layer10_10
配列:Comp[10,10]
として、

for (int i = 0; i < 10; i++)
{
for(int j=0; i<10; j++)
{
string name = "layer"+i.ToString()+"_"+j.ToString();
Composition[i, j] = this.Controls[name].Value;
}
}

と書いたのですが、ControlsにValueはありませんとエラーがでてしまいます。
どこがおかしいのでしょうか。。
試しにlayer1_1.Valueとするとちゃんと値を取得できました。

どうかよろしくお願いします。




引用返信 編集キー/
■22457 / inTopicNo.2)  Re[1]: numericupdownの値取得
□投稿者/ 紅の豚118 (3回)-(2008/07/23(Wed) 19:30:54)
たとえばこれはいかがですか?

(this.Controls[name] as NumericUpDown).Value
引用返信 編集キー/
■22475 / inTopicNo.3)  Re[2]: numericupdownの値取得
□投稿者/ マロン (4回)-(2008/07/24(Thu) 05:35:40)
解決しました。
asを使えばいいんですね。
大変勉強になりました。
ありがとうございました。
解決済み
引用返信 編集キー/
■22477 / inTopicNo.4)  Re[1]: numericupdownの値取得
□投稿者/ カドルドエグ (5回)-(2008/07/24(Thu) 09:34:40)
No22455 (マロン さん) に返信
既に解決されてるようですが、理由等も一応。
> numericupdownの名前 : layer1_1, layer1_2, ..., layer1_10, layer2_1,...layer10_10
> 配列:Comp[10,10]
> として、
>
> for (int i = 0; i < 10; i++)
> {
> for(int j=0; i<10; j++)
> {
> string name = "layer"+i.ToString()+"_"+j.ToString();
> Composition[i, j] = this.Controls[name].Value;
> }
> }
>
> と書いたのですが、ControlsにValueはありませんとエラーがでてしまいます。
> どこがおかしいのでしょうか。。

「Controls[name]」は「NumericUpdown」型ではありません。
『「Controls[name]」は「NumericUpdown」型である』とわかっているのはコードを読んだ・書いた人間側であり、
マシンにとっては飽くまで
「FormクラスのControlsプロパティ(詳細→http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.controls(VS.80).aspx) = コントロールの集まり→さらに名前で指定しているのでそのコレクションの一部 = Control型」
としてしか認識していません。

さらに、Control型にはそもそも「Value」というプロパティはありません。
Control メンバ
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control_members.aspx

> 試しにlayer1_1.Valueとするとちゃんと値を取得
できたのは「layer1_1」は「元からNumericUpdown型」であったからです。


そのため、「this.Controls[name]」から値を得るには、
紅の豚118さんが示してくださったように型を変える必要があります。
今回の場合は、Control型からNumericUpdown型に変えました。

但し、今回それができたのは、
NumericUpdown型がControl型を継承した型だったからであり、なんでもかんでも自分の都合のよい型に変換できるとは
限らないので注意してください。
※継承についてはここでは割愛するので御自身で調べてみてください。

因みに、「as」でももちろん変換はできますが、単純に
((NumericUpdown)this.Controls[name]).Value
でも可能です。
#ややこしい表現ですが。
「as」と↑の変換:キャストの違いはこちら↓
http://www.atmarkit.co.jp/fdotnet/dotnettips/005castandas/castandas.html
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -