Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как изменить значение свойства контрола по имени свойства

63K
21 октября 2013 года
Wiktor_
21 / / 31.01.2012
хочу менять свойства контролов (кнопок winForm) имея текстовое имя свойства и текстовое значение свойства (загружая из XML-ки имя и значение). Возможно ли без больших сложностей? Что смотреть?
Пробовал разобраться с Reflection, без результата…
40K
21 октября 2013 года
D129
228 / / 18.04.2012
Код:
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Control buttonByName = null;

            foreach(Control oneC in this.Controls)
            {
                if(oneC.Name == "button1")
                {
                    buttonByName = oneC;
                }

            }

            if(buttonByName != null)
            {

                buttonByName.Text = "I was found!";
            }
        }
    }
}
this.Controls
63K
21 октября 2013 года
Wiktor_
21 / / 31.01.2012
спасибо за вариант.
Но хотелось бы передать строкой "Name", "Enabled" либо другое имя свойства, так же строкой "MyButton", "True".
"Рыбу" из кода привожу ниже. Ясно, что не работает, потому как не понимаю как сохранить свойство.

string ss = "Name"; //"Enabled"
string parametr = "новое_имя";
try
{
PropertyInfo propertyInfo = myControl.GetType().GetProperty(ss);
propertyInfo.SetValue(myControl, parametr);
//var value = propertyInfo.GetValue(myControl, null); //проверка сработало ли
}
341
22 октября 2013 года
Der Meister
874 / / 21.12.2007
В лоб:
Код:
using System.ComponentModel;
using System.Reflection;

// ...

static void SetPropertyValue(object instance, string property_name, string string_value) {
    const BindingFlags flags = BindingFlags.Instance | BindingFlags.Public;
    var property = instance.GetType().GetProperty(property_name, flags);
    var converter = TypeDescriptor.GetConverter(property.PropertyType);
    var value = converter.ConvertFrom(string_value);
    property.SetValue(instance, value);
}
63K
22 октября 2013 года
Wiktor_
21 / / 31.01.2012
спасибо, разбираюсь.

чуток прилизал:
static void SetPropertyValue(object instance, string property_name, string string_value)
{
const BindingFlags flags = BindingFlags.Instance | BindingFlags.Public;
var property = instance.GetType().GetProperty(property_name, flags);
if (property == null)
{
MessageBox.Show("Ошибка обработки свойства: " + property_name);
return;
}
var converter = TypeDescriptor.GetConverter(property.PropertyType);
var value = converter.ConvertFrom(string_value);
property.SetValue(instance, value, null);
}
40K
23 октября 2013 года
D129
228 / / 18.04.2012
Binding изобретаете?

Не лучше ли тогда взять готовое решение? WPF?
86K
25 октября 2013 года
Romakky
19 / / 25.10.2013
var converter = TypeDescriptor.GetConverter(property.PropertyType)
63K
25 октября 2013 года
Wiktor_
21 / / 31.01.2012
Romakky, пожалуйста поясните мысль

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог