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);
}
как изменить значение свойства контрола по имени свойства
Пробовал разобраться с Reflection, без результата…
Код:
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!";
}
}
}
}
{
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!";
}
}
}
}
Но хотелось бы передать строкой "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); //проверка сработало ли
}
В лоб:
чуток прилизал:
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);
}
Не лучше ли тогда взять готовое решение? WPF?
var converter = TypeDescriptor.GetConverter(property.PropertyType)
Romakky, пожалуйста поясните мысль