.net 将文本应用于第三方控件时的编程问题
我在windows应用程序中使用了一些第三方控件 我们的代码中使用了一个片段,它重新初始化表单上所有控件的所有.text属性 除了一个控件外,一切正常。 此控件与Windows面板类似,只是它具有下拉外观。 此控件具有与之关联的.Caption属性,而不是.Text属性 每当我使用这些代码时,都会出现问题.net 将文本应用于第三方控件时的编程问题,.net,oop,.net,Oop,我在windows应用程序中使用了一些第三方控件 我们的代码中使用了一个片段,它重新初始化表单上所有控件的所有.text属性 除了一个控件外,一切正常。 此控件与Windows面板类似,只是它具有下拉外观。 此控件具有与之关联的.Caption属性,而不是.Text属性 每当我使用这些代码时,都会出现问题 foreach (Control oControl in this.Controls) { if (oControl is DropDownPanel) { {
foreach (Control oControl in this.Controls)
{
if (oControl is DropDownPanel)
{
{
oControl.Text = rm_ResourceManager.GetString(oControl.Name + ".Text");
}
}
}
在上面的方法中,这里没有为DropDownPanel控件设置文本。
因为.Text不可用于DropDownPanel控件
我也不能做以下事情
((DropDownPanel)oControl).Caption = rm_ResourceManager.GetString(oControl.Name + ".Text");
因为如果我试图用DropDownPanel的控件强制转换oControl,它将抛出异常
你知道我该如何克服这种状况吗
关于使用'as'关键字,您可以这样做
foreach (Control oControl in this.Controls)
{
DropDownPanel ddp = oControl as DropDownPanel;
if (ddp != null)
{
ddp.Caption = rm_ResourceManager.GetString(oControl.Name + ".Text");
}
else
{
TextBox tb = oControl as TextBox;
if (tb != null)
{
tb.Text = rm_ResourceManager.GetString(oControl.Name + ".Text");
}
}
}
这仅设置下拉面板上的标题属性和文本框上的文本属性。如果您需要执行此操作或任何其他类型的控件,则需要进一步添加as/If/else块,但我不建议这样做
我建议重新考虑这个方法。您可能需要一个需要清除其文本的控件的列表,或者您可以使用其他模式,但我们无法从您提供的有限信息中看出。一个更面向对象的解决方案是在下拉面板周围使用。此适配器将通过将其转发到adaptee下拉面板来实现整个控制界面,除了
文本
属性,该属性是根据adapter的标题
属性实现的
然后,在实例化gui时,应该将DropDownPanel包装到适配器中
这样,您就可以一视同仁地对待控件,保持代码更干净,耦合更低:gui构建者负责确保每个组件具有平等的接口,foreach循环负责对所有组件执行操作。这是Telerik控件吗?其DropDownPanel类不从控件继承,无法将其添加到控件集合。这就解释了为什么字幕没有设置,为什么你不能投
查看API文档,必须有其他类型的集合类,允许您迭代表单上存在的RADElement。查找使用过此产品的其他程序员的最佳位置是for it。是否应该是ddp.Caption而不是oControl.Caption?是的,正如我之前解释的,oControl的类型是Windows.Forms.Control,并且没有.Caption属性。但是我无法强制转换对象oControl(Windows.Form.Controls)如果我使用'as'关键字'as'自1.0以来一直是.NET的一部分,则会出现编译错误。它将尝试按指示强制转换对象,但如果强制转换失败,则返回null。不应发生运行时异常。编译错误号/消息是什么?Hello Daniel无法通过引用转换、装箱转换、取消装箱转换、换行转换或空类型转换将类型“System.Windows.Forms.Control”转换为“Telerik.WinControl.UI.RadPanelBarGroupElement”