2016-07-27 21 views
-1

1つのボタンでawindowsフォームアプリケーションを開発しています。ボタンを押すたびに、テキストボックスが生成されます。たとえば、そのボタンを5回クリックすると、5つのテキストボックスが表示されます。ユーザーはこれらのテキストボックスにデータを入力します。また、Enterキー(別のボタン)を押すと、テキストファイルに保存する必要があります。私は実行時にテキストボックスを生成しているので、この時点で構造化します。 誰かが私を助けることができます。複数のテキストボックスからテキストファイルにデータを保存する方法

私のコードは

ます。private void create_pos(オブジェクト送信者、EventArgsの電子) { counter_1 ++です。

 if (counter_1 == count) 
     { 
      left += 300; 
      top = 50; 
      count = count + 25; 

     } 
     List<Button> buttons = new List<Button>(); 

     Button newButton = new Button(); 
     buttons.Add(newButton); 
     this.Controls.Add(newButton); 
     newButton.Left = left; 
     newButton.Top = top; 



      TextBox newtextbox = new TextBox(); 

     Controls.Add(newtextbox); 


     if (counter_1 == 100) 
     { 
      button1.Enabled = false; 
     } 

     newtextbox.Left = left + 100; 
     newtextbox.Name = "text" + counter_1; 

     // TextWriter tsw = new StreamWriter(@"d:\test.txt", true); 
     //tsw.WriteLine(newtextbox.Text); 
     // tsw.Close(); 

     newtextbox.Top = top; 
     top += newButton.Height + 2; 
     newButton.Text = "position" + counter_1; 


     textBox1.Text = newtextbox.Name; 
    } 
    private void Save_Click(object sender, EventArgs e) 
    { 
     foreach (Control item in Controls) 
     { 

      if (item.GetType() == typeof(TextBox)) 
      { 
       savetext[counter_1] = item.Text.ToString(); 
      } 



      System.IO.File.WriteAllText("d:\\test.txt", savetext.ToString()); 
     } 
    } 
+3

は、誰かがあなたが –

+0

を試してみましたコードが含まれている場合に生成されたテキストボックスからのデータを、データの保存や読み込み中にあなたの問題は、あなたを助ける制御します? – Thennarasan

+0

データの保存に問題があります。 –

答えて

0

フォームのコントロールをthis.FindControlメソッドを使用して検索し、テキストボックスであるかどうかを確認します。テキストボックスの場合は、.Textプロパティを使用してコンテンツを読み取ります。ループを使用してコントロールを反復処理します。

あなたが生成されたコントロールのリストをmaintingされていない場合、この操作を行います。あなたが生成されたコントロールを維持するために、リストを使用している場合、

string filePath = "path to text file"; 
StringBuilder contentBuilder = new StringBuilder(); 
foreach (Control item in Controls) 
{ 
    //i don't remember if this check would work. if it doesn't work try item.GetType() == typeof(TextBox) 
    if (item is TextBox) 
    { 
      contentBuilder.Append(((TextBox)item).Text); 
    } 
} 

string content = contentBuilder.ToString(); 

if(!string.IsEmptyOrWhiteSpace(content)) 
{ 
    using(StreamWriter writer = new StreamWriter(filePath)) 
    { 
     //check if Write or WriteLine or something else would work. 
     writer.Write(content); 
    } 
} 

をそしてちょうどループの一部に変更。

+0

いくつかのサンプルコードで彼を説明すると、彼はよく理解します.. –

+0

コントロールを見つける必要はありません。フォーム上のコントロールのコレクションを反復するだけです。 –

+0

ダイナミックコントロール(例えば、リスト)を追跡する方がよりエレガントで効率的です。特に、既にフォーム上にあるテキストコントロール(または後から追加される可能性があります)と動的コントロールを区別することができます。また、「あなたの処理を行う」は、この質問の中核部分です。 –

0

あなたがしたいことは、タイプTextBoxの子コントロールを繰り返し、そのテキストを収集し、それらの収集された値で文字列を作成します。これで、ファイルに書き込むテキストとファイルのパスが作成されました。あなたが今に関係しているものと、すでに上かもしれない他のテキストボックスを区別できるように、私はあなたのダイナミックテキストボックスを追跡するだろう

StringBuilder contentBuilder = new StringBuilder(); 
foreach (TextBox dynamicText in this.Controls.OfType<TextBox>()) 
{ 
    contentBuilder.AppendFormat("Text in {0} is {1} \n", dynamicText.Name, dynamicText.Text); 
} 
string pathOfFile = @"path here"; 
System.IO.File.WriteAllText(pathOfFile,contentBuilder.ToString()); 
+0

これは、フォーム上に(現在または将来の)非動的TextBoxコントロールがないことを前提としています。正当な仮定であるかもしれないし、そうでないかもしれないが、それは脆弱なものである(将来のコード保守で容易に破る)。 –

1

:その後、アクションを実行するFile.WriteAllTextメソッドを使用することができますフォーム、または後で追加する可能性があります。 TextBoxを生成してフォームに追加すると、そのテキストボックスへの参照もリストに保存されると仮定します。 Enterキー(またはあなたが書き込みをトリガーする他のイベントハンドラ)のイベントハンドラで

List<TextBox> dynamicTextBoxes = new List<TextBox>(); 

、あなたがコントロールからテキストを収集し、それを書くことができます。あなたがそのを呼び出すことができます

private void WriteTextBoxes(string path, List<TextBox> textBoxes) 
{ 
    // Here we use some Linq to quickly get all of the text, but you could 
    // also use an explicit loop 
    string text = string.Join(Environment.NewLine, textBoxes.Select(t => t.Text)); 
    File.WriteAllText(path, text); 
} 

あなたの要件はここにあるまさに明確ではないが、それでは、一度に一つの行にテキストを書き込むためにテキストボックスとファイル名のリストを受け入れ関数を書いてみましょう

ダイナミックテキストボックスのリストを渡し、あなたのイベントハンドラからの方法は、

WriteTextBoxes(@"C:\Temp\My.txt", dynamicTextBoxes); 
関連する問題