【问题标题】:Access an object through its name as a string c#通过对象的名称作为字符串 c# 访问对象
【发布时间】:2022-01-15 12:39:05
【问题描述】:

我试图找出如何通过与对象名称同名的字符串来访问对象。 比如我想用for循环改变n次Button的属性

    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";

【问题讨论】:

  • 我建议将您的按钮放在Dictionary&lt;string,Button&gt; 中,然后您可以为您的按钮指定唯一名称并通过ButtonDict[name].Text = "1" 访问它们
  • 你的用例是什么?请提供更多背景信息。

标签: c# winforms


【解决方案1】:

您可以使用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 找到有关 Controls 属性的更多详细信息。

【讨论】:

    【解决方案2】:

    你可以试试这个

    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;
       }
    }
    

    【讨论】:

    • if (btn?.StartsWith("Button") ?? false) {...}.
    猜你喜欢
    • 2012-05-02
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多