返回首页

{A}
{S0}
{S2}目录 {A16}
如果你是一个中间层次的程序员至少,没有时间来阅读整个文章,或者你只是不想,那么第{A17}开始的地方。
HTMLLabel(不会你说:))只是一个知道NET CF 2.0的HTML标签。最后一个字(CF)是最重要的,因为有很多很多的Windows程序员知道不同的HTML标签,但据我所知,在这一刻(2009年初),有没有免费提供的HTML你可能会说的。NET CF,或标签。NET移动开发。我要强调这个词自由,甚至更好的,公开的,因为你可以买一些市售的HTML标签。
关于此文章的其余部分;让我们来看看什么HTMLabel能力:当然,它可以显示一些简单的HTML代码。通过简单的HTML代码,我的意思是这些标签:LT; BGT;,LT; IGT;,LT; UGT;,LT; pregt;,LT; brgt;,LT; fontgt;,LT; PGT。此外,它还使用LT; labelgt;标签,但它有一个有点特殊的意义,而不是古典的HTML意义。 它可以取代很多不同的标签对象,并结合在一起。(事实上​​,它),它可以加快在InitializeComponent()函数。在移动开发中,这是很重要的的!它有一个Click事件(失踪。NET CF的Label类)。也有一些其他不错的功能... ...{A18}
我是一个在我国最大的零售商之一(一个美丽的和非常小的国家吗??斯洛文尼亚)的软件开发商。我的工作是整个公司的软件开发标准。我们有很多不同的开发平台,和我个人的管理不同的程序员群体中的C /普适环境。NET移动环境时,Excel / Word中的VBA环境中,VBScript和Python的。正如你可以看到,代码管理是我的第一个和最重要的任务。
多年来,我们必须使用我们的移动扫描仪的Oracle表3.0终端应用,但去年,我们转移到Oracle Forms的10,这已成为太多旧符号扫描仪(OK,让我们面对现实吧? ?F10s太多,即使是全新的形高达的扫描仪!)。因此,我们决定写。NET应用程序到服务器,讨论通过Web服务... ...是的,我已经接受了任务,以建立一个团队的同事,并成立了一些标准。一个完全没有C#知识的家伙C的一个相当大的任务。
对不起,大引进,但:"嘿,这是背景!??
正如我刚才所说,我们是零售商,所以在我们的应用程序的典型屏幕上看起来像这样(当然,这是一种简化的一点点,但它将为目的):
{S3}
{S4}的
我们使用不同的字体大小,因为我们有不同的扫描仪有不同的屏幕分辨率和屏幕尺寸,屏幕可以在运行时改变(基于类型的扫描仪的应用程序运行在)。这样的画面是建立了四个小组(所有设置基座= TOP),几个标签,几个文本框和一个(所有设置不同,使他们可以重新安排自己,如果字体大小的变化)。而且,我的上帝,这样的一个(每个这样几个屏幕)的一些应用程序是一个真正的噩梦管理!
,那岂不是更好,如果我能使用的所有文字只有一个对象在重新排列根据文本的文本框?而且,将在运行时没有任何需要设置几个对象的对接。请记住,任何程序员都可以改变他(她)的代码和重新排列屏幕,但如果你有这样做,那不是你的程序在首位?重新整理所有的对接和计算字体的变化,可以吹的代码比天高。
是的,这是什么HTMLLabel可以解决。我知道,我知道,您希望找到一个Label对象,可以显示不同的字体,不同的颜色,大小,和类似的东西,是 - 你已经找到了这样的标签,但认为是枯燥的;??它只是东西从任何HTML知道标签,你会期望!{A19}{A20}
这HTMLLabel对象是书面的移动环境,不适合Windows编程。这是因为在移动设备上的渲染是在Windows环境中的不同。从技术上讲,在NET CF,你是非常有限的GUI功能,让你有只有一个功能,可以计算文字大小:MeasureString()。这是一个非常不准确的功能,但它是确定移动设备上。
也是一样的示范项目。您可以在PC上运行演示项目,但你可能会失望。这是更好地使用一个真正的移动设备上的示范项目或模拟器。{A21}
使用的代码是很容易:下载源代码并添加到您的移动项目文件HTMLParser.cs和HTMLLabel.cs。编译代码,因此Visual Studio可以创建工具栏上HTMLLabel的对象。HTMLLabel对象放在窗体上的工具栏。 其Text属性更改一些HTML文本和你做。{A22}LT; BGT;粗体文本。LT; IGT;斜体。LT; UGT;下划线文本。LT; PGT;段。对齐属性值(左,右,中心)。LT; fontgt;改变字体。name属性的字体名称。字体大小的大小属性(字体大小点,所以大小= 10意味着10分)。颜色属性。颜色可以是任何HTML命名的颜色({A23})或#RRGGBB形式的颜色的十六进制表示。LT; pregt;意味着非打破文本。LT; brgt;意味着文本打破。{A24}

HTMLLabel1.Text = @"<font size='8' name='Tahoma' color='red'>Tahoma, 8, red</font>";

HTMLLabel1.Text = @"<p align='left'>left</p><p align='center'>" + 

                  @"center</p><p align='right'>right</p>"
{A25}
在在屏幕上绘制的HTML文本,有三个基本步骤: 解析HTML文本计算基础上的字体和对齐的文本定位 表面上绘制文本
第三步是明显的强制性,但对于前两个呢?事实证明,前两个步骤是最耗时的(至少在我使用的移动设备的平均)。所以,不会是完美的,如果我们能够越过前两个步骤?如果我改变了文本,然后第一步显然是强制性的,所以是第二和第三。但是,如果只改变文本的某些部分?那么,即使在当时,它是必要的重复前两个步骤,因为在文本中的变化可以反映整体形象。
但是,该规则的一个例外,在我行的业务,这种异常是不是真的异常,但规则本身。我们有很多固定的文本的屏幕,并改变文本的某些部分,它可以占据屏幕的一部分。我使用的解决方案是,在一个特殊的LT; labelgt;这是一个任意大小的标签在HTML文本中的标记。只有一次这样的HTML文本解析,此外,所有的计算都只有一次。之后,程序员只改变标签的值和标签的文本写入到HTML文本中的正确位置。
这是怎么看起来像:{C}
{五}
标签标签可以有四个属性(标签使用的字体是,当然,由之前使用的标签标记的字体标签决定,或者如果没有字体标记,使用的字体为HTMLLabel本身) :ID是最重要的,因为它是这是由程序员的代码标签的ID。值是初始值的标签。宽度是在屏幕上的标签宽度。如果不指定,其计算方法是,从最初的文本。如果最初的文字也未指定,那么它是一个单一的空间的宽度。高度是在屏幕上的标签的高度。如果不指定,其计算方法是,从最初的文本。如果最初的文字也未指定,那么它是一个单一的空间高度。
标签标记的一些例子:
htmlLabel1.Text = "Some HTML text <label id='lbl1' width='50'>";

htmlLabel1.Text = "Some HTML text <label id='lbl1' value='initial value'>";
{A26}
我们THRE功能,可用于连接程序本身的HTML文本标签和一个事件。ChangeLabelText用于改变标签值。它需要两个参数:标签的ID和新的标签值。如果标签的文本改变(标签),它返回true,否则为假。GetLabelPos返回标签所占用的矩形。它需要两个参数:标签的ID和Rectangle对象的引用。如果标签被发现和矩形设置,返回true,否则为假。注意:在HTMLLabel坐标,而不是屏幕坐标的矩形值!正是在标签上本身RepositionControlOnLabel位置任意控制。它需要两个参数:标签的ID和控制的参考。如果标签被发现,它返回true,否则返回false。注意:要在标签的位置的控制,必须在同一容器中与HTMLLabel。你不能有TextBox和一个小组1,小组2 HTMLLabel,然后重新定位在HTMLLabel的TextBox!重新计算是火灾HTMLLabel文本位置改变,程序员必须重新排列组件的事件。
在这里签名:公共BOOL ChangeLabelText(labelID字符串,字符串值)公共BOOL GetLabelPos(字符串labelID,楼盘矩形RECT)公共无效RepositionControlOnLabel(字符串labelID,控制标签)公共委托无效RecalculatedEvent(对象发件人,EventArgs的发送)
例如:{A27}
古典标签相比NET CF,HTMLLabel有三个属性:VerticalAlignment控制文本内HTMLLabel的垂直对齐方式,可以有三种状态之一:顶部,中部,底部。文本的水平对齐是由传统的HTML标记LT; PGT控制;和配合这些可能的值的属性:左,右,中心。 SpaceSize是空间的大小(点)之间的文本。它可以有正面或负面的价值。当值是负数,空间的大小自动计算字长的字符数除以。当值是正的,这意味着空间的大小是在点。如果数字是零,再有就是字与字之间没有空格。你会看到,即使你空间的大小设置为0,有一些字与字之间的空间。这是因为MeasureString()函数返回一个"不正确的??文字大小。 "不正确的??我的意思是,它会返回一些剩余空间的大小!ShowBorders是一个测试属性超过一个属性,你会在生产中使用。如果它被设置为true,则HTMLLabel将每个文本和标签下面绘制一个矩形,这个矩形的显示元素的计算大小。正如我说,你可以使用这个属性正确设置元素的大小。{A28}
如果你想内一个HTML文本的文本框的位置,然后你可以计算出准确的使用组件的大小和宽度,所需的空间!
htmlLabel1.Text = 

  string.Format("Price: <label id='price' width='{0}' height='{1}'>", 

                textBox1.Width, textBox1.Height);

如果你想有8个数字足够的空间,让我们说,无论字体,你可以设置标签的初始值。标签的大小将被设置,以适应这个初始值。
htmlLabel1.Text = "Price: <label id='price' value='999999.99'>";
{A29}
{中六}
{七}
演示应用程序易于使用,并且它会告诉你,HTMLLabel可以做不同的事情。主窗口有三个部分:从那里你可以选择不同的测试用例的选择。一个文本框(Text属性的代表性显示原始的HTML)。 与结果HTMLLabel。
当你完成后用事先准备好的测试用例,你可以直接在顶端文本框中改变原始的HTML,然后选择"选项"显示更新的HTML??从菜单(4),这将重新绘制HTML。 ,您还可以更改设置子窗体的设置,选定的设置是立即应用的主要形式HTMLLabel。{A30}
HTMLLabel有两个模块:一个是HTML解析器和其他HTMLLabel本身。
HTML解析器是相当小的和快速的。该基地是从杰夫希顿写在他的文章{A31}解析器。我已经重写了他的代码和异型它,所以它是在移动设备上快约70%。我也加入支持"HTML处理指令??"HTML注释??
背后HTMLLabel的基本思想是对标签和纯文本的HTML文本分裂。文本,然后再分裂成字。每个字代表一个元素,HTMLLabel计算每个这样的元素的大小,然后绘制它们表面上。 如何写一个小而快速的文本解析器。如何更快的图形使用双缓冲。如何绘制不同的字体和颜色的表面上的文字。如何写一个类层次,而不是一个类型字段的一个大类。如何转换颜色的名称和颜色代码Color对象。如何编写自定义属性和事件的自定义。NET CF组件。

回答

评论会员:wimdevriendt 时间:2012/01/24
您好,
你有一个非常漂亮的文章。我想创造一个databaseplugin上SQLCE数据库执行的方法。
当我发出命令,我总是得到一个missingmethodexception 如果我运行一个Windows CE的形式应用程序代码,它的工作原理。我有System.Data和SQLCE DLL复制到的地方tcpserver和插件,但我一直在同样的问题。

任何想法?

关于
评论会员:xmsw 时间:2012/01/24
您好,

正如我所看到的,问题是我的另一篇文章:"远程访问NET CF的设备,并有你已经找到了答案{S8}
??http://www.matjazev.net
评论会员:xmsw 时间:2012/01/24
感谢您的热烈反响! {S9}你说这两个解决方案也正在考虑我now.But我试着写的代码,或明显的效果{S10}我觉得那是因为我的技术不是很好,真诚希望成为您的程序指导。期待您在百忙之中,将修订控制升级,非常感谢!非常感谢你!
我希望和幸福的每一天,在你的工作成功
评论会员:mysparkle 时间:2012/01/24
这个控制是如此冷静和强大的!我从中受益。
但我有一个问题是,我怎样才能使它显示滚动条!我认为如果有一个滚动条会更好!
我们期待开导!你可以指点指点!
感谢
评论会员:SeasonLee 时间:2012/01/24
您好,

感谢您的热情{S11}你和我真的希望你满意我的控制。

充分了解你的问题。我并不需要滚动条,所以我还没有实现,现在我的工作在其他项目上,这个控制是足够强大,我或我的球队需要的一切。但是,如果你正在寻找一个解决方案,然后有拖车,您可以采取的路径:

1。您可以绘制表面上已滚动实施,您可以一次绘制整个画面,让底部控制移动内容围绕
2。你可以得到顶端X,顶部Y坐标形式的滚动条和自己绘制的图像。如果是这样的情况下,你也可以画在整个图像的内存映像,然后您复制到屏幕上相应的部分。

以及你可以想像,第二个路径是困难但速度更快的。对不起,不给你更好的指针,但现在我没有任何。

希望我的信息是有益的。

有一个愉快的一天
Matjaz

http://www.matjazev.net
评论会员:connectpalm 时间:2012/01/24
嗨!这个邪恶的控制

我会看到,如果我可以添加LT处理;图像>标记以及。代码似乎是一个乍看之下虽然大密集的{S8}
标签插入任何形式的元素?如一个PictureBox?如果是的话,我可以用现在这个...

我会用仿佛只是为了渲染{S9的基本格式化控制

再次感谢!

Ciao的,
拉尔斯