C#初心者で困っています

OS XP
VS2008 ASP.NET C#
で作業しています

複数のTextboxを作成して、そのTextboxのTextプロパティに値を書き込もうとしています。
for(int z=1; z<100; z++)
{
string tt = z.ToString();
Control tx = FindControl("TextBox" + tt);
tx.text = "ccccccc";
}

txのtextプロパティが出てきません。
どのようにすれば、textプロパティを書き換えることができるのでしょうか、ご教授をお願いします。

A 回答 (2件)

こんな感じでどうでしょう。


TextBoxAという名前のTextBoxにある文字列を、TextBoxBという名前のTextBoxに挿入しています。

TextBox ta = (TextBox)FindControl("TextBoxA");
TextBox tb = (TextBox)FindControl("TextBoxB");
tb.Text = ta.Text;

参考にしてみてください。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます
ご教授の方法で解決できました。

TextBox ta = (TextBox)FindControl("TextBox1");
ta.Text = "TEST";

お礼が遅くなり申し訳ありませんでした

お礼日時:2010/03/24 09:52

試してないので適当な回答になりますが、tx を TextBox にキャストしてみるとか.

この回答への補足

回答、ありがとうございます

しかし、txもFindControlもキャストしてみましたが、同じでした

よろしくお願いいたします

補足日時:2010/03/22 21:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

QC#「オブジェクト参照が必要です」(初心者)

Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。
Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。
ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の
Form1.pictureBox1.image = Image.FromFile("motion1.png");
”Form1.pictureBox1”に当てられています。

何が原因と考えられるでしょうか。
もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。
よろしくお願いします。

Aベストアンサー

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。
その際、redfox63さんがおっしゃられるように
this.pictureBox1
と記述することが必要です。(thisは自分自身のインスタンスを指します)

後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

MSDNライブラリ Timerクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx

参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む

QC#のループでtextboxに値を入れる方法

Nameが

textbox1
textbox2
...
textbox10

と10個のtextboxがあったとして、

このそれぞれのtextに値を入れたいのですが、
1個ずつ書くのではなく、forとかで入れることは出来ますか?

たとえば以下のように、ループで○の部分を変更していくことは可能なのでしょうか?
for (int i=1; i<=10; i++)
{
textbox○.text = i.ToString();
}


よろしくお願いします。

Aベストアンサー

>基本的にはボタンのクリックイベントの中に書いています。

こちらでは問題ありませんけど…なにが 違うんですかねぇ…。

>フォームのインスタンスで実行するなら、

インスタンスではなくコンストラクタでした。
まぁ、InitializeComponent()を実行した後であれば、可能な……ハズなんですけど。

半角での名前は、大文字小文字は区別しないで動作してくれるようですが、
いわゆる全角と半角は区別するでしょうから、その辺りの違いですかねぇ……。

QC#で動的にコントロールを取得するにはどのようにしたらよいのでしょうか

C#で動的にコントロールを取得するにはどのようにしたらよいのでしょうか?

C#2008ですが、Form1にTextBoxが30個あって、textBox1~textBox30という名前がついています。
このテキストボックスの値をForm2で取得したいのですがなかなかうまくいきません。

-------------------------
Form2:
private void Form2_Click(object sender, EventArgs e){
 Form1 fm = new Form1();
 
 int No = 15; //ここを1~30まで動的にしたい
 string result = fm.textBox15.Text; //直接comboBox_type15と書くのではなく「"comboBox_type" + No.ToString()」のようにしたい
 MessageBox.Show(result);
}
-------------------------

コントロールを配列にして

Control[] ctlArray = new Control[30] { fm.textBox1, fm.textBox2, …, fm.textBox30 };

のようにしてみましたが、エラーになってしまいます。
いろいろネットで検索してみたのですが、「コントロール名を動的に文字列で作成して使う」という方法がどこにも載っていなく、数時間格闘しています。
すみませんがご教授願います。よろしくお願いいたします。

C#で動的にコントロールを取得するにはどのようにしたらよいのでしょうか?

C#2008ですが、Form1にTextBoxが30個あって、textBox1~textBox30という名前がついています。
このテキストボックスの値をForm2で取得したいのですがなかなかうまくいきません。

-------------------------
Form2:
private void Form2_Click(object sender, EventArgs e){
 Form1 fm = new Form1();
 
 int No = 15; //ここを1~30まで動的にしたい
 string result = fm.textBox15.Text; //直接comboBox_type15と書くのではなく...続きを読む

Aベストアンサー

どう回答したものかとかなり悩みました。
いろいろな考え方があるので。。。

コンストラクタのオーバーロードで自分自分を渡すという
suffreさんの方法もなるほどーと思いました。
「あり」だと思います。

他に方法がいくつかあります。
2つだけ紹介します。

ひとつは、
fm.ShowDialog(this);
と、Owner指定なるものを使って、自分を渡す方法です。
これが一番楽かな、と思っています。
渡されたForm2の方では、
this.OwnerをForm1でキャストすれば、
suffreさんの方法と同じようにForm1のPublicのメンバに
アクセスできます。
例えば、
((Form1)this.Owner).textBox3.Text = "hoge";
です。
オーバーロードとか書かなくていいのでその点簡単でしょう。

もう一つは、Form2の側にPublicなメンバ(特にプロパティ)を
設けて、それを通じてやり取りする、という方法です。
Form1の側では、
Form2 fm2 = new Form2();
としたあと、
fm2.xxx = ・・・
で必要な情報を相手に渡し、
textBox3.Text = fm2.yyy;
というように情報を受け取ります。

DialogResultの値は見ないのでしょうか?
もし見て、それがOKの場合のみ、Form2の側で設定された値を
使いたいという場合、以下のようになるはずです。

if (fm2.ShowDialog(this)== DialogResult.OK) {
textBox3.Text = fm2.yyy;
}

もちろん、初めの方法でも、予めForm1の側で変更される可能性の
あるメンバをバックアップしておいて、Cancelだったらそれを使って
元に戻すということもできますが。。。

。。。

初めの方法を嫌がる人は(おそらくたくさん)います。
・Form2の側にForm1という文字を書かなくてはならない
 → 子は親に依存させたくない
・Form1の側でForm2でForm1の値変更の管理ができない
などという理由からです。
後者の方法ならば、
・Form2の側にForm1という文字を書かないで済む
・最終的に、Form2側で入れた値を使うかどうかがForm1側で分かる
からです。

丸岡孝司著「絶対現場主義 Visual C#実践講座」では、前者の方法について、
以下のように書かれています。
http://www.amazon.co.jp/%E7%B5%B6%E5%AF%BE%E7%8F%BE%E5%A0%B4%E4%B8%BB%E7%BE%A9Visual-%E5%AE%9F%E8%B7%B5%E8%AC%9B%E5%BA%A7%E2%80%95%E9%96%8B%E7%99%BA%E3%81%AE%E7%8F%BE%E5%A0%B4%E3%81%8B%E3%82%89%E7%94%9F%E3%81%BE%E3%82%8C%E3%81%9F%E5%AE%9F%E8%B7%B5%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-TIPS%E9%9B%86-%E4%B8%B8%E5%B2%A1-%E5%AD%9D%E5%8F%B8/dp/4899771975
----------------------------
サブフォーム側では、「Owner」プロパティを呼び出し元画面の型でキャストすれば、
そのプロパティを「えへへ。参照し放題ですぜ」というわけだ。
さらに、フォームに乗せてあるコントロールのModifiersプロパティを
Publicなんぞにした日にゃあなた、こりゃタマリませんなあということになる。
いかがだろうか。実際問題、荒業も程があるのであって、決してこの方法を
選択してはならないぞ。
----------------------------

。。。

といいつつ、自分の趣味プログラムでは、
楽なので前者の方法ばかりを使っています。。。

どう回答したものかとかなり悩みました。
いろいろな考え方があるので。。。

コンストラクタのオーバーロードで自分自分を渡すという
suffreさんの方法もなるほどーと思いました。
「あり」だと思います。

他に方法がいくつかあります。
2つだけ紹介します。

ひとつは、
fm.ShowDialog(this);
と、Owner指定なるものを使って、自分を渡す方法です。
これが一番楽かな、と思っています。
渡されたForm2の方では、
this.OwnerをForm1でキャストすれば、
suffreさんの方法と同じようにForm1のPublicのメンバに
ア...続きを読む

QC#でフォームのオブジェクト名を変数名で指定

C#でフォームのオブジェクトを変数名で指定するにはどうしたらよいでしょうか?

例えば、フォームにラジオボタンrdo0~rdo9と、
それぞれに対応するテキストボックスtxt0~txt9が用意されている状態で、
rdo1がチェックされていたらtxt1に"OK"と表示、
rdo2がチェックされていたらtxt2に"OK"と表示・・・
といったことをfor文で実現する場合どのようにしたらよいでしょうか?
変数をオブジェクト名として認識させるための方法がわかりません。

どなたかご教授願います。


*********************************************
for(int i=0;i<10;i++)
{
 rdoname = "rdo" + i;
 txtname = "txt" + i;

 if((何らかの処理?)(rdoname).checked)
  (何らかの処理?)(txtname).txt = "OK";
}

****************************************
↑この、オブジェクトとして認識する為の「何らかの処理」部がわかりません。

C#でフォームのオブジェクトを変数名で指定するにはどうしたらよいでしょうか?

例えば、フォームにラジオボタンrdo0~rdo9と、
それぞれに対応するテキストボックスtxt0~txt9が用意されている状態で、
rdo1がチェックされていたらtxt1に"OK"と表示、
rdo2がチェックされていたらtxt2に"OK"と表示・・・
といったことをfor文で実現する場合どのようにしたらよいでしょうか?
変数をオブジェクト名として認識させるための方法がわかりません。

どなたかご教授願います。


************************...続きを読む

Aベストアンサー

参考URL参照。

参考URL:http://dobon.net/vb/dotnet/control/findcontrolbyname.html

QC# ログイン画面からメイン画面への画面遷移について

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示することがある為)

---------------------------------------------------------------------
private void LoginButton_Click(object sender, EventArgs e)
{
   /* ログイン処理 */

   //ログイン成功時
   //メイン画面インスタンス生成
   MainForm mainForm = new MainForm();
   //ログイン画面インスタンスを代入
   mainForm.loginForm = this;
   //メイン画面表示
   mainForm.Show();
   //ログイン画面非表示
   this.Visible = false;
}
---------------------------------------------------------------------

また上記の方法だとメイン画面を閉じても、アプリケーションは終了しない為
メイン画面の閉じるボタンを押した場合に以下の処理を行っています。

---------------------------------------------------------------------
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
   //ログイン画面クローズ
   loginForm.Close();
}
---------------------------------------------------------------------

以上、宜しくお願いします。

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示す...続きを読む

Aベストアンサー

#2です。
最初にログイン画面のみを表示したいなら
メイン画面のForm_menu_Load(loadイベント処理)
の中で、ログイン画面をモーダル表示し、
NGならメイン画面のcloseのほうがよいかも知れません。

Q【C#】SQL文の中に変数を埋め込む方法

C#の.NETにてWindowsアプリを作成しています。
データベースはPostgreSQLで、Npgsqlを用いてVS2005とデータベースとを接続しています。

データベースとの接続を確立した後、INSERT文にて値を挿入する際、

NpgsqlCommand command = new NpgsqlCommand("INSERT INT TEST_TABLE VALUES(1, 2)", conn);

の「VALUES(1, 2)」の箇所を、
int型変数(int x=1, int y= 2)に置き換えるには、どのように記述すれば良いのでしょうか?

自分で調べた結果、VBでの類似した質問
http://oshiete.goo.ne.jp/qa/292069.html

を見つけましたが、C#の方法について見つけることが出来なかったので、
質問させていただきました。

解決策をご存知の方、ご教示お願い致します。

Aベストアンサー

String.Formatを使えば埋め込めますが……。
String.Format("INSERT INT TEST_TABLE VALUES({0}, {1})", x, y)
MSDN: String.Format メソッド (System)
http://msdn.microsoft.com/ja-jp/library/system.string.format.aspx


ただし,この方法では「ダメなプログラム」の典型例にしかなりません。
NpgsqlParameterを使って,パラメータ化するのが普通です。
# xおよびyがint型固定であるなら問題が発生しないのでString.Formatでもよいですが……。

NpgsqlCommand command = new NpgsqlCommand("INSERT INT TEST_TABLE VALUES(:x, :y)", conn);
command.Parameters.Add(new NpgsqlParameter("x", x));
command.Parameters.Add(new NpgsqlParameter("y", y));
おそらく,これで実行できるはずです。

String.Formatを使えば埋め込めますが……。
String.Format("INSERT INT TEST_TABLE VALUES({0}, {1})", x, y)
MSDN: String.Format メソッド (System)
http://msdn.microsoft.com/ja-jp/library/system.string.format.aspx


ただし,この方法では「ダメなプログラム」の典型例にしかなりません。
NpgsqlParameterを使って,パラメータ化するのが普通です。
# xおよびyがint型固定であるなら問題が発生しないのでString.Formatでもよいですが……。

NpgsqlCommand command = new NpgsqlCommand("INSERT IN...続きを読む

Q【C#】 あるイベントから別イベントを呼び出す。

タイトルの通り、あるイベント内から別イベントの処理を呼び出したいと
考えています。ですが、方法がわかりません。

【質問投稿に至った経緯】
現状は、検索から一覧を表示し1つを選択、選択した内容の更新を行なうプログラムを作成しています。選択した内容を更新するところまではできました。ただ、更新内容を確認できるよう一覧画面に前回検索した内容を一覧表示させたいと考えています。この時、検索イベントを呼び出し、一覧を再表示させようと思っています。

Aベストアンサー

「検索イベント」とは、[検索]ボタンをクリックした時の
イベント処理の事でしょうか?
それならば、一覧表示処理を別ルーチンに分けて、[検索]
ボタンClickイベントと同じルーチンをCallする様にすれば
良いと思いますが?

QC# 別なフォームへ値を渡す (初心者です)

メインのフォームからサブのフォームを呼び出して、
サブのフォ-ムからさらにクラスを呼び出し、
クラスからメインのテキストボックスのテキストに書き込むプログラムを作成中です。

ですが、テキストボックスがパブリックにも関わらず、表示されません。
デバックで見る限り、テキストボックスのテキストには値が入っているのですが、
フォームを見ると表示されていません。

知恵をお貸しください。

Aベストアンサー

普通にメソッドに変数を渡すのと一緒の感じでいいですよ。
例えば、フォームのコンストラクタに渡す感じで。
A_Form : メインフォームの型
B_Form : サブフォームの型
C_Form : 子フォームの型
とします。
class B_Form : Form
{
 private A_Form main_form;
 public B_Form(A_Form a)
 {
  main_form = a;
 }
}

class C_Form : Form
{
 private A_Form main_form;
 public C_Form(A_Form a)
 {
  main_form = a;
 }
}

public void some_function()
{
 A_Form a = new A_Form();
 B_Form b = new B_Form(a);
 C_Form c = new C_Form(a);
}

といった感じになるかと。
最後のメソッドはたとえばなので、参考程度に。

http://www.stackasterisk.jp/tech/dotNet/csharp02_01.jsp

普通にメソッドに変数を渡すのと一緒の感じでいいですよ。
例えば、フォームのコンストラクタに渡す感じで。
A_Form : メインフォームの型
B_Form : サブフォームの型
C_Form : 子フォームの型
とします。
class B_Form : Form
{
 private A_Form main_form;
 public B_Form(A_Form a)
 {
  main_form = a;
 }
}

class C_Form : Form
{
 private A_Form main_form;
 public C_Form(A_Form a)
 {
  main_form = a;
 }
}

public void some_function()
{
 A_Form a = new A...続きを読む

Q【VB】コンボボックスにデータベースから取り出した値を入れたい

VB2005です。

表題の通りですがやり方がよくわかりません。
データベースに接続し、
SQLで重複しない値を取り出すところまではできています。

SQL=SELECT DISTINCT FieldName FROM TableName

VB6の時はこんなソースでした
Do Until rs.EOF
   Combo1.AddItem.Fields("FieldName")
   rs.MoveNext
Loop

VB2005ではどう書くのでしょう?
よろしくご教授ください。

Aベストアンサー

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", dbFilePath)
  Dim sql As String = "SELECT DISTINCT FieldName FROM TableName"
  Dim conn As New OleDbConnection(connectionString)
  Dim query As New OleDbCommand(sql, conn)

  Try
    conn.Open()
    Dim reader As OleDbDataReader = query.ExecuteReader()
    While (reader.Read())
      Me.ComboBox1.Items.Add(reader.Item("FieldName"))
    End While
    reader.Close()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  Finally
    conn.Close()
  End Try

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Sourc...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報