我正在编写一个触摸屏餐厅 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/