2017-05-11 13 views
0

私のコードで設定したデフォルトの設定を含む30個のテキストボックスを持つフォームがあります。ユーザーはそれを変更するオプションがありますが、次にアプリケーションを実行するときに、そのテキストボックスの1つ(または複数)にユーザーが選択した新しい値を保存する方法を知りたいと思います。 ありがとうございます次回アプリケーションの実行時にテキストボックスの値を保存する

+1

は、設定ファイルを使用し、保存しますそれの変更 – apomene

+0

あなたはテキストファイルまたはXMLファイルまたはデータベースにそれを保存することができます.....任意の最初の試み? –

+0

多くの方法があります:それらはDB、組み込みの設定ファイル、独自のxml/jsonファイルです。 –

答えて

0

値をファイルに保存します。 30のテキストフィールドの場合、30行またはカンマ区切りの値を使用できます。

ユーザーが値を変更し、そのファイルに新しい値を書き込むと、次回の起動時に新しい値がファイルに追加され、古いデータを読み取る必要がなくなります。この問題を解決するための

+0

この回答はおそらくもう少し詳しく述べる必要があります。たぶん、いくつかのコード例は、テキストをファイルに/から読み込んで/ロードする方法と、高レベルの説明ではなく、*どこで*行うのかの例です。さもなければ、これは既にコメントで示唆されています。 HTH –

1

簡単な方法:

//To write textbox values to file (may be used on form close) 
using (System.IO.StreamWriter sw = new StreamWriter("values.txt")) 
{ 
    foreach (var control in this.Controls) 
    { 
     if (control is TextBox) 
     { 
      TextBox txt = (TextBox)control; 
      sw.WriteLine(txt.Name + ":" + txt.Text); 
     } 
    } 
} 


//To read textbox values from file (may be used on form load) 
using (System.IO.StreamReader sr = new StreamReader("values.txt")) 
{ 
    string line = ""; 
    while((line=sr.ReadLine()) != null) 
    { 
     //Ugly, but work in every case 
     string control = line.Substring(0, line.IndexOf(':')); 
     string val = line.Substring(line.IndexOf(':') + 1); 

     if(this.Controls[control] != null) 
     { 
      ((TextBox)this.Controls[control]).Text = val; 
     } 
    } 
} 
0

あなたの保存したファイルを編集して気にしないと、テキストボックスの名前を変更するか、の順序を残すことができ、それらのレイアウトを変更する予定がない場合値をコンパイラに渡します。節約のためにこれを使用します。

ロード用
// first collect all values 
List<string> allvalues = this.Controls.OfType<TextBox>().Select(x => x.Text).ToList(); 
// write to file 
System.IO.File.WriteAllText("yourPath", String.Join(Environment.NewLine, allvalues)); 

と、この:

//load the values: 
string [] alllines = System.IO.File.ReadAllLines("yourPath"); 

List<TextBox> allTextboxes = this.Controls.OfType<TextBox>().ToList(); 
for (int i = 0; i < allTextboxes.Count; i++) 
{ 
    allTextboxes[i].Text = alllines[i]; 
} 

説明:

this.Controls.OfType<TextBox>()あなたのWindowsフォーム内のテキストボックスであるすべてのコントロールを取得します。

String.Join(Environment.NewLine, allvalues)は、すべての値を改行で区切られた文字列に結合します。

+0

ありがとうございます!私は設定ファイルでそれを行う方法を尋ねることができますか? – Jonathan

0

app.configは、多くの定義済みの設定セクションがあり、カスタム設定セクションをサポートするXMLファイルです。私たちは名前mySettingmySetting2を設定するためのタグを持っている例は、あなたがConfigurationManagerクラスを使用することができますので、あなたが、System.Configurationへの参照を追加する必要があります設定ファイルを使用するために

<?xml version="1.0"?> 
    <configuration> 
    <appSettings>  
    <add key="mySetting" value="myValue1"/> 
    <add key="mySetting2" value="myValue12" /> 
    </appSettings> 
    </configuration> 

を示しています。以下は、読書のためのサンプルであるとapp.configファイルへの書き込み:TEXTBOXからCONFIG TO

WRITE:コンフィグから

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["mySetting"].Value=textBox1.Text; 

READ:

var mySetting = ConfigurationManager.AppSettings["mySetting"]; 
関連する問題