c# - 如何用字符串替换控件的名称和方法?

标签 c# visual-studio

我正在编写一个触摸屏餐厅 POS 程序包,使用 SQL Server 和 Visual Studio 在 C# 中。为了选择一个项目,我用四十次迭代的用户控件选择按钮填充了一个表单,其中包含一个 Button 控件和一个 Label 控件。这些用户控件包括一个网格,四列宽,十丝深,列指定为 A、B、C、D,行指定为 1 到 10。根据相应项目数据表中的值,我需要使匹配的用户控件可见,设置其按钮的背景色,并将按钮的文本设置为项目的名称。要设置用户控件按钮上的文本,它带有以下代码:

   public string iButtonItem
    {
        get { return iButton.Text; }
        set { iButton.Text = value; }
    }

返回表单,我加载数据表,其中每个项目都有一个位置字段,例如 A1 或 C8。现在我需要设置按钮。 对于给定的按钮,例如位置 A3 的按钮,这行代码可以完美运行:

this.iButtonA3.iButtonItem = row["ItemName"].ToString().TrimEnd();

我的问题是,与其使用四十组 Switch/Case 代码块(每个按钮一组),不如使用一个带有替换字符串的 block 要优雅得多:“iButton”+ locationString +“.iButtonItem”这在 FoxPro 中很容易,而且我相信在 Visual Basic 中也是可能的。但我怎样才能用 C# 来实现呢?在此过程中,我尝试使用 this.Controls.Find 但这不起作用,因为我需要调用用户控件的 iButtonItem 方法。

最佳答案

您可以使用Controls.Find来访问iButtonItem,您只需转换为包含它的控件类型即可:

var uc = this.Controls.Find("iButtonA3", true).FirstOrDefault() as YouUserControlType;
if (uc != null)
    uc.iButtonItem = "Hello";

或者另一种选择

IDictionary<string, YouUserControlType> buttons;

public SomeForm()
{
    InitializeComponent();

    buttons = new Dictionary<string, YouUserControlType>()
    {
        { "iButtonA1", iButtonA1 },
        { "iButtonA2", iButtonA2 },
    };
}

允许buttons[nameString].iButtonItem = ...

关于c# - 如何用字符串替换控件的名称和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35458241/

相关文章:

c# - Visual Studio 调试器巫术

visual-studio - 很棒的 Visual Studio 宏

c# - EF Fluent api poco 使用现有 Db 生成和映射

c# - Convert.ToBoolean(string) 和 Boolean.Parse(string) 有什么区别?

visual-studio - 在 Visual Studio 调试中扩展 IEnumerable 结果 View 的快捷方式

c# - 控制台项目和winforms项目在同一个解决方案中

c# - 尝试从 Azure key 保管库获取 secret 时获得未经授权

c# - ASP.NET MVC 和 C# : HttpStatusCodeResult() vs HttpNotFound()

c# - 如果子窗口四处移动,WPF 主应用程序将停止响应

visual-studio - MS Visual Studio如何确定源文件已更改?