Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用变量(c#)引用对象_C# - Fatal编程技术网

使用变量(c#)引用对象

使用变量(c#)引用对象,c#,C#,我一直在做一个程序,需要在执行过程中更改对象属性。为了便于管理,我保留了原始对象名称,即“button1” 我的问题是,是否有一种方法可以通过变量引用对象名,并通过循环进行更改 我不得不写一些像这样的东西 private void disable () { this.button1.Visible = false; this.button2.Visible = false; this.button3.Visible = false; //... } 我试过类似的

我一直在做一个程序,需要在执行过程中更改对象属性。为了便于管理,我保留了原始对象名称,即“button1”

我的问题是,是否有一种方法可以通过变量引用对象名,并通过循环进行更改

我不得不写一些像这样的东西

private void disable ()
{
    this.button1.Visible = false;
    this.button2.Visible = false;
    this.button3.Visible = false;
    //...
}
我试过类似的方法

int a;
for(a=1;a==50;a++)
{
    this.buttona.Visible =false;
}
这显然不起作用

那么,有没有一种方法可以用变量引用对象

提前感谢

您可以使用以下代码:

        foreach (var c in this.Controls)
        {
            if (c is Button button)
                button.Visible = false;
        }
或者这个:

        for (int i = 0; i < 50; i++)
        {
            var c = this.Controls["button" + i];
            (c as Button).Visible = false;
        }
for(int i=0;i<50;i++)
{
var c=此。控制[“按钮”+i];
(c为按钮)。可见=假;
}

如果您不执行UWP、WPF等操作,这可能不起作用。 如果您正在进行UWP、WPF等,这可能会有所帮助。由于所有这些按钮都属于一个面板(我假设是这样),因此面板的子项或内容应该是一个
IEnumerable
对象,可以由
foreach
循环处理。例如,如果我有以下XAML代码:

<Grid x:Name="myGrid">
    <Button x:Name="Button1" Tag="myButton1"/>
    <Button x:Name="Button2" Tag="myButton2"/>
    <!-- ... -->
</Grid>

查找数组。您可以创建一个列表并使用任何循环来引用对象。创建一个按钮数组,然后使用foreach循环或带有索引变量的for循环遍历它们。此外,我建议正确命名按钮-虽然我知道使用默认名称很容易,但如果您或其他人必须维护代码,这将导致您出现问题,这将大大增加引入错误和其他一些有趣内容的可能性。这可能是一个错误。在我看来,你想隐藏50个按钮。将它们放在一个公共控件(如面板)中并隐藏面板而不是其他按钮可能更有效。若您希望按钮的共享行为超出可见性,则需要一个数组或集合;通常,将这些按钮放在面板上并隐藏面板比较容易。我在代码上创建按钮时使用:
private Button button1=new Button()但是,当我为变量赋值时:
var c=this.Controls[“button”+num.ToString()]
它确实返回null,并且不允许我使用以下命令初始化它:
this.Controls.Add(c as按钮)或使用以下命令更改属性:
(c作为按钮)。位置=新点(30,90)我是否缺少一些使用引用或可能发生的情况?提前感谢@brandonminick您是否将button1添加到表单的控件集合:this.controls.Add(button1),他们在这个名单上吗?您是否设置了“名称”字段:button1.Name=“button1”?
foreach(Button button in myGrid.Children){
    if(!button.Tag.StartsWith("myButton")) continue;
    button.Visibility = Visibility.Collapsed;
}