需求说明:我希望自己创建多个用户控件,同时这些控件都通过接口实现多态,现在问题来了,当我通过接口来实现多态时,如何同时获取用户控件自身的属性呢?例子:public class ctlWelcome : System.Windows.Forms.UserControl,IUserControl
{
....
private string nextControlName;
/// <summary>
/// 下一个控件的名称
/// </summary>
public string NextControlName
{
get { return this.nextControlName; }
set { this.nextControlName = value; }
}
....
}
---------------------
接口:
namespace SetupProgram
{
/// <summary>
/// IUserControl 的摘要说明。
/// </summary>
public interface IUserControl
{
     string NextControlName { get; set; }
}
}---------------------------
实现代码:
Hashtable page = new Hashtable();ctlWelcome uc = new ctlWelcome();
uc.Width = mainPanel.Width;
uc.Height = mainPanel.Height;
uc.NextControlName = "aaa";
IUserControl iuc = (IUserControl) uc;此时已经无法使用Width、Height等属性,而只能实现iuc.NextControlName。请问我如何可以多态实现用户控件的属性和在用户控件中自定义的属性。

解决方案 »

  1.   

    没是很明白,你用 IUserControl iuc = (IUserControl) uc; 得到的iuc只是IUserControl接口的实现了,与width,height什么根本没有关系。改成IUserControl iuc = new ctlWelcome();试下呢
      

  2.   

    如何同时获取用户控件自身的属性呢?明白楼主的意思,比如我们的窗口myForm继承于Form,我们想专注于myForm本身的属性,而不是一看就把Form的属性也搞出来眼花嘹乱一种方法是你把myForm的自身特征定义在一个类中如FormPropety,然后把它作为myForm的一个成员属性,这样,你就可以在myForm实例中如myForm1.FormPropety.特殊性性了
    另一种方法就是myForm作为一个控件,用普通的方法,然后再定义一个myForm的访问类如myFormAccess,把myForm作为myFormAccess的一个成员如myFormX,这个类中只定义myForm本身的属性,直接访问myFormX的特征属性即可。
    后面的一种方法不难理解,我们可以看commonDialog,FileOpenDialog等等,它们是一个窗口,但是没有普通窗口那样的太普通的属性而是针对commonDialog、FileOpenDialog特有的属性给用户,楼主可以模仿后者