Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将文本应用于第三方控件时的编程问题_.net_Oop - Fatal编程技术网

.net 将文本应用于第三方控件时的编程问题

.net 将文本应用于第三方控件时的编程问题,.net,oop,.net,Oop,我在windows应用程序中使用了一些第三方控件 我们的代码中使用了一个片段,它重新初始化表单上所有控件的所有.text属性 除了一个控件外,一切正常。 此控件与Windows面板类似,只是它具有下拉外观。 此控件具有与之关联的.Caption属性,而不是.Text属性 每当我使用这些代码时,都会出现问题 foreach (Control oControl in this.Controls) { if (oControl is DropDownPanel) { {

我在windows应用程序中使用了一些第三方控件

我们的代码中使用了一个片段,它重新初始化表单上所有控件的所有.text属性

除了一个控件外,一切正常。 此控件与Windows面板类似,只是它具有下拉外观。 此控件具有与之关联的.Caption属性,而不是.Text属性

每当我使用这些代码时,都会出现问题

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”