代码改变世界

.net cf用户自定义控件

2009-12-18 15:51  zlty  阅读(1175)  评论(0编辑  收藏  举报

(项目做完,终于有时间写写自己的感受了)

环境:vs2005 , wm sdk5.0,xp

介绍一个我自己写的用户控件. 只是一种思维方法. 将一些经常要组合的控件封装在一个用户控件里面.

可以节省大家不少开发时间.

说一说自己的经验.另外请教大家一些问题(问题在最后).

先上图.

 image (图1)

这个控件的特点是自动适应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事件增加一个响应函数,(嘴笨不知道如何表达.还是上图吧)

image

然后把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.展示一下我写的控件

设计时的截图,不是运行时的..

image 1111

image

 

总结:

公司没有美工,所以所有的东西都是自己去画,在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

本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。