C#制作高仿360安全卫士窗体3
C#制作高仿360安全卫士窗体(三)
距上篇C#制作高仿360安全卫士窗体(二)也将近一个多月了,这个月事情还是像往常一样的多。不多我也乐在其中,毕竟我做的是我喜欢做的东西。今天特地抽空把怎么制作文本框写一下。同时也希望有爱好这些玩意的同仁和我进行交流... 文本框的开发比起按钮开发还是有一点不同,因为我这里主要是给文本框做美化,所以不需要完完全全的进行自己开发。只是重写它的某些事件,然后展现不同的效果。下面是运行后的效果。

这个文本框实现了多行以及鼠标进入移出等事件的效果,那么开发这个素材只有一个也是从之前360皮肤包里面提取出来进行修改的:

一、嵌入资源
将以上素材另存为,在解决方案中Images目录里面建立一个TextBoxImages文件夹,将图片素材拷贝进去,并设置图片属性中生成操作选择为“嵌入的资源”。
二、添加控件
资源嵌入之后再在ControlEx目录中建立一个TextBoxEx文件夹,在该文件夹下创建一个名为TextBoxEx的用户控件。该用户控件是用来实现皮肤变化,而真正的TextBox需要再从工具栏中拖一个到用户控件中。调整用户控件的宽高为为160*22,TextBox的宽高为154*16,TextBox的Margin属性为3,3,3,3,TextBox的BorderStyle属性值为None,将属性都调整完毕之后就可以开始进行代码的处理了。

三、编码
该控件的主要处理方法都比较简单,主要思路是重写TextBox的状态,然后再在用户控件上根据状态绘制不同的样式。
1、变量声明

1 #region 声明
2 private Bitmap _TextBoxBackImg = ImageObject.GetResBitmap("FANGSI.UI.Images.TextBoxImages.Textbox.png");
3 private State state = State.Normal;
4 private bool _Isico = false;
5 private Bitmap _Ico;
6 private Padding _IcoPadding = new Padding(3, 3, 0, 0);
7 //枚鼠标状态
8 private enum State
9 {
10 Normal = 1,
11 MouseOver = 2,
12 MouseDown = 3,
13 Disable = 4,
14 Default = 5
15 }
16 #endregion

2、构造参数处理,初始化控件的属性

1 #region 构造
2 public TextBoxEx()
3 {
4 InitializeComponent();
5 this.SetStyle(ControlStyles.UserPaint, true);
6 this.SetStyle(ControlStyles.DoubleBuffer, true);
7 this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
8 this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
9 this.SetStyle(ControlStyles.StandardDoubleClick, false);
10 this.SetStyle(ControlStyles.Selectable, true);
11 this.BackColor = Color.Transparent;
12 }
13 #endregion

3、属性定义,其中可以加入自己想要功能的特殊字段再根据自己的需要进行处理

1 #region 属性
2
3 [Category("放肆雷特扩展属性"), Description("输入最大字符数")]
4 public int MaxLength
5 {
6 get { return BaseText.MaxLength; }
7 set { BaseText.MaxLength = value; }
8
9 }
10
11 [Category("放肆雷特扩展属性"), Description("与控件关联的文本")]
12 public new string Text
13 {
14 get
15 {
16 return BaseText.Text;
17 }
18 set
19 {
20 BaseText.Text = value;
21 }
22 }
23
24 [Category("放肆雷特扩展属性"), Description("将控件设为密码显示")]
25 public bool IsPass
26 {
27 get
28 {
29 return BaseText.UseSystemPasswordChar;
30 }
31 set
32 {
33 BaseText.UseSystemPasswordChar = value;
34 }
35 }
36
37 [Category("放肆雷特扩展属性"), Description("密码显示字符")]
38 public char PassChar
39 {
40 get
41 {
42 return BaseText.PasswordChar;
43 }
44 set
45 {
46 BaseText.PasswordChar = value;
47 }
48 }
49
50 [Category("放肆雷特扩展属性"), Description("将控件设为多行文本显示")]
51 public bool Multiline
52 {
53 get
54 {
55 return BaseText.Multiline;
56 }
57 set
58 {
59 BaseText.Multiline = value;
60 if (value)
61 {
62 BaseText.Height = this.Height - 6;
63 }
64 else
65 {
66 base.Height = 22;
67 BaseText.Height = 16;
68 this.Invalidate();
69 }
70
71 }
72 }
73
74 [Category("放肆雷特扩展属性"), Description("设置控件中文本字体")]
75 public Font font
76 {
77 get
78 {
79 return BaseText.Font;
80 }
81 set
82 {
83 BaseText.Font = value;
84 }
85 }
86
87 [Category("放肆雷特扩展属性"), Description("将控件设为只读")]
88 public bool ReadOnly
89 {
90 get
91 {
92 return BaseText.ReadOnly;
93 }
94 set
95 {
96 BaseText.ReadOnly = value;
97 }
98 }
99
100 [Category("放肆雷特扩展属性"), Description("多行文本的编辑行")]
101 public String[] lines
102 {
103 get
104 {
105 return BaseText.Lines;
106 }
107 set
108 {
109 BaseText.Lines = value;
110 }
111 }
112
113 [Category("放肆雷特扩展属性"), Description("是否显示图标")]
114 public bool Isico
115 {
116 get
117 {
118 return _Isico;
119 }
120 set
121 {
122 _Isico = value;
123 if (value)
124 {
125 if (_Ico != null)
126 {
127 BaseText.Location = new Point(_IcoPadding.Left + _Ico.Width, 3);
128 BaseText.Width = BaseText.Width - _IcoPadding.Left - _Ico.Width;
129 }
130 else
131 {
132 BaseText.Location = new Point(25, 3);
133 BaseText.Width = BaseText.Width - 25;
134 }
135 }
136 this.Invalidate();
137 }
138 }
139
140 [Category("放肆雷特扩展属性"), Description("图标文件")]
141 public Bitmap Ico
142 {
143 get
144 {
145 return _Ico;
146 }
147 set
148 {
149 _Ico = value;
150 }
151 }
152
153 [Category("放肆雷特扩展属性"), Description("控件内部间距,图标文件")]
154 public Padding IcoPadding
155 {
156 get { return _IcoPadding; }
157 set
158 {
159 _IcoPadding = value;
160 this.Invalidate();
161 }
162 }
163 #endregion

4、委托,委托图标点击事件
1 #region 委托
2 public event EventHandler IcoOnclick;
3 #endregion
5、方法处理

1 #region 方法
2 protected override void OnPaint(PaintEventArgs e)
3 {
4 Rectangle rc = this.ClientRectangle;
5 Graphics g = e.Graphics;
6 ImageDrawRect.DrawRect(g, _TextBoxBackImg, rc, Rectangle.FromLTRB(10, 10, 10, 10), (int)state, 5);
7 if (_Isico)
8 {
9 if (_Ico != null)
10 {
11 g.DrawImage(_Ico, new Point(_IcoPadding.Left, _IcoPadding.Top));
12 }
13 }
14 base.OnPaint(e);
15 }
16
17 private void TextBoxEx_Resize(object sender, EventArgs e)
18 {
19 if (this.Height > 22)
20 {
21 Multiline = true;
22 }
23 else
24 {
25 this.Height = 22;
26 Multiline = false;
27 }
28 }
29
30 private void NotifyIcoOnclick()
31 {
32 if (IcoOnclick != null)
33 {
34 IcoOnclick(this, EventArgs.Empty);
35 }
36 }
37
38 public void AppendText(string ss)
39 {
40 BaseText.AppendText(ss);
41 }
42
43 private void BaseText_MouseEnter(object sender, EventArgs e)
44 {
45 state = State.MouseOver;
46 this.Invalidate();
47 }
48
49 private void BaseText_MouseLeave(object sender, EventArgs e)
50 {
51 state = State.Normal;
52 this.Invalidate();
53 }
54
55 private void TextBoxEx_MouseUp(object sender, MouseEventArgs e)
56 {
57 if (_Ico != null)
58 {
59 if (new Rectangle(_IcoPadding.Left, _IcoPadding.Top, _Ico.Width, _Ico.Height).Contains(e.X, e.Y))
60 {
61 NotifyIcoOnclick();
62 }
63 }
64 }
65
66 private void TextBoxEx_MouseEnter(object sender, EventArgs e)
67 {
68 state = State.MouseOver;
69 this.Invalidate();
70 }
71
72 private void TextBoxEx_MouseLeave(object sender, EventArgs e)
73 {
74 state = State.Normal;
75 this.Invalidate();
76 }
77 #endregion

OK,写完收工…这个控件功力强大,使用简单很符合中国程序猿的使用习惯直接从工具栏拖放即可..如果还有不懂的欢迎进行留言。下一篇就开始讲360安全卫士最上面一排的水晶按钮的制作敬请期待喔。。
C#制作高仿360安全卫士窗体3的更多相关文章
- C#制作高仿360安全卫士窗体<二>
继上次C#制作高仿360安全卫士窗体<一>发布之后响应还不错,我的博客放肆雷特也来了不少的新朋友,在这里先谢谢大家的支持!我自己也反复看了一下觉得对不起大家,写的非常乱而且很少文字介绍.在 ...
- C#制作高仿360安全卫士窗体(四)- 水晶按钮
项目越来越紧,我也乐此不疲.自从上次C#制作高仿360安全卫士窗体(三)出来之后,就开始有一些人在说为什么还在坚持写这么落后的东西.我想说的是,我是从事企业信息化工作的,所有程序都只对内部使用.所以只 ...
- C#制作高仿360安全卫士窗体(三)
距上篇C#制作高仿360安全卫士窗体(二)也将近一个多月了,这个月事情还是像往常一样的多.不多我也乐在其中,毕竟我做的是我喜欢做的东西.今天特地抽空把怎么制作文本框写一下.同时也希望有爱好这些玩意的同 ...
- C#制作高仿360安全卫士窗体2
C#制作高仿360安全卫士窗体 继上次C#制作高仿360安全卫士窗体<一>发布之后响应还不错,我的博客放肆雷特也来了不少的新朋友,在这里先谢谢大家的支持!我自己也反复看了一下觉得对不起大家 ...
- C#制作高仿360安全卫士窗体<一>
开始写这一系列博客之前先要向大家说声抱歉,放肆雷特建立很久却很少有更新.当然博客人气也不旺,大部分都是看的人多评论收藏的人少.一直想要改变这种状态,正好赶上了最近工作上做了一个高仿360安全卫士窗体. ...
- 高仿360界面的实现(用纯XML和脚本实现)
源码下载:360UI 本项目XML的桌面渲染依赖GQT开源项目(请感兴趣的朋友加入QQ讨论群:101189702,在群共享文件里下载GQT源码),以下是360界面实现的全部XML代码,所有的代码都在3 ...
- C# WPF仿360安全卫士11
首先上效果图: 这是我的第一篇随笔,最近因为写一个播放器,开始学习WPF相关技术,随着不断入坑,播放器倒是做出来了,掉坑里了... 本着闲着也是闲着的精神,拿360开刀了: 主界面主要使用DMSkin ...
- (原创)高仿360云盘android端的UI实现
前些日子几大互联网巨头展开了一轮网盘空间大战.一下子从G级别提高到了T级别.以后谁的空间没有1T估计都不好意思开口了~~~ 试用了一下360云盘的客户端,比较小清新(不是给360打广告~~~).刚好U ...
- 制作高仿QQ的聊天系统(上)—— 布局文件 & 减少过度绘制
由于没有自己的服务器,我就找了个能实现双方通信的SDK,这个SDK是友盟的用户反馈SDK.本系列的博文关注的不是网络通信,而是如何在网络通信机制已经做好的情况下,做出一个可用的聊天系统.其实,刚开始做 ...
随机推荐
- .net中的设计模式---单例模式,涉及lock的用法
.客户端代码 static void Main(string[] args) { Singleton singleton2 = Singleton.GetInstance(); Singleton s ...
- node.js高效操作mongodb
node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ...
- 使用ArcGIS API for Silverlight 进行复合多条件空间查询
原文:使用ArcGIS API for Silverlight 进行复合多条件空间查询 这两天帮网上认识的一个兄弟做了一个查询的示例,多多少少总结一下,在此和大家分享. 为什么说是复合多条件呢?因为进 ...
- 建立TextView位置的部分可以点击,不同的颜色
String url="注册代表宝藏驱动器,你已经允许成员<服务条款>,请仔细阅读. "; SpannableStringBuilder style = new Spa ...
- Linux下df与du两个命令的差别?
Linux下df与du两个命令的差别? 一.df显示文件系统的使用情况,与du比較,就是更全盘化. 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型. 举比例如以下: [roo ...
- 用DIV+css写Table
做出的效果样式如下图, 1,首先考虑的是如何显示border,就像是分割代码,我把border分割为最外层DIV全border,和内层DIV的right和bottom的border,就是右边和下边. ...
- std::move()
#include <iostream> #include <utility> #include <vector> #include <string> i ...
- Lua的多任务机制——协程(coroutine)
并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制.大致上有这么两种多任务技术,一种是抢占式多任务(preemptive multitasking),它让操作系统来决定 ...
- 基于HTTP/2和protobuf的RPC框架:GRPC
谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobu ...
- jQuery 表格
jQuery 表格插件汇总 本文搜集了大量 jQuery 表格插件,帮助 Web 设计者更好地驾御 HTML 表格,你可以对表格进行横向和竖向排序,设置固定表头,对表格进行搜索,对大表格进行分 ...