Как я могу добавить значение в app.config с циклом для, когда ключ должен быть увеличен до значения 1? - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь добавить путь к значению с помощью цикла «for», но также необходимо увеличить ключ до значения 1. Например:

<appSettings>
<add key="Path0" value="C:\Users\f.simora\Desktop\DP aplikacia />
<add key="Path1" value="C:\Users\f.simora\Desktop\example />
<add key="Path2" value="C:\Users\f.simora\Desktop\pause" />

Мой кодне работает:

      private void btnAdd_Click(object sender, EventArgs e)
    {
        var appConf = System.Configuration.ConfigurationManager.AppSettings;
        int cnt = appConf.Count;
        if(cnt != 0)
        {
            for (int i = 0; i < cnt; i++)
            {
               if (i > cnt)
                { 
                    Configuration configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
                    configuration.AppSettings.Settings.Add("Path" + i, textBox2.Text);
                    configuration.Save(ConfigurationSaveMode.Modified);
                    ConfigurationManager.RefreshSection("appSettings");
                    dt.Rows.Add(textBox2.Text);
                    this.dataGridView1.DataSource = dt;
                }
                else
                {
                    MessageBox.Show("Add is not complete", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                } 
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Ваш if блок неверен, потому что прежде, в цикле, вы увеличиваете i, пока он не достигнет cnt.И когда оно достигнуто, тело цикла for не запускается, поэтому условие if никогда не выполняется.

Я думаю, что вы, возможно, захотите изменить свой блок if на try-catch, и, вероятно, это был поток, который вы хотели получить:

try
{ 
    Configuration configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    configuration.AppSettings.Settings.Add("Path" + i, textBox2.Text);
    configuration.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection("appSettings");

    dt.Rows.Add(textBox2.Text);
    this.dataGridView1.DataSource = dt;
}
catch (Exception ex)
{
    MessageBox.Show("Add is not complete.\n" + exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} 

Этот код попытается запуститьи если он получит какие-либо ошибки, он зафиксирует их и отобразит в MessageBox.

ОБНОВЛЕНИЕ

Я думаю, что ваша проблема не только в цикле, но ичто после нажатия кнопки у вас есть цикл, который добавляет ваше textBox2.Text к значению Path[i] каждый раз, и этот текст совпадает с тем, как он * НЕ ** изменяется в цикле.Я не уверен, как вы хотите установить значения, но вы также должны понимать, что в вашем цикле кажется, что вы просто добавляете одно и то же значение к каждому пути при событии нажатия кнопки.

Это означает, что если вы хотитеЧтобы добавить совершенно новый путь к настройкам, вы можете сделать это следующим образом:

var appConf = System.Configuration.ConfigurationManager.AppSettings;
var count = appConf.Count;

try
{
    // As OP commented this line fixed the problem
    value = null;

    Configuration configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    configuration.AppSettings.Settings.Add("Path" + count, textBox2.Text);
    configuration.Save(ConfigurationSaveMode.Modified);

    ConfigurationManager.RefreshSection("appSettings");
    dt.Rows.Add(textBox2.Text);
    this.dataGridView1.DataSource = dt;
}
catch (Exception ex)
{
    MessageBox.Show("Add is not complete.\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
0 голосов
/ 30 ноября 2018

Ваше условие неверно

for (int i = 0; i < cnt; i++)
{
   if (i > cnt)

Условие if никогда не будет выполнено там, где вы написали свой фактический код.

Вам необходимо удалить это условие

...