(项目做完,终于有时间写写自己的感受了)
环境:vs2005 , wm sdk5.0,xp
介绍一个我自己写的用户控件. 只是一种思维方法. 将一些经常要组合的控件封装在一个用户控件里面.
可以节省大家不少开发时间.
说一说自己的经验.另外请教大家一些问题(问题在最后).
先上图.
这个控件的特点是自动适应parent的宽度.将常用的控件组合,另外增加了设计时属性文件(.xmta),这样在你设计界面的时候能直接设置控件的事件
图1 中并没有适应parent的宽度,是因为我设置了一个bool属性,指示控件是否要适应parent的宽度.支持横竖屏.
下面说一说步骤:
1.标准动作
新建工程,添加用户自定义控件.拖一个label,一个textbox控件.摆好位置.(不摆好也没关系,因为在resize事件中我们要处理所有控件的位置).
2.摆好控件位置
在resize事件中摆好label,textbox的位置.
比如我这里是:
protected override void OnResize(EventArgs e)
{
this.label1.Location = new Point(0, 0);
this.textBox1.Location = new Point(this.label1.Location.X + this.label1.Width + 2, 0);
this.Height = this.textBox1.Height;
this.textBox1.Width = this.Width - this.textBox1.Location.X - 1;
base.OnResize(e);
}
这样我们就摆好控件的位置了.
3.增加属性
图1中显示的控件,显示至少要两个属性,一个是label1的text,另一个是textbox的text
我分别命名为Title 和Value
public string Title { get { return this.labText.Text; } set { this.labText.Text = value; } } public string Value { get { return this.textBox1.Text; } set { this.textBox1.Text = value; } }
这样在设计的时候你可以很方便的设置Title和Value.
4.增加事件响应event
比如说,想要在textbox获取焦点的时候响应一个这个事件.
首先增加一个成员变量
public event EventHandler TextBoxGotFocus;
然后为textbox1的GotFocus事件增加一个响应函数,(嘴笨不知道如何表达.还是上图吧)
然后把textbox1的gotfocus响应函数设置为我们刚才增加的EventHanler上,
private void textBox1_GotFocus(object sender, EventArgs e) { if (this.TextBoxGotFocus != null) TextBoxGotFocus(sender, e); }
5.最后一步,编写设计时属性文件
为项目新增一个 "设计时属性文件".这个文件的编写很有讲究.我也只略知一二.只代码.不解释.
不明白的可以去看参考文档列出的文章(比我写的好很多呵呵)
<Classes xmlns="http://schemas.microsoft.com/VisualStudio/2004/03/SmartDevices/XMTA.xsd"> <Class Name="TZ.Controls.UserControl1"><!--命名空间--> <DesktopCompatible>true</DesktopCompatible> <DefaultEvent>TextBoxGotFocus</DefaultEvent> <Event Name="TextBoxGotFocus"><!--说明这个控件有这个事件,后面的就是些描述--> <Category>事件</Category> <Description>当控件获得输入焦点,激发该事件</Description> </Event> </Class> </Classes>
我这个"设计时属性文件"写的不是很好.其实还要描述自定义控件所有的属性的.比如说Title,Value之类的.
这就是我想要请教的问题:
如果我的属性是Color,我应该如何在"设计时属性文件"中描述它才可以在设计时直接选择Color?
一个属性应该像下面这样描述,
请问Type字段应该如何填写,Verson,PublicKeyToken是哪来的?
<Property Name="Title">
<Category>自定义</Category>
<DefaultValue>
<Type>
System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</Type>
<Value>title</Value>
</DefaultValue>
<Description>此处设置要显示在控件前面的文本</Description>
<Browsable>
true
</Browsable>
</Property>
6.展示一下我写的控件
设计时的截图,不是运行时的..
总结:
公司没有美工,所以所有的东西都是自己去画,在wm小小的屏幕上处理好横竖屏很繁琐.所以尽量封装好要用的控件.这样在用户层处理起来就方便很多了
参考:
『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!
(http://www.cnblogs.com/longqi293/archive/2009/12/03/1615940.html) (系列文章)作者初学博闻 of .NET CF/.Net
Windows Mobile 详细信息视图的设计(1)
(http://www.cnblogs.com/upto/archive/2009/09/02/1558387.html) 作者黎波
作者:zlty
出处:http://www.cnblogs.com/zlty
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。