返回列表 发新帖

c#实现winform窗体逐渐显示效果

462.4k 8
swmozowtfl 发表于 2015-7-10 20:46:24|湖北 | 查看全部 阅读模式
c#实现winform窗体逐渐显示效果,这个博客园里面已经有其它人已经实现了,原理很简单,就是通过定时改变窗体的透明度(从0到1,即透明度从完全透明到不透明),我这里也是按照这个思路来实现的,但是我做的这个窗体是可复用的,即其它窗体继承自它后,就能实现渐显效果,代码如下:
, P: u+ N$ M2 \0 ]" N8 q2 w  B3 dusing system;; |. Y2 _% O: {" [$ K
using system.componentmodel;
5 C# O. E- {+ v- ^" H, ^using system.windows.forms;
, y' {( Q+ w) L9 lnamespace tems.forms
" {2 u7 W# ^9 c$ A7 I' k{
. \7 x% |% b+ h3 ~public partial class formbase : form
, l4 n& [4 ]/ J  E{) w9 j2 V; ]. }
private timer formtimer = null;4 l; V0 [; q) G2 P+ ]: ~8 Y
/// <summary>
+ u* U$ i- @2 S5 P. m9 b  `- u/// 获取opacity属性
; i3 f9 I9 w  V0 ^/ i& Y/// </summary>
% r& C* L6 ]% Z9 i[defaultvalue(0)]- I# u: P; M: _
[browsable(false)]
$ q, D/ A8 z7 R8 w# Z2 [public new double opacity) }* l. k' _9 B, H# N  ?
{
$ B/ w# G7 a* ^5 [- xget { return base.opacity; }7 v, G# J. c6 u9 i
set { base.opacity = 0; }# l) U1 d* m6 u' v5 [) ^4 i1 F
}
& i2 Y5 F2 L. @: E( Upublic formbase()
/ Z1 w3 Z+ w" j5 V{
2 }- I; K/ F; y6 k& o! l' rinitializecomponent();
) f" Z' l) M! i5 O1 ]formtimer = new timer() { interval = 100 };
. {) o% [: ]6 _formtimer.tick += new eventhandler(formtimer_tick);# y  t/ e! N3 R! S: a# K6 l/ n7 m6 c
base.opacity = 0;" M: N% H$ y, z7 n' ]' P& }" C
}4 H& b# ^" f3 ]  I/ O
private void formtimer_tick(object sender, eventargs e)
- C3 h" j3 ]9 ~' D{: c& }, H" E- U2 Q0 c9 l( ]
if (this.opacity >= 1)/ L+ }7 k1 i- r) q' |
{' c2 e3 {8 n8 `$ C$ t" i: @
formtimer.stop();) r- w  h: p$ ]" ~# R) K% {
}
+ d( @: m8 s9 b: telse) {' X* D7 Q2 P# H4 n* x; O, V  G
{
3 N5 s$ F# {! G" i; hbase.opacity += 0.2;
6 S1 t; n& G& ^/ t) X6 q: V2 E}# a5 t/ l; Y4 g, l. B$ u' s
}
6 z8 m. X  S( ~: Qprivate void formbase_shown(object sender, eventargs e)
: [6 w/ e: S& e5 @) C9 v. S{: t% K* a# ]$ P
formtimer.start();- ]4 t$ A% `% X2 G8 i0 U
}6 {& j+ ]$ h: `3 l$ a
}7 H3 }) P. N- K
}5 L3 G8 f' N1 H
以下是自动生成的代码:/ |+ ?0 Z& D6 }4 j; A
namespace tems.forms
* U0 x! J9 n) r1 t& X( k{
: k" o7 h5 G4 _7 m0 Qpartial class formbase
" m/ k( a5 B* Y0 \0 B7 A{& \8 z7 K: i6 ]% M
/// <summary>
* t7 {" g& x& u' [% P/// required designer variable.% W( U3 [3 Y7 @& i% m; g7 \# V
/// </summary>0 V$ m8 n! l- y1 E4 ~! `" q" Q
private system.componentmodel.icontainer components = null;- [* E) f' n4 m; o
/// <summary>
- ~: ~8 j+ s  z/// clean up any resources being used.. r" ?8 y/ x+ }2 K. L1 P" |
/// </summary>* Y3 T, E3 _1 R8 W& J+ z4 Q
/// <param name=disposing>true if managed resources should be disposed; otherwise, false.</param>
) y, Z8 F6 D& m! O" Bprotected override void dispose(bool disposing)  x0 n* u. r% C3 @# p
{
' H" n2 g" u2 |if (disposing && (components != null))
/ X  C0 e, Z7 F{
# d3 q* _. N4 N# a0 C* G, z' W7 Jcomponents.dispose();
* V2 v" k7 I. L) M* Z4 w! `& S}0 k4 s1 O- V1 W
base.dispose(disposing);
7 N6 n* c0 J0 o9 ^" G- z( V! E1 |}0 X  A# x7 _. k: E/ J
#region windows form designer generated code# \8 {% v+ C  ?+ s# a" f
/// <summary>
. h* c; H# c: k: _( s: j6 U/// required method for designer support - do not modify5 C3 w  c, D. {: N2 Y2 J
/// the contents of this method with the code editor.' g$ C+ S  M$ `. S& `: }
/// </summary>
( M7 E1 m/ p9 G1 v1 Pprivate void initializecomponent()
( j' l& [! k  @( z. w. d{
! o8 ?+ j0 T4 c% S3 fthis.suspendlayout();) t$ j( a: W  @$ q. [
//4 [9 D1 E/ x1 g  f3 O
// formbase# y$ R1 e) p. P: S
//3 g9 V6 I* p6 k8 [9 S# N
this.autoscaledimensions = new system.drawing.sizef(6f, 12f);/ X5 r8 |3 r1 J  P' z+ Q
this.autoscalemode = system.windows.forms.autoscalemode.font;
  W5 j5 c$ Y2 r0 F+ x+ h" A& Cthis.clientsize = new system.drawing.size(284, 262);
( Z4 w: W  ^# y5 b9 vthis.name = formbase;6 x, \3 M! ]+ }+ x  i4 f, X
this.text = formbase;1 v# `- D( W3 J3 ]4 k
this.shown += new system.eventhandler(this.formbase_shown);
! r; r- Q/ B, P- l4 M  qthis.resumelayout(false);
) j$ l; q7 D  l# [& k  m1 q2 n/ S+ g}
+ L3 D* x. r+ ?6 n6 u( c1 M#endregion
9 @: }8 w3 x9 P6 ~3 b6 Q2 p' F: y7 N* M}' y9 Y$ n+ b8 l# L+ h# a8 N( C4 O
}
3 s- d8 [% v2 T5 k4 Q! c代码中我用new关键字覆盖了form类中的opacity属性,使其只读并且不可编辑,有人可能会说这个属性的只读代码写得不规范,应该是去掉set访问器或将set设为私有,没错,标准的是应该这样做,而我为何不这样做呢?原因就是如果真正将属性设为私有,那么在其它窗体继承它的时候,由于我们一般都是先建一个标准窗体,标准窗体在创建时窗体的属性若有默认值的会自动生成初始化默认值,标准窗体创建后才将基类改为formbase类,这样就会造成报错:opacity是只读的,不能赋值,所以我们只可以让其外面看到是可读写,但实际子窗体的赋值不会生效,起到只读效果,当然了,如果你不觉得麻烦的话,你可以按标准属性设置,然后每建立一个窗体后,请先将opacity的代码清除,然后再更改继承类,这样也是可以的。
% U$ @% g1 k. S% d0 y使用就很简单了,与正常的窗体相同,在这里就不叙述了,大家可将以上代码复制到自己的项目中,便可直接使用。
# j3 r) b. ]7 w6 z其实通过以上代码的思路,我们可以设计通用的百叶窗切换效果的窗体基类,有空我会试着去实现这些功能,希望大家能支持,谢谢!1 p, B( q4 t9 j! r  Q

' t1 F: f" ]# O* y更多网页制作信息请查看: 网页制作

回复|共 8 个

alapScady 发表于 2015-10-27 19:26:41|美国 | 查看全部
…没我说话的余地…飘走
gevaemaidovef 发表于 2015-10-27 19:27:32|INNA | 查看全部
此贴有意思~
gevaemaidovef 发表于 2015-10-27 19:27:51|Reserved | 查看全部
晕倒`````不要造我的谣言哦~~小心我打你pp~~嘿嘿~~~~
tohme 发表于 2015-10-27 19:28:11|美国 | 查看全部
感谢党和人民的关爱~~~
buingeEvineus 发表于 2016-2-15 10:38:52|INNA | 查看全部
哈哈 怎么说来眼睛小真的很好 哈 哈哈~~~~
mwxny 发表于 2016-2-15 10:38:53|日本 | 查看全部
挨骂也是幸福~~~
effoggikeftor 发表于 2016-2-15 10:39:37|Reserved | 查看全部
疯了 这年头盗版还真多~~~~~~
gevaemaidovef 发表于 2016-2-15 10:39:59|台湾 | 查看全部
教教我怎么seo

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表