PDA

Показать полную графическую версию : [решено] Как в цикле на каждом шаге изменять имя значения в setings.setings ?


Страниц : [1] 2

Sadhacker
01-06-2012, 13:07
Вот есть код:
private void Form1_Load(object sender, EventArgs e)
{

for (int i = 1; i <= 3; i++)
{

string a;
a = (Properties.Settings.Default.s1);
label1.Text = a;


}
}


Мне нужно чтобы на каждом шаге в строчке "a = (Properties.Settings.Default.s1);" s1 увиличевалось на 1. Тоесть не 2 шаге а должно быть присвоено Properties.Settings.Default.s2. Делал "a = ("Properties.Settings.Default.s"+i);" но потом "а" присваивается путь "Properties.Settings.Default.s2", а не само знечение этого параметра.

Delirium
01-06-2012, 13:55
Подсказка:
//Перебор всех свойств.
foreach(object obj in Properties.Settings.Default) //цикл для всех свойств
{

}
Далее можно проверять, если имя начинается с S, и последние цифры равны цифрам в цикле FOR, то выводить значение текущей obj.

Sadhacker
01-06-2012, 13:58
Delirium, спасибо, сейчас попробую и отпишусь)

foreach(object obj in Properties.Settings.Default) //цикл для всех свойств
{
} »


Ошибка 1 Оператор foreach не работает с переменными типа "WindowsFormsApplication1.Properties.Settings", поскольку "WindowsFormsApplication1.Properties.Settings" не содержит открытого определения для "GetEnumerator" C:\Documents and Settings\Администратор\мои документы\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 26 25 WindowsFormsApplication1

Delirium
02-06-2012, 11:47
Хм... странно, я думал, у него есть интерфейс IEnumerator...
В понедельник потестирую на работе, попробуем что нибудь придумать.

Sadhacker
02-06-2012, 23:13
Delirium, ок.

Delirium
04-06-2012, 07:45
foreach (System.Configuration.SettingsProperty obj in Properties.Settings.Default.Properties) //цикл для всех свойств
{
textBox1.Text += obj.Name + "=" + obj.DefaultValue + Environment.NewLine;
}

Результат в textBox: (s1-s5 - наименования параметров, a1-a5 - значения
s3=a3
s2=a2
s5=a5
s4=a4
s1=a1


Ну а дальше, я думаю, просто - проверять в IF, если имя равно S1-s5, то выводить те, что нужно.

Sadhacker
04-06-2012, 19:40
Delirium, огромное спасибо!
Сделал вот так:
for (int i=0;i<=16;i++)
{
foreach (System.Configuration.SettingsProperty obj in Properties.Settings.Default.Properties) //цикл для всех свойств
{

if (obj.Name == "s" + i)
{
textBox1.Text += obj.DefaultValue.ToString();

}

}

}
и все работает так как и надо было.

Delirium
05-06-2012, 01:04
Sadhacker, оформляй код тегами CODE, а то читать тяжело. Всегда рады помочь.

Sadhacker
05-06-2012, 12:45
Delirium, появилась проблема: когда изменяю значение параметра в файле config, оно не обновляется в программе. А именно в obj.DefaultValue. У меня все настройки редактируются вручную в файле настроек. Как сделать так что-бы значение обновлялось?

Delirium
06-06-2012, 01:31
Как сделать так что-бы значение обновлялось? »
Properties.Settings.Default.s1 = "новое значение";
Properties.Settings.Default.Save(); - Вот что самое главное! Иначе не сохранится. :)

Sadhacker
06-06-2012, 13:16
Delirium, Вы не поняли. Из программы настройки изменять не нужно. Нужно, чтобы когда я изменяю значение в файле config через блокнот то оно подтягивалось в программу. А при использовании такого цикла как вы посоветовали значение остается таким же как было при компиляции программы. Это как-то можно решить, или все таки проще будет 16 раз скопировать кусок кода?

Delirium
06-06-2012, 13:42
то оно подтягивалось в программу »
Программа считывает данные из файла исходник.exe.config при старте программы. Файл config лежит рядом с EXE файлом. Если поменять значения блокнотом и запустить программу, то значения подтянутся. Если поменять их в ходе работы программы, то увы, не получится. Поможет только рестарт программы.
Для считывания таких параметров лучше завести отдельный какой нибудь INI файл, и в нем писать параметры и значения, и считывать их.

Sadhacker
06-06-2012, 23:03
Delirium, вот в том и проблема что не обновляется даже после перезагрузки. Попробуйте запустить откомпелированным последний код что я збрасывал и понаблюдать что obj.DefaultValue остается старым.

Delirium
07-06-2012, 01:03
Sadhacker, виноват, забыл кое о чем. Файл config лежит вот по этому пути C:\Users\USER\AppData\Local\Имя_Программы.

Sadhacker
07-06-2012, 11:51
Delirium, я в настройках указал тип-приложение. Так что настройки лежат в папке с программой.

Delirium
08-06-2012, 01:01
Так что настройки лежат в папке с программой »
Если бы это было так, настройки бы подтягивались 100%. Так что дело в другом. Кинь проект, если он небольшой, я посмотрю, что там не так.

Sadhacker
09-06-2012, 19:03
Delirium, вот.

Delirium
14-06-2012, 01:25
OK, сегодня постараюсь посмотреть.

Сразу вопрос - зачем ставить .Net Framework 4 client profile? Для простых приложений 2 фреймворка за глаза. Рекомендую не напрягать системы большим фреймворком для выполнения простых задач.
По поводу сохранения - действительно странно, у меня раньше работало. Буду смотреть.
http://www.vr-online.ru/content/c-sohranenie-parametrov-prilozhenija-2146 - здесь тоже говорится, что надо делать как обычно.

Sadhacker
14-06-2012, 18:22
Delirium, да я новичок. В версиях фреймворка не разбераюсь, вот и поставил самый последний, думал - самый лучший.

Delirium
15-06-2012, 00:58
да я новичок »
Тогда объясни мне смысл своей задачи? Я вот в упор не вижу, зачем необходимо делать то, что ты хочешь? Это я к тому, что наверняка для твоей задачи есть более удобные способы решения. Я даже навскидку один уже вижу. Опиши суть.




© OSzone.net 2001-2012