2016-06-06 21 views
-2

Ich habe ein neues Formular mit einigen Checkboxen hinzugefügt. Wenn die Datei settings.txt erstellt wird, wird standardmäßig nichts darauf geschrieben. Also ich bin immer einige Fehler, da die Variablenwerte enthalten nur ein Element/Index so die LinieWie kann ich alle Kontrollkästchen standardmäßig deaktivieren?

checkBox2.Checked = Convert.ToBoolean(Convert.ToInt32(values[1])); 

aus gebundener Index Ausnahme geben wird, und auch die Linie

checkBox1.Checked = Convert.ToBoolean(Convert.ToInt32(values[0])); 

Was ich will Wenn die Datei "settings.txt" leer ist, setzen Sie alle Kontrollkästchen auf "false" (nicht angehakt) und schreiben Sie auch in die Datei "settings.txt" die Werte der einzelnen Kontrollkästchen als "false"/"unchecked".

Das Problem ist, ich schreibe in die Datei die Werte nur für den Fall.

Ich brauche es auch im Konstruktor öffentlichen OptionsMenuForm()

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 

namespace Test 
{ 
    public partial class OptionsMenuForm : Form 
    { 
     string settingsFile = Path.GetDirectoryName(Application.LocalUserAppDataPath) 
      + "\\settings" + "\\settings.txt"; 


     public OptionsMenuForm() 
     { 
      InitializeComponent(); 

      string[] values = System.IO.File.ReadAllText(settingsFile).Split(','); 
      checkBox1.Checked = Convert.ToBoolean(Convert.ToInt32(values[0])); 
      if (Form1.files.Length == 0) 
      { 
       checkBox2.Checked = false; 
       checkBox2.Enabled = false; 
      } 
      else 
      { 
       checkBox2.Checked = Convert.ToBoolean(Convert.ToInt32(values[1])); 
      } 
      checkBox3.Checked = Convert.ToBoolean(Convert.ToInt32(values[2])); 
      checkBox4.Checked = Convert.ToBoolean(Convert.ToInt32(values[3])); 

      checkBox1.CheckedChanged += CheckBoxesCheckedChanged; 
      checkBox2.CheckedChanged += CheckBoxesCheckedChanged; 
      checkBox3.CheckedChanged += CheckBoxesCheckedChanged; 
      checkBox4.CheckedChanged += CheckBoxesCheckedChanged; 
     } 

     private void CheckBoxesCheckedChanged(object sender, EventArgs e) 
     { 
      StringBuilder sbValues = new StringBuilder(); 
      int i = 0; 

      i = checkBox1.Checked ? 1 : 0; 
      sbValues.Append(i.ToString() + ","); 

      i = checkBox2.Checked ? 1 : 0; 
      sbValues.Append(i.ToString() + ","); 

      i = checkBox3.Checked ? 1 : 0; 
      sbValues.Append(i.ToString() + ","); 

      i = checkBox4.Checked ? 1 : 0; 
      sbValues.Append(i.ToString() + ","); 

      System.IO.File.WriteAllText(settingsFile, sbValues.ToString()); 
     } 
    } 
} 
+0

'if (values.Length == 0)' ' – TheLethalCoder

+1

foreach (var cb in this.Controls.OfType ()) { // richten Sachen Ihres Steuerelemente Eigenschaft auf false .checked. } ' – MethodMan

Antwort

1

wie etwa

var settings = System.IO.File.ReadAllText(settingsFile); 
if(settings =="") 
{ 
    settings = "0,0,0,0,0"; 
} 

string[] values = settings.Split(','); 
1

Die einfache Art und Weise zu verwalten:

this.checkBox1.Checked = false; 
this.checkBox2.Checked = false; 
this.checkBox3.Checked = false; 
this.checkBox4.Checked = false; 

Je schwieriger Weg:

foreach (Control ctl in this.Controls) 
{ 
    if (ctl is CheckBox) (ctl as CheckBox).Checked = false; 
} 
01 so etwas wie diese
0

Von dem, was ich Ihr Setting verstanden aussieht:

"a, b, c, d, e"

(a-e die indivudal Einstellungen zu sein). möchte ich zunächst prüfen, ob die Zeichenfolge nicht leer ist

string allText = System.IO.File.ReadAllText(settingsFile); 
if (allText.Length == 0) 
{ 
    // Set all checkBoxes to be unchecked 
} 
else 
{ 
    string[] values = allTextSplit(','); 
    // ...... 
} 

diese Weise die Verweise auf Ihre String-Array würde nie ausgeführt werden, da Sie für die Länge der Einstellungen überprüfen, bevor und damit nicht die Ursache der OutOfRange Ausnahme.

Alternativ, was ich würde es vorziehen:

string allText = System.IO.File.ReadAllText(settingsFile); 
if (allText.Split(',').Length != 5) 
{ // ... } 

diese Weise können Sie für die Menge der Werte, die Sie aus der Einstellungsdatei erhalten überprüfen.

Verwandte Themen