通过名称作为字符串访问对象 c#

Access an object through its name as a string c#

我试图找出如何通过与对象名称同名的字符串访问对象。 例如,我想使用 for loop

更改 n 次 Buttons 的 属性
    public static object GetObject(string ObjectName)
    {
        // this Method has to return an Object through his name     
    }
    for (int i = 1; i < 4; i++)
        {
            GetObject(Convert.ToString("Button" +i) ).Text = Convert.ToString(i);
        }

    }
  

}

此代码与此代码功能相同

Button1.Text = "1";
Button2.Text = "2";
Button3.Text = "3";

您可以使用 C# 开发不同类型的应用程序。即 WebWinFormsWPF。他们有不同类型的 ControlType。我假设您正在开发 WinForms 应用程序。在这种情况下,您可以使用 WinFormControls 属性 来访问 Form.

的所有 Controls

请检查以下代码块的实现:

    public object GetObject(string ObjectName)
    {
        // this Method has to return an Object through his name     
        Control myControl = Controls.Find(ObjectName, true).FirstOrDefault();
        if (myControl != null)
        {
            // Do Stuff
            return myControl;
        }
        else return null;
    }

    private void RenameButtons()
    {
        for (int i = 1; i < 4; i++)
        {
            //GetObject(Convert.ToString("Button" + i)).Text = Convert.ToString(i);
            object btn = GetObject(Convert.ToString("Button" + i));
            if (btn != null) ((Button)btn).Text = Convert.ToString(i);
        }
    }

您将通过以下 this link.

找到有关控件 属性 的更多详细信息

你可以试试这个

foreach (Control control in Controls)
{
   var btn = control as Button;

  if ( btn != null && btn.Name.StartsWith("Button") )
  {
      var i= btn.Name.Substring(6, 1)

       //if( i.Convert.ToInt32() <4 )  //optional
      btn.Text = i;
   }
}