2011-01-12 24 views
4

ユーザーが成績を入力し、プログラムが加重平均を出力するアプリケーションを作成しています。ロードすると、割り当てのカテゴリの数が尋ねられます。プログラムは、ユーザが情報を入力するためのテキストボックスを動的に作成する。問題は、テキストボックスを作成した後に入力されたテキストをどのように読み込むのか分かりません。ここに私のコードはありますか:C#で動的に作成されたコントロールを使用する

  TextBox txtbx = new TextBox(); 
      txtbx.Text = ""; 
      txtbx.Name = "txtbx1"; 
      txtbx.Location = new Point(10, 10); 
      txtbx.Height = 20; 
      txtbx.Width = 50; 
      Controls.Add(txtbx); 

このコードを変更して、ユーザーが送信したときにボックス内の現在のテキストを見つける方法を教えてください。

答えて

11

動的にコントロールを生成している場合は、明らかに各フィールドを持つことはできません。しかし、名前付きコントロールのControlsコレクションにアクセスしようとしている場合は、ControlCollectionを名前でインデックスすることができます。指定された名前のテキストボックスを追加した後、あなたは簡単に行うことができますため

TextBox txtbx = (TextBox)Controls["txtbx1"]; 
0

あなたの送信ボタンのonclickリスナーを設定されて行う必要があり、それはあなたがあなたがそれを作成した後、テキストボックスへの参照を保持する必要があります。この

private void OnSubmit(object sender, EventArgs args) 
{ 
    string yourText = txtbx.Text; 
} 

ような何かを持っているすべて。 yourTextには必要な値が含まれます。これが役に立ちますようにお願いします。

+0

どのように私はテキストボックスへの参照を作成することができますか? –

+0

"OnSubmit"関数で見ることができる場所に "txtbx"を宣言するか、またはUwe Keimが述べたように、あなたが設定した名前( "txtbx1")でFindControlを使うことができます。 – rchanley

4

PageクラスのFindControlメソッドを使用できます。

このメソッドは、作成時に設定する必要がTextBoxのID、あるパラメータを取ります。

txtbx.ID = "txtbx1"; 

次に、あなたがそれを選択することができます。

TextBox txtbx1 = (TextBox)FindControl("txtbx1"); 

をし、それを使用しています。


編集:最初の質問は、彼がWindowsフォームに参照のうえれると付け加えたので、上記の私の返事がオフトピックです。

Windowsフォームでは、ローカル変数ではなくクラスメンバー変数を使用するだけです。例:

public partial class MyForm 
{ 
    ... 

    private TextBox txtbx; 

    ... 

    private void createControls() 
    { 
     txtbx = new TextBox(); 
     txtbx.Text = ""; 
     txtbx.Name = "txtbx1"; 
     txtbx.Location = new Point(10, 10); 
     txtbx.Height = 20; 
     txtbx.Width = 50; 
     Controls.Add(txtbx); 
    } 

    private void someOtherFunction() 
    { 
     // Do something other with the created text box. 
     txtbx.Text = "abc"; 
    } 
} 
+0

私はページクラスを見つけることができない、それはasp.netでのみ動作するのですか?私はWindowsアプリケーションを作っています。 –

+0

おっと、申し訳ありませんが、私はそれを監督しました。私はASP.NETに答え、私はそれに応じて調整します... –

1

フォーム上のすべてのテキストボックスの参照リストを保持します。それらを動的に作成するときは、リストにtextBox参照を追加します。

次に、テキストを読むときに、リスト内のすべてのテキストボックスを繰り返し処理できます。

関連するカテゴリ名に従ってテキストボックスに名前を付けることを確認してください。次に、リスト内のコントロールを名前で検索することもできます。

class MyForm : Form 
{ 
    IList<TextBox> _textBoxes = new List<TextBox>(); 

    private void AddTextBox(string categoryName){ 

     var myTextBox = new TextBox(); 
     myTextBox .Name = categoryName + "txtbx"; 

     // set other properties and add to Form.Controls collection 

     _textBoxes.Add(myTextBox); 
    } 

    private TextBox FindTextBox(string categoryName) 
    { 
     return _textBoxes.Where(t => t.Name.StartsWith(categoryName)).FirstOrDefault(); 
    } 
} 
1

このコードは、動的にボタンでテキストボックスを追加し、私はこのコードはあなたを助けることを願っています

int count = 1; 
public System.Windows.Forms.TextBox AddNewTextBox() 
    { 
     System.Windows.Forms.TextBox txt = new System.Windows.Forms.TextBox(); 
     this.Controls.Add(txt); 
     txt.Top = count * 25; 
     txt.Left = 100; 
     txt.Text = "TextBox " + this.count.ToString(); 
     count = count + 1; 
     return txt; 
    } 
private void Onbutton_Click(object sender, EventArgs e) 
    { 
     //Call the method AddNewTextBox that uses for Dynamically create Textbox 
     AddNewTextBox(); 
    } 

をクリックします。 ありがとう ハッピーコーディング:)

関連する問題