子控件只能在主控件的指定区域内显示!超过指定区域的超过部分不显示。
图中 兰色线框为绘制的矩形(非控件)
当移动滚动条控制 Button 移动 Button移动超出兰色矩形区域时超出部分不显示,
我用更改子控件窗口区域(既改为不规则控件)方法实现了此功能
但是此时频繁更改子控件窗口区域属性,子控件却不停的闪烁。
问题:
1:用更改子控件窗口区域属性的方法怎么能让它不闪烁或尽量少闪烁。
2:是否有更改主控件的控件容器区域等方法,让子控件在一定区域内显示,
当然若控件也会闪烁是不行的。
拒绝利用在主控件上绘制来遮住子控件的思路。谢谢朋友指点
42 个解决方案
#1
帮顶!
#2
好像想做游戏的样子啊。。。。
#3
顶~~
#4
在form上加一个panel做为子容器,再将button放到panel中
#5
TO:
breadjyh
新小鱼
谢谢你的回答,但是你说的方法已经脱离了我的问题。
如果这样 那我问题中的主控件 就是Panel了
breadjyh
新小鱼
谢谢你的回答,但是你说的方法已经脱离了我的问题。
如果这样 那我问题中的主控件 就是Panel了
#6
Go On!
#7
Up.
#8
顶~~
#9
up
#10
帮顶
#11
帮顶
#12
先up
#13
怎么没人回答呢?!
#14
让他们在不同的层上
然后控制层的前后位置
上面的会罩住后面的把
然后控制层的前后位置
上面的会罩住后面的把
#15
To:
virusplayer
你好,请问 Winform 中有层的概念吗?
有些什么相关 类或资料吗?
virusplayer
你好,请问 Winform 中有层的概念吗?
有些什么相关 类或资料吗?
#16
别用form了,实现很困难。
用容器,应该简单些。
用容器,应该简单些。
#17
qiyousyc
你好!我是针对类似问题提问。
这只是一个例子,
我需要在主控件(UserControl或Form)内指定一个区域容纳子控件(UserControl和ScrollBar)
你好!我是针对类似问题提问。
这只是一个例子,
我需要在主控件(UserControl或Form)内指定一个区域容纳子控件(UserControl和ScrollBar)
#18
先UP
#19
问题:
1:用更改子控件窗口区域属性的方法怎么能让它不闪烁或尽量少闪烁。
要他不闪烁.试试,把控件挂起,更改他的属性后再重新ResumeLayout
1:用更改子控件窗口区域属性的方法怎么能让它不闪烁或尽量少闪烁。
要他不闪烁.试试,把控件挂起,更改他的属性后再重新ResumeLayout
#20
19楼
哎 不行啊 刚去试了
用
SuspendLayout();
更改后...
ResumeLayout();
是这样吧! 还比之前闪得厉害!
谁告诉我:
有没有在控件(UserControl或Form)内指定一个容纳子控件区域的方法?
哎 不行啊 刚去试了
用
SuspendLayout();
更改后...
ResumeLayout();
是这样吧! 还比之前闪得厉害!
谁告诉我:
有没有在控件(UserControl或Form)内指定一个容纳子控件区域的方法?
#21
呵呵,如果是website,用div可能做到,如果是windows application先帮顶一下,对这方面不熟
#22
用directX试试。
#23
另外定义一个Form,作为当前Form的子控件,使其区域为该矩形以外部分
如不能控制此Form在最前,可调用BringToFront方法
如不能控制此Form在最前,可调用BringToFront方法
#24
To:
dancingbit
方法不错啊!
不过不合适解决上面两个问题!
因为用到多的控件,这个和4楼一个道理,反而有点饶了!
谢谢大家关心
dancingbit
方法不错啊!
不过不合适解决上面两个问题!
因为用到多的控件,这个和4楼一个道理,反而有点饶了!
谢谢大家关心
#25
我想你没有完全理解我的意思
Button仍然是原来的Form的子控件
我所说的Form不过是遮掉原来的Form的一部分罢了
Button仍然是原来的Form的子控件
我所说的Form不过是遮掉原来的Form的一部分罢了
#26
我理解是
第二个Form 的中间是空的对吧??它盖住第一个Form除矩形位置的所有其他位置
第二个Form 的中间是空的对吧??它盖住第一个Form除矩形位置的所有其他位置
#27
顶
#28
对,如果我和4楼说的方法你都不能满意的话,那很抱歉,我也想不出什么好办法了。
#29
定义一个区域,然后判断控件是否进入该区域,如果是,就更改控件大小,需要的话还要调整位置.
#30
应该是绘制窗口的问题,区域内的直接绘制,区域外的处理后绘制btn以外的部分。
#31
采用控件做,这样做效果基本都不会好。因为控件资源消耗比较大,当数量多的时候停滞回比较严重
最好的方法是所有的都自己绘图。
如果非要这样做可以考虑以下方法:
控件闪烁是因为图片绘制太频繁,系统响应不够及时所致。
可以采用双缓存技术解决。
也可以在后台自己创建子控件,创建好后再添加桌面显示。
最好的方法是所有的都自己绘图。
如果非要这样做可以考虑以下方法:
控件闪烁是因为图片绘制太频繁,系统响应不够及时所致。
可以采用双缓存技术解决。
也可以在后台自己创建子控件,创建好后再添加桌面显示。
#32
up
#33
#34
To楼主,
那你试试.把他的容器= 也一起挂起.
具体写法可以看一下 winform程序自动生成的代码.InitializeComponent
那你试试.把他的容器= 也一起挂起.
具体写法可以看一下 winform程序自动生成的代码.InitializeComponent
#35
像楼主这种需求一般是用两个窗体实现的,中间那一块叫Client,是有Handle(窗体)的,MDI窗体就是这样实现的。
但是楼主拒绝这种做法,我就不多说了。。。
但是楼主拒绝这种做法,我就不多说了。。。
#36
up
#37
继续!
看来问题很难很严重
看来问题很难很严重
#38
帮顶有份耶
#39
提上去!
#40
再提
#41
提
#42
你好楼主,我以前用Padding调整个,不显示子控件部分是有特别用处,也是自己画的,不过好像是不适合你,你说的这个我现在也正想实现,加我QQ吧122281069
#1
帮顶!
#2
好像想做游戏的样子啊。。。。
#3
顶~~
#4
在form上加一个panel做为子容器,再将button放到panel中
#5
TO:
breadjyh
新小鱼
谢谢你的回答,但是你说的方法已经脱离了我的问题。
如果这样 那我问题中的主控件 就是Panel了
breadjyh
新小鱼
谢谢你的回答,但是你说的方法已经脱离了我的问题。
如果这样 那我问题中的主控件 就是Panel了
#6
Go On!
#7
Up.
#8
顶~~
#9
up
#10
帮顶
#11
帮顶
#12
先up
#13
怎么没人回答呢?!
#14
让他们在不同的层上
然后控制层的前后位置
上面的会罩住后面的把
然后控制层的前后位置
上面的会罩住后面的把
#15
To:
virusplayer
你好,请问 Winform 中有层的概念吗?
有些什么相关 类或资料吗?
virusplayer
你好,请问 Winform 中有层的概念吗?
有些什么相关 类或资料吗?
#16
别用form了,实现很困难。
用容器,应该简单些。
用容器,应该简单些。
#17
qiyousyc
你好!我是针对类似问题提问。
这只是一个例子,
我需要在主控件(UserControl或Form)内指定一个区域容纳子控件(UserControl和ScrollBar)
你好!我是针对类似问题提问。
这只是一个例子,
我需要在主控件(UserControl或Form)内指定一个区域容纳子控件(UserControl和ScrollBar)
#18
先UP
#19
问题:
1:用更改子控件窗口区域属性的方法怎么能让它不闪烁或尽量少闪烁。
要他不闪烁.试试,把控件挂起,更改他的属性后再重新ResumeLayout
1:用更改子控件窗口区域属性的方法怎么能让它不闪烁或尽量少闪烁。
要他不闪烁.试试,把控件挂起,更改他的属性后再重新ResumeLayout
#20
19楼
哎 不行啊 刚去试了
用
SuspendLayout();
更改后...
ResumeLayout();
是这样吧! 还比之前闪得厉害!
谁告诉我:
有没有在控件(UserControl或Form)内指定一个容纳子控件区域的方法?
哎 不行啊 刚去试了
用
SuspendLayout();
更改后...
ResumeLayout();
是这样吧! 还比之前闪得厉害!
谁告诉我:
有没有在控件(UserControl或Form)内指定一个容纳子控件区域的方法?
#21
呵呵,如果是website,用div可能做到,如果是windows application先帮顶一下,对这方面不熟
#22
用directX试试。
#23
另外定义一个Form,作为当前Form的子控件,使其区域为该矩形以外部分
如不能控制此Form在最前,可调用BringToFront方法
如不能控制此Form在最前,可调用BringToFront方法
#24
To:
dancingbit
方法不错啊!
不过不合适解决上面两个问题!
因为用到多的控件,这个和4楼一个道理,反而有点饶了!
谢谢大家关心
dancingbit
方法不错啊!
不过不合适解决上面两个问题!
因为用到多的控件,这个和4楼一个道理,反而有点饶了!
谢谢大家关心
#25
我想你没有完全理解我的意思
Button仍然是原来的Form的子控件
我所说的Form不过是遮掉原来的Form的一部分罢了
Button仍然是原来的Form的子控件
我所说的Form不过是遮掉原来的Form的一部分罢了
#26
我理解是
第二个Form 的中间是空的对吧??它盖住第一个Form除矩形位置的所有其他位置
第二个Form 的中间是空的对吧??它盖住第一个Form除矩形位置的所有其他位置
#27
顶
#28
对,如果我和4楼说的方法你都不能满意的话,那很抱歉,我也想不出什么好办法了。
#29
定义一个区域,然后判断控件是否进入该区域,如果是,就更改控件大小,需要的话还要调整位置.
#30
应该是绘制窗口的问题,区域内的直接绘制,区域外的处理后绘制btn以外的部分。
#31
采用控件做,这样做效果基本都不会好。因为控件资源消耗比较大,当数量多的时候停滞回比较严重
最好的方法是所有的都自己绘图。
如果非要这样做可以考虑以下方法:
控件闪烁是因为图片绘制太频繁,系统响应不够及时所致。
可以采用双缓存技术解决。
也可以在后台自己创建子控件,创建好后再添加桌面显示。
最好的方法是所有的都自己绘图。
如果非要这样做可以考虑以下方法:
控件闪烁是因为图片绘制太频繁,系统响应不够及时所致。
可以采用双缓存技术解决。
也可以在后台自己创建子控件,创建好后再添加桌面显示。
#32
up
#33
#34
To楼主,
那你试试.把他的容器= 也一起挂起.
具体写法可以看一下 winform程序自动生成的代码.InitializeComponent
那你试试.把他的容器= 也一起挂起.
具体写法可以看一下 winform程序自动生成的代码.InitializeComponent
#35
像楼主这种需求一般是用两个窗体实现的,中间那一块叫Client,是有Handle(窗体)的,MDI窗体就是这样实现的。
但是楼主拒绝这种做法,我就不多说了。。。
但是楼主拒绝这种做法,我就不多说了。。。
#36
up
#37
继续!
看来问题很难很严重
看来问题很难很严重
#38
帮顶有份耶
#39
提上去!
#40
再提
#41
提
#42
你好楼主,我以前用Padding调整个,不显示子控件部分是有特别用处,也是自己画的,不过好像是不适合你,你说的这个我现在也正想实现,加我QQ吧122281069