惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
MyScale Blog
MyScale Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
P
Proofpoint News Feed
人人都是产品经理
人人都是产品经理
Last Week in AI
Last Week in AI
罗磊的独立博客
G
Google Developers Blog
Y
Y Combinator Blog
博客园 - 【当耐特】
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
J
Java Code Geeks
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
美团技术团队
宝玉的分享
宝玉的分享
Jina AI
Jina AI
小众软件
小众软件
T
Tailwind CSS Blog
A
About on SuperTechFans

博客园 - Emosen

Win7 不能安装SQL Server 2005 Management Studio Express.msi解决办法 WINDOWS 画空心字 - Emosen - 博客园 create database link 数据库主键设计之思考 开始→运行→输入的命令集锦 开发人员一定要加入收藏夹的网站 SQL Server 2005 Express 远程访问设置方法 Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇 编程十诫 转贴:最常见问题(FAQ)留着慢慢学习--微软.net精简框架最常见问题 ndis 相关资料 C# 改变图片大小的功能代码片段 (wince5) PHP+PDO+ORALCE 实例演示 PHP+PDO+ORALCE 配置说明 Oracle 数据类型 Oracle分页查询语句(一) 网页UTF8编码--多出空白行的问题(ZT) 开源性能测试工具 - ApacheBench(简称ab) 介绍 用Eclipse开发PHP项目
ZT--文本显示尺寸计算(关于控件的尺寸定义)
Emosen · 2010-08-26 · via 博客园 - Emosen

WM系统的特点之一就是:尺寸比较小。因此,在UI设计时,控件大小、位置、布局,就显得尤为重要,力求在有限的空间中,完整的显示文本信息。之前提到的跑马灯控件,也是类似的功能。

  用于文本显示的,主要有两种控件:LABEL和TEXTBOX。这两种控件,在一定程度上,都支持自动换行。但是要使其显示完整信息,就必须定义一个合适的尺寸(LABEL显示高度不够时,文字被遮蔽,TEXTBOX则会显示滚动条)。

  情况一、LABEL不换行,但需要显示完整的内容,即动态设置LABEL的长度。

  在NET2.0的桌面系统中,可以用以下方法:
  TextRenderer.MeasureText 方法 (String, Font)
  在使用指定字体绘制时,提供指定文本的尺寸(以像素为单位)。

  NETCF可以用以下方式:
    Graphics g = this.CreateGraphics();
    SizeF siF = g.MeasureString(内容, 字体);
    label2.Width = (int)siF.Width;

  情况二、在LABEL显示时,需要自动换行,并根据实际高度,设置控件的尺寸。
  思路,计算出一行显示需要的尺寸,除以希望每行显示的尺寸,得到行数。 再根据行数得到高度。


  情况三、在TEXTBOX中,根据文本,需要计算文本需要显示的高度。
  一般思路,文字的FONT决定了高度,只要知道行数,就可以得到需要显示的高度了。但是,用topic.Font.Height当行数很多时存在误差。 所以, 要获得一行文字所占的实际高度,需要借鉴Graphics方法。

以下是获得行数的方法(获得行数的方法,只支持2005):

 [DllImport("coredll.dll")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, string lParam);  

        private void button1_Click(object sender, EventArgs e)
        {
            //获得TEXTBOX中文本的实际高度
            int EM_GETLINECOUNT = 0x00BA;//获取总行数的消息号 
            int lc = SendMessage(this.textBox1.Handle, EM_GETLINECOUNT, IntPtr.Zero, "");//行数

            Graphics g = this.CreateGraphics();
            SizeF siF = g.MeasureString("TEST", textBox1.Font);
            g.Dispose();
            int sf = (int)siF.Height * lc;

            this.textBox1.ClientSize = new Size(this.textBox1.ClientSize.Width, sf + 5);

        }

针对2003获得行数,需要下面的方法(获得控件句柄):
 [DllImport("coredll.dll")]
        private static extern IntPtr GetFocus();
 IntPtr hWnd = GetFocus();
        int lc3 = SendMessage(hWnd, EM_GETLINECOUNT, IntPtr.Zero, "");//行数

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhaojiangang/archive/2009/02/09/3869683.aspx