您的位置:程序门 -> .net技术 -> vb.net



使用usercontrol碰到的一个画面表示问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


使用usercontrol碰到的一个画面表示问题
发表于:2007-03-13 11:57:13 楼主
我用usercontrol做了一个子画面(ctl_usercontrol),一下为主画面的调用语句:
private   sub   ctl_click(byval   sender   as   system.object,   byval   e   as   system.eventargs)   handles   ctl_click.click
                frm_usercontrol   =   new   ctl_usercontrol
                frm_usercontrol.parent   =   me
                frm_usercontrol.show()
                frm_usercontrol.focus()
        end   sub
但是在调用的时候,子画面出来以后,主画面的几个按钮会在该子画面的前面表示,要再点一下子画面,子画面才能完全表示出来.
请问怎样才能直接将这个usercontrol的子画面在最前面表示出来呢?
发表于:2007-03-13 15:01:051楼 得分:0
呵呵,有会的请指教一下,谢谢先了.
发表于:2007-03-13 15:08:132楼 得分:0
用controls.setchildindex   方法  
调用   setchildindex   时,将把   child   参数所引用的   control   移动到   newindex   指定的位置,并将重新调整   control.controlcollection   中的其他   control   引用的顺序以适应此次移动。索引值为零的控件位于   z-顺序的顶部,数字越大距底部越近。
发表于:2007-03-13 15:09:343楼 得分:0
或调用
control.bringtofront   方法  
将控件带到   z   顺序的前面。
发表于:2007-03-13 15:09:544楼 得分:0
控件移到   z   顺序的前面。如果控件是另一个控件的子控件,那么子控件移到   z   顺序的前面。bringtofront   不会使一个控件成为顶级控件。
发表于:2007-03-13 15:25:565楼 得分:0
谢谢hbxtlhx(平民百姓)!
还有想问一下,怎么判断当前窗口已经在运行了,就是如果这个子窗口已经打开,那么再做打开操作的时候,将做判断,就是不能打开同样的两个子窗口.
发表于:2007-03-13 15:30:276楼 得分:0
1:可以把这样的窗体定义成全局的变量,然后用类似如下的方法来做:

private   youform   form;

...

if   (form==null   ¦ ¦   form.isdisposed)
{
        form=new   youform   ();
}
form.active();

2:可以在当前的应用程序中查找这同类型同名称的窗体看一下是否存在:
foreach   (form   f   in   application.openforms)
{
if   (f.gettype()   ==   typeof(youform)   &&   f.text   =   "标题 ")
{
f.activate();
}
}
发表于:2007-03-13 16:10:227楼 得分:0
刚才试了,application.openforms这个属性只能是知道已经打开的form,而如果是usercontrol生成的子窗口,却不能得到.
不知道由usercontrol生成的子窗口,该怎么知道它是否已经打开了呢?
发表于:2007-03-13 16:14:118楼 得分:0
由usercontrol生成的子窗口
-------------
是什么意思?
发表于:2007-03-13 16:14:279楼 得分:0
你是说添加到usercontrol里的form吗?
发表于:2007-03-13 16:19:3710楼 得分:0
不是,是直接用usercontrol生成的一个子窗口,然后在一个主form中用按钮打开它,现在就是想当已经打开了这个用usercontrol生成的一个子窗口后,如果再按按钮,将做检查,如果已经打开了,就不再打开第二个用usercontrol生成的一个子窗口.
即避免重复打开的意思.
发表于:2007-03-13 16:35:2111楼 得分:0
hbxtlhx(平民百姓),算了,我就在form中添加这个用usercontrol生成的一个子窗口画面就可以了.
现在又有一个问题,就是在这个用usercontrol生成的自定义控件中有一个关闭按钮,怎么当按下这个按钮的时候,也能同时把所添加到的form窗口也关闭掉呢?
发表于:2007-03-13 16:47:2512楼 得分:0
问题已解决,感谢hbxtlhx(平民百姓)的指点.
发表于:2007-03-13 16:50:1213楼 得分:0
你可以用findform()这个方法来找到并关闭这个控件所在的窗口.
发表于:2007-03-13 17:08:3814楼 得分:0
再提一个问题,关于子窗口的移动问题.
我的子窗口是去掉标题栏的,现在想用鼠标按住该子窗口的任何地方,都可以拖动它.
我的具体的实现拖动代码如下:
private   htcaption   as   intptr   =   2
        private   htclient   as   intptr   =   1
        private   wm_nchittest   as   integer   =   132

        protected   overrides   sub   wndproc(byref   m   as   message)
                if   (m.msg   =   wm_nchittest)   then
                        mybase.wndproc(m)
                        if   (m.result   =   htclient)   then
                                m.result   =   htcaption
                        end   if
                elseif   (m.msg   =   163)   then
                else
                        mybase.wndproc(m)
                end   if
        end   sub
但是问题是当我按住了form中的usercontrol生成的自定义控件的区域内时候,不能实现拖动.
请问有何高见?
发表于:2007-03-13 17:16:0215楼 得分:0
因为你是对form的处理,在usercontrol上不可以是正常的.
你可以在添加对usercontrol的控制.
发表于:2007-03-13 17:28:4216楼 得分:0
我也可以在usercontrol中添加,但是usercontrol能被拖动,而form却没有反应.因为我的usercontrol是嵌套在子form中的.现在是想无论按住该子form的那里,都能实现拖动效果.
hbxtlhx(平民百姓)兄,能给你的msn吗,这样更容易请你指教.
或者请加我的msn:aqbeyond@hotmail.com
发表于:2007-03-13 17:31:2217楼 得分:0
你可以看一下这个文章里说的.和你的问题相似,看了你就知道怎么做了:

手柄控件  
http://blog.csdn.net/hbxtlhx/archive/2004/12/09/210823.aspx
发表于:2007-03-14 11:57:5818楼 得分:0
不知道其他人还有没有其他的建议呢?


快速检索

最新资讯
热门点击