如何将字符串转换为控件和方法?
How can I convert String to Controls and Methods?
我想将控制方法的输出字符串化;
这是我的代码,但它不起作用;
public static string get(string control_name, string method)
{
string result = "null";
foreach (var control_ in Controls) //Foreach a list of contrls
{
if ((string)control_.Name == (string)control_name) //Find the control
{
try
{
Type type = control_.GetType();
MethodInfo method_ = type.GetMethod(method);
result = (string)method_.Invoke(method, null);
//Ejecuting and savind the output of the method on a string
}
catch (Exception EXCEPINFO)
{
Console.WriteLine(EXCEPINFO);
}
}
}
return result;
}
调用函数:
form.Text = get("button_1", "Text");
非常感谢您
由于“Text”是WinForm中某些控件的属性,而不是方法,需要参考GetProperty
(或使用InvokeMember
与GetProperty绑定)才能排序读取其值之一。
我认为下面的代码应该可以工作(但未经测试)。
顺便说一句,我不会调用方法 'get',因为它是 C# 关键字。
public static string GetControlPropertyValue(string control_name, string propertyName) {
string result = null;
Control ctrl= Controls.FirstOrDefault( c => (c as Control)?.Name == control_name)
if (ctrl != null) {
try {
var resultRaw = ctrl.GetType().InvokeMember(propertyName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, ctrl, null);
result = resultRaw as string;
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return result;
}
//invocation
var text = GetControlPropertyValue("button_1", "Text");
我想将控制方法的输出字符串化; 这是我的代码,但它不起作用;
public static string get(string control_name, string method)
{
string result = "null";
foreach (var control_ in Controls) //Foreach a list of contrls
{
if ((string)control_.Name == (string)control_name) //Find the control
{
try
{
Type type = control_.GetType();
MethodInfo method_ = type.GetMethod(method);
result = (string)method_.Invoke(method, null);
//Ejecuting and savind the output of the method on a string
}
catch (Exception EXCEPINFO)
{
Console.WriteLine(EXCEPINFO);
}
}
}
return result;
}
调用函数:
form.Text = get("button_1", "Text");
非常感谢您
由于“Text”是WinForm中某些控件的属性,而不是方法,需要参考GetProperty
(或使用InvokeMember
与GetProperty绑定)才能排序读取其值之一。
我认为下面的代码应该可以工作(但未经测试)。
顺便说一句,我不会调用方法 'get',因为它是 C# 关键字。
public static string GetControlPropertyValue(string control_name, string propertyName) {
string result = null;
Control ctrl= Controls.FirstOrDefault( c => (c as Control)?.Name == control_name)
if (ctrl != null) {
try {
var resultRaw = ctrl.GetType().InvokeMember(propertyName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, ctrl, null);
result = resultRaw as string;
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return result;
}
//invocation
var text = GetControlPropertyValue("button_1", "Text");