winforms 控件数组中时,控件不包含“xxx”的定义

ggazkfy8  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(170)

我创建了一个控件数组:

public static string[] ldcNames = new string[16] {"ledIndicator0", "ledIndicator1", "ledIndicator2", "ledIndicator3", "ledIndicator4", "ledIndicator5", "ledIndicator6", "ledIndicator7", "ledIndicator8", "ledIndicator9", "ledIndicator10", "ledIndicator11", "ledIndicator12", "ledIndicator13", "ledIndicator14", "ledIndicator15"};

在我制作的其他通用Winform控件数组中,我可以访问控件的属性。上面的Array是来自TA.Winforms.Controls包的LedIndicators数组。
我以这种方式访问其他控件:

var lbl1 = this.Controls[Global.lblNames[rangeLabel]];` and `lbl1.Text = "xxxxx"

这样做效果很好。尝试对LedIndicator控件执行相同的操作会导致以下错误:(在VS IDE中,“Cadence”带有红色波浪线下划线

var ld1 = this.Controls[Global.ldcNames[rowNum]];
ld1.Cadence = CadencePattern.SteadyOn;

错误CS1061“Control”不包含“Cadence”的定义,并且找不到接受“Control”类型的第一个参数的可访问扩展方法“Cadence”。
我可以访问标准属性,但无法访问此控件的任何扩展或唯一属性。
在这里完全迷路了,急需帮助。提前感谢。

hsgswve4

hsgswve41#

正如其他人所述,您需要将控件强制转换为正确的类型,在您的示例中为LedIndicator

LedIndicator ld1 = (LedIndicator)this.Controls[Global.ldcNames[rowNum]];
ld1.Cadence = CadencePattern.SteadyOn;

您也可以使用as保留字:

LedIndicator ld1 = this.Controls[Global.ldcNames[rowNum]] as LedIndicator;
ld1.Cadence = CadencePattern.SteadyOn;

相关问题