我想创建一个更改enabled属性的方法。如何将contorl名称和属性传递给方法。
如果以下是我原来的方法:
public void ChangeProperties()
{
btnAcesScore.Enabled = true;
}
我希望每次调用此方法时都能更改“btnAcesScore”。如何将此传递给方法。我尝试将其作为字符串传递,但这不起作用。
以下是我的尝试:
public void ChangeProperties(string category)
{
category = true;
}
ChangeProperties("btnAcesScore.Enabled");
苏珊
答案 0 :(得分:10)
试试这个:
public void ChangeProperties(Control ctrl)
{
ctrl.Enabled = true;
}
并称之为:
ChangeProperties(btnAcesScore);
答案 1 :(得分:4)
这到底是什么意思?是否重用该方法来任意更改任何给定控件的Enabled
属性?如果是这样,有一种更简单的方法来完成它,如Canavar所述。
或者这个方法的重点是切换设置?在这种情况下,您的方法看起来像:
public void ChangeProperties()
{
btnAcesScore.Enabled = !btnAcesScore.Enabled;
}
或
public void ChangeProperties(Control ctrl)
{
ctrl.Enabled = !ctrl.Enabled;
}
取决于您是想只打一个控件,还是提供多个控件的访问权限。无论如何,我个人认为在方法中封装单个属性访问并没有太多意义,如果你坚持(并且这个方法没有调整其他属性),我至少会将它重命名为{ {1}}。
答案 2 :(得分:1)
由于原始问题有反射标记,我认为她想要一个反思答案(无论这是否是好设计),所以这里是一个反思答案。
表单有一个控件集合,您可以使用它来搜索它并使用反射来设置属性:
public void ChangeProperties(Form form, string category)
{
string[] parts = category.Split(".");
int index = form.Controls.IndexOfKey(parts[0]);
Control control = null;
if (index >= 0)
{
control = form.Controls[index].;
}
if (control != null)
{
PropertyInfo propertyInfo = control.GetType().GetProperty(parts[1]);
if (propertyInfo != null)
{
propertyInfo.SetValue(control, true);
}
}
}
如果您从控件所在的表单中调用它
ChangeProperties(this, "btnAcesScore.Enabled");
答案 3 :(得分:0)
怎么样
void ChangeProperty(ref bool output)
{
output = true;
}
ChangeProperty(ref btnAcesScore.Enabled);
答案 4 :(得分:0)
不确定我是否完全理解您的意图,但您可以将代理传递给某些更改了您的财产的代码......
public void ChangeProperties(Action<bool> setprop)
{
...
setprop(true);
}
然后调用它:
ChangeProperties(b => btnAcesScore.Enabled = b);
答案 5 :(得分:0)
我使用反射 - 对您发送到方法的对象使用GetType()方法,然后使用GetProperties匹配您发送的属性。然后,您可以在该点设置值。
答案 6 :(得分:0)
试试这个:
public void ChangeProperties(string category, object value)
{
var categoryConcat = category.Split('.');
var control = this.Controls.Cast<Control>()
.Where(x => x.Name == categoryConcat[0]).First();
control.GetType().GetProperty(categoryConcat[1])
.SetValue(control, value);
}
该示例可能需要对控件和属性的存在进行一些检查。
答案 7 :(得分:0)
Main()
{
ChangeProperties(ref category,True); //Where Category is the ID of the Textbox control i.e <asp:textbox ID="Category "></textbox>
}
public void ChangeProperties(ref TextBox category,bool val)
{
category.Enabled = val;
}