我的意思是想写一个组件,在组件里得到它所在的窗体,然后,得到顶级窗体的状态栏,更改里面的消息,怎么得到它所在的窗体?

解决方案 »

  1.   

    try:public Form GetParentWindow(Control c)
    {
    while (c.Parent != null)
    {
    Form f = c as Form; if (f != null)
    return f;
    else
    c = c.Parent;
    } return null;
    }
      

  2.   

    我说的是组件component,里面本身没有窗体句柄,也没有Parent
      

  3.   

    接口,该接口实现状态栏的状态设置,FORM实现该接口,然后将接口对象传给component
      

  4.   

    有个办法是给你的组件加上ParentForm属性。
      

  5.   

    楼上的主意不错,但是怎么把这个ParentForm隐藏起来,而伪装成没有这个属性呢?就是不用手动选择。
      

  6.   

    UserControl就有FindForm()这个方法直接可以获得父窗口
    你可以
    Form frm=ctr.FindForm();
    while((frm.FindForm()).FindForm()!=null)frm=frm.FindForm();  //因为桌面为所有窗口的父窗口
    return frm;
      

  7.   

    UserCtrol不是本来也有ParentForm,也N好用,为什么要“伪装”
      

  8.   

    [回ybzsu]
    component没有的,如果它有的话,反面显得有点怪怪的了,所以必须要让它的Parent像UserControl一样,你添加进去就行了,不要出现一个选择父窗口的属性给别人看到,让给改了。