繁体   English   中英

如何在C#中将对象名称作为参数传递给函数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM