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

推荐订阅源

IT之家
IT之家
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
爱范儿
爱范儿
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
Y
Y Combinator Blog
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
M
MIT News - Artificial intelligence
博客园 - Franky
V
Visual Studio Blog
I
InfoQ
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
博客园 - 司徒正美
L
LangChain Blog

博客园 - 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