大家知道象Tabbed Dialog一类的多页控件,用户在设计时可通过点击不同的页标签显示对应的页,并在不同页上放置控件。我想自己作一个:
  一,如何在在设计阶段捕获鼠标事件。我的想法是通过设计时的鼠标点击的座标位置来判断被点击的页标签,进而激活相应的页。
  二,用什么来作为不同的页对象。用代码画,还是用容器控件。用代码画需要记录设计时放到对应页上的对象,在设置及运行时点击不同页时实现与隐藏相当的对象,不好作;用容器作页对象的难点在于页的数量由最终用户设置的,多少不确定,动态生成也不简单啦!实乃一大难题,还请大家提供思路与意见,以期共同提高。

解决方案 »

  1.   

    1、在IDE环境下,如果想实现事件,可以用子类化来捕捉,并以代码激活开始过程。
    2、象实现sstab那样的效果,自然是容器,如果是sstabstrip就不用做容器。
    3、使用容器集合可以实现象sstab的效果,即容器嵌套。
      

  2.   

    EditAtDesignTime 属性
          返回或设置一个值,该值决定控件在设计时是否能变为活动的。在创建控件时,EditAtDesignTime 属性可读可写,在控件运行时,该属性不可用。设置值EditAtDesignTime 的设置值为:设置值 描述 
    True 允许控件在开发者设计时变为活动的。“编辑”动词将出现在控件的上
         下文菜单中。选 择“编辑”命令后,控件将变为活动的,其表现就象在
         最终用户运行时一样。 
    False (缺省)控件在设计时不能变为活动的。 
    说明仅当选定控件时,控件才保持活动状态。选定控件后,即使再次单击控件,该控件也不再处于活动状态。这时,必须再次从上下文菜单中选择“编辑”命令激活控件。注意 当用这种方法激活控件时,UserControl 对象将产生事件,以使控件能正常操作,但是控件将不能产生任何事件。此时只忽略 RaiseEvent 方法并不会产生错误。
      

  3.   

    现在实现了翻页,不过问题又来了。
    我用动态加载\卸载picturebox来实现页的增减,点击某个页标签时相应的页——即picturebox(用zOrder方法)——就显示到最前面来。这时也能在控件上画其他控件,但这时更改活动页,所有以前画上的控件就沉到下面去了,即画上去的控件并没了放在活动页[picturebox]上,而是与那些作为页对象的picturebox一样是放在“控件”主体上,而我们的目的显然是要将控件画在具体某页上,改变活动页是相应的控件应与之一起“沉浮”。
    我想过一法,即记录设计时用户画到各页上的控件,变换页标签时用ZOrder或API之SetParent方式将位置提前,然我尚不知如何记录用户画(当然也要能记录从中删除)控件的行为。请各位多多发表意见!
      

  4.   

    不知能否访问容器控件(如picturebox,frame等)中用户画上的控件,就象我们访问窗体上控件一样?
    如果能,则我的问题也可以得到解决。哪位知道?