[英]How in C# to pass a name of the object as a parameter to function?
我有更改鼠标单击时布尔属性状态的代码,具体取决于所单击对象的名称:
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
FrameworkElement feSource = e.Source as FrameworkElement;
switch (feSource.Name)
{
case "r1s1":
if (r1s1.IsSelected == false)
r1s1.IsSelected = true;
else
r1s1.IsSelected = false;
break;
case "r1s2":
if (r1s2.IsSelected == false)
r1s2.IsSelected = true;
else
r1s2.IsSelected = false;
break;
.............
}
e.Handled = true;
}
我想执行相同的操作,将发送方的名称(r1s1,r1s2等)作为参数传递给该字符串,并与属性名称(IsSelected)组合以优化代码。 像这样(只是想法):
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
FrameworkElement feSource = e.Source as FrameworkElement;
ChangeSelection (feSource.Name)
}
public void ChangeSelection(string name)
{
if (name.IsSelected == false)
name.IsSelected = true;
else
name.IsSelected = false;
}
请纠正我。 我做错了什么?
我对WPF并不满意,但我相信您想将feSource传递给ChangeSelection。 然后将其强制转换为“真实”类型,无论是CheckBox还是其他类型,然后修改其上的.IsSelected属性。
我不知道为什么当您将真实对象作为参数(对象发送者)时,为什么要按名称进行此操作。
您可能只想将目标引用存储在每个项目的“标签”属性中。 这样一来,您将不会传递所有魔力。
您想按其名称访问控件。 以下代码假定您的控件是“ RadioButton”,并且您的代码在窗体上。
public void ChangeSelection(string name)
{
if (this.Controls.ContainsKey(name))
{
RadioButton radio1 = this.Controls[name] as RadioButton;
radio1.IsSelected = !radio1.IsSelected;
}
}
您要传递给函数的是一个字符串。 因此,当您尝试在函数中寻址name.IsSelected时,您正在寻找String.IsSelected方法(是否存在)?
在top函数中的哪里声明r1s1和r1s3? 这些是您应该尝试调用的对象。
和语法糖注释:
public void ChangeSelection(string name)
{
// resolve object from name here
feObject.IsSelected = ! feObject.IsSelected;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.