Доступ к переменным с использованием других переменных строк в C #? EVAL? - PullRequest
2 голосов
/ 09 февраля 2012

У меня есть форма с множеством страниц настроек. Все страницы одинаковы, поэтому я предпочел бы просто создать одну форму, а затем передать имя параметра, который должен редактироваться. Как бы я это сделал? Допустим, форма называется «ConfigForm», я хочу иметь возможность вызывать ее примерно так:

new ConfigForm("event1").Show();

Просто, это вызывает ConfigForm и отправляет строку «event1». Однако, зная, что я ищу параметр «event1», как мне теперь получить доступ к этому параметру? Обычно для доступа к настройке я предполагаю, что я использовал бы что-то вроде этого: (event1 - StringCollection)

string varName = Properties.Settings.Default.passedString[3];

Как мне поместить "event1" в строку, когда event1 хранится в переменной "sentString"? В PHP я бы использовал что-то вроде EVAL. Как бы я это сделал в C #?

---- РЕДАКТИРОВАТЬ

Предыдущие ответы решили проблему «настроек»; но это не отвечает на основной вопрос. Как вы используете строку, переданную в переменной в качестве идентификатора переменной? Так что, если бы у меня была строка с именем «sentString», в которой был бы сохранен текст «event1» ... Как бы я мог преобразовать это:

this.(passedString).Text = "test";

в

this.event1.Text = "test";

Ответы [ 3 ]

1 голос
/ 09 февраля 2012

Default наследуется от SettingsBase со следующим свойством:

Object this[
    string propertyName
] { get; set; }

Таким образом, вы можете использовать [].Не забудьте привести его к классу StringCollection, как показано ниже

((StringCollection)Properties.Settings.Default[passedSetting])[3]

Если вы хотите обновить свой StringColleciton, вы можете получить ссылку на него следующим образом:

StringCollection collection = (StringCollection)Properties.Settings.Default[passedSetting];
collection.Add("another value");
collection[3] = "replace";
Properties.Settings.Default[passedSetting] = collection; // We'd rather call the setter.
0 голосов
/ 10 февраля 2012

Чтобы получить / установить параметр с помощью строкового ключа, используйте Settings.Default.this [] indexer.

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

this.Controls["button1"].Text = "someText";

// or
this.Controls.Find("button1", true).First().Text = "someText";

И если это касается какого-либо свойства формы или любого другого объекта, U может использовать свои собственные специальные сеттеры или, наконец, отражение .

Но избегайте использования отражения в такой простой ситуации.

0 голосов
/ 09 февраля 2012

Определите конструктор в форме, в которую вы хотите передать аргумент.

public class MyForm : Form
{
    protected readonly string setting;

    public MyForm(string setting)
    {
        this.setting = setting;
    }
}


// to open
(new MyForm("event1")).Show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...