设计器:

 partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null; /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
} #region Windows 窗体设计器生成的代码 /// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.txtGraphicsPath = new System.Windows.Forms.TextBox();
this.txtMeasureString = new System.Windows.Forms.TextBox();
this.button2 = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.button5 = new System.Windows.Forms.Button();
this.richTextBox2 = new System.Windows.Forms.RichTextBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Font = new System.Drawing.Font("黑体", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.textBox1.Location = new System.Drawing.Point(134, 49);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(181, 94);
this.textBox1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(134, 149);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(327, 49);
this.textBox2.Multiline = true;
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(181, 94);
this.textBox2.TabIndex = 0;
//
// textBox3
//
this.textBox3.Location = new System.Drawing.Point(327, 209);
this.textBox3.Multiline = true;
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(181, 94);
this.textBox3.TabIndex = 0;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(134, 31);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(65, 12);
this.label1.TabIndex = 2;
this.label1.Text = "输入字符串";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(325, 31);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(191, 12);
this.label2.TabIndex = 2;
this.label2.Text = "直接使用MeasureString计算的Size";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(325, 194);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(227, 12);
this.label3.TabIndex = 2;
this.label3.Text = "使用GraphicsPath的AddString计算的Size";
//
// txtGraphicsPath
//
this.txtGraphicsPath.Location = new System.Drawing.Point(327, 309);
this.txtGraphicsPath.Name = "txtGraphicsPath";
this.txtGraphicsPath.Size = new System.Drawing.Size(147, 21);
this.txtGraphicsPath.TabIndex = 3;
//
// txtMeasureString
//
this.txtMeasureString.Location = new System.Drawing.Point(327, 149);
this.txtMeasureString.Name = "txtMeasureString";
this.txtMeasureString.Size = new System.Drawing.Size(147, 21);
this.txtMeasureString.TabIndex = 4;
this.txtMeasureString.TextChanged += new System.EventHandler(this.txtMeasureString_TextChanged);
//
// button2
//
this.button2.Location = new System.Drawing.Point(55, 265);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 1;
this.button2.Text = "button1";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// pictureBox1
//
this.pictureBox1.Image = global::_20171016_算出字符串的真实宽度.Properties.Resources.abc;
this.pictureBox1.Location = new System.Drawing.Point(57, 193);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(142, 53);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 5;
this.pictureBox1.TabStop = false;
//
// button3
//
this.button3.Location = new System.Drawing.Point(161, 265);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(75, 23);
this.button3.TabIndex = 1;
this.button3.Text = "button1";
this.button3.UseVisualStyleBackColor = true;
//
// button4
//
this.button4.Location = new System.Drawing.Point(240, 149);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(75, 23);
this.button4.TabIndex = 6;
this.button4.Text = "开始创建";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(327, 0);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
this.richTextBox1.Size = new System.Drawing.Size(266, 28);
this.richTextBox1.TabIndex = 7;
this.richTextBox1.Text = "";
//
// button5
//
this.button5.Location = new System.Drawing.Point(765, 431);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(75, 23);
this.button5.TabIndex = 8;
this.button5.Text = "button5";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button5_Click);
//
// richTextBox2
//
this.richTextBox2.Location = new System.Drawing.Point(583, 296);
this.richTextBox2.Name = "richTextBox2";
this.richTextBox2.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
this.richTextBox2.Size = new System.Drawing.Size(266, 129);
this.richTextBox2.TabIndex = 7;
this.richTextBox2.Text = "";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(965, 523);
this.Controls.Add(this.button5);
this.Controls.Add(this.richTextBox2);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.button4);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.txtMeasureString);
this.Controls.Add(this.txtGraphicsPath);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox3);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout(); } #endregion private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtGraphicsPath;
private System.Windows.Forms.TextBox txtMeasureString;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.RichTextBox richTextBox2;
}

  测试:

public partial class Form1:Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
this.txtGraphicsPath.Text = FontStyle.Bold.ToString();
Graphics graphics = this.textBox1.CreateGraphics();
float f = 0f;
StringFormat sf = StringFormat.GenericDefault;
sf.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
SizeF sizeF = graphics.MeasureString(this.textBox1.Text, this.textBox1.Font,0, sf); this.textBox2.Text = "MeasureString:W=" + sizeF.Width + ",H=" + sizeF.Height;
this.txtMeasureString.Text = this.textBox1.Text;
this.txtMeasureString.Size = new Size((int)sizeF.Width, (int)sizeF.Height); this.richTextBox1.Text = this.textBox1.Text;
this.richTextBox1.Size = new Size((int)sizeF.Width, (int)sizeF.Height); // StringFormat sf = StringFormat.GenericTypographic;
// sf.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
System.Drawing.Drawing2D.GraphicsPath g = new System.Drawing.Drawing2D.GraphicsPath(); 这里测试的不真实, g没有实际对应的设备
// StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical);
g.AddString(this.textBox1.Text, this.textBox1.Font.FontFamily, (int)this.textBox1.Font.Style, this.textBox1.Font.Size, new Point(0, this.textBox1.Text.Length), StringFormat.GenericDefault); //Bitmap b = new Bitmap(
//graphics.DrawString(str, font, Brushes.Red, -1, -1);
RectangleF rf = g.GetBounds();
this.textBox3.Text = "GraphicsPath:W=" + rf.Width + ",H=" + rf.Height;
this.txtGraphicsPath.Size = new Size((int)rf.Width, (int)rf.Height);
this.txtGraphicsPath.Text = this.textBox1.Text;
// graphics.MeasureString("", font); this.txtMeasureString.Font = this.textBox1.Font;
this.richTextBox1.Font = this.textBox1.Font;
} private void button2_Click(object sender, EventArgs e)
{
//旋转前后宽高会变
Image image = this.pictureBox1.Image;
MessageBox.Show("旋转前的宽高分别是:" + image.Width + "," + image.Height);
image.RotateFlip(RotateFlipType.Rotate90FlipNone);
this.pictureBox1.Image = image;
MessageBox.Show("旋转后的宽高分别是:" + this.pictureBox1.Image.Width + "," + this.pictureBox1.Image.Height);
} private void button4_Click(object sender, EventArgs e)
{ } private void txtMeasureString_TextChanged(object sender, EventArgs e)
{ } private void Form1_Paint(object sender, PaintEventArgs e)
{
StringFormat format3= new StringFormat();
string quote = "Not everything that can be counted counts, and not everything that counts can be counted.";
format3.Trimming = StringTrimming.EllipsisWord;
e.Graphics.DrawString(quote, this.Font, Brushes.Black,
new RectangleF(10.0F, 10.0F, 90.0F, 50.0F), format3);
return; ; // Construct a new Rectangle .
Rectangle displayRectangle =
new Rectangle(new Point(40, 40), new Size(80, 80)); // Construct 2 new StringFormat objects
StringFormat format1 = new StringFormat(StringFormatFlags.NoClip);
StringFormat format2 = new StringFormat(format1); // Set the LineAlignment and Alignment properties for
// both StringFormat objects to different values.
format1.LineAlignment = StringAlignment.Near;
format1.Alignment = StringAlignment.Center;
format2.LineAlignment = StringAlignment.Center;
format2.Alignment = StringAlignment.Far; // Draw the bounding rectangle and a string for each
// StringFormat object.
e.Graphics.DrawRectangle(Pens.Black, displayRectangle);
e.Graphics.DrawString("Showing Format1", this.Font,
Brushes.Red, (RectangleF)displayRectangle, format1);
e.Graphics.DrawString("Showing Format2", this.Font,
Brushes.Red, (RectangleF)displayRectangle, format2);
} private void button5_Click(object sender, EventArgs e)
{
this.richTextBox2.Text = TextRenderer.MeasureText(this.textBox1.Text, this.textBox1.Font).Width+",,,,"+ TextRenderer.MeasureText(this.textBox1.Text, this.textBox1.Font).Height;
}
}

  同时附上可能触发ContentsResized事件的操作:

        private void button16_Click(object sender, EventArgs e)
{
this.txtMain.Text = "abc";
this.txtMain.Size = new Size(50, 50); //没有
this.txtMain.SelectionAlignment = HorizontalAlignment.Center;
this.txtMain.BorderStyle = BorderStyle.None;//没有
this.txtMain.BackColor = Color.Red;//没有
this.txtMain.Font = new Font("宋体",12, FontStyle.Bold);
this.txtMain.RightMargin = 0;//没有
this.txtMain.SelectionRightIndent = 0;//没有
}

  

在richtextbox中获取最真实的字符串像素大小的更多相关文章

  1. Kubernets中获取客户端真实IP总结

    1. 导言 绝大多数业务场景都是需要知道客户端IP的 在k8s中运行的业务项目,如何获取到客户端真实IP? 本文总结了通行的2种方式 要答案的直接看方式一.方式二和总结 SEO 关键字 nginx i ...

  2. Tomcat 8.5中获取客户端真实IP及协议

    获取客户端真实IP ServletRequest接口提供了getRemoteAddr方法用于获取客户端IP,但是当客户端通过代理服务器访问后端服务器的时候,服务器调用getRemoteAddr方法会返 ...

  3. 从SignalTap II中获取“最真实”的仿真测试向量(ZZ)

         在实际工作中,经常会遇到这样的情况:在硬件调试中采用SignalTap II反复多次编译并最终捕获到问题的原因时,才会发现,原来这个问题是逻辑问题,是可以在仿真环境下发现并快速解决的.先前没 ...

  4. 在有nginx做反向代理时候,如何获取用户真实Ip信息

    在获取用户的Ip地址时,不一定可以获取到用户真实的地址信息,这要看代理服务器的类型,代理服务器有普通匿名代理服务器,高匿代理服务器,像这种情况很难获取到用户真实的Ip地址 假如用户没有使用匿名代理服务 ...

  5. 7个获取访问者真实IP的方法,速学!!!

    通常情况下,网站访问并不是简单地从用户的浏览器直达服务器,中间可能部署有CDN.WAF.高防.例如,采用这样的架构:“用户 > CDN/WAF/高防 > 源站服务器” .那么,在经过多层代 ...

  6. Java中使用HttpRequest获取用户真实IP地址端口

    import javax.servlet.http.HttpServletRequest; /** * 自定义访问对象工具类 * * 获取对象的IP地址等信息 * @author X-rapido * ...

  7. js中获取URL中指定的查询字符串

    js中获取URL中指定的搜索字符串,主要利用location对象实现,废话少说,上代码. function getSearchString(key) { // 获取URL中?之后的字符 var str ...

  8. nodejs之获取客户端真实的ip地址+动态页面中引用静态路径下的文件及图片等内容

    1.nodejs获取客户端真实的IP地址: 在一般的管理网站中,尝尝会需要将用户的一些操作记录下来,并记住是哪个用户进行操作的,这时需要用户的ip地址,但是往往当这些应用部署在服务器上后,都使用了ng ...

  9. 从html字符串中获取div内容---jquery

    思考的问题: 怎么在一个网页的div中嵌套另外的网页(不使用inclue,iframe和frame,不使用他们的原因,include只能嵌套静态网页,iframe对网络爬虫影响,frame嵌套网页无法 ...

随机推荐

  1. v-model和sync修饰符

    场景: 在用vue开发的过程中我们经常会遇到父子组件共用同一变量的情况,那么在这种情况下,我们肯定会想直接 把变量传过来用,因为是双向绑定的所以子组件就会修改这个变量,这样在vue中时会报错的. 问题 ...

  2. mysql应该看的blog

    一个比较系统的学习mysql的网站:http://www.runoob.com/mysql/mysql-data-types.html

  3. spring mvc : 中文传值(post/get)中文乱码

    请将以下代码放入 web.xml文件中,注意存放顺序,否则会报错.filter应该放在context-param后面: <!-- 字符过滤器 --> <filter> < ...

  4. yii2:Url::toRoute 和 ActiveForm::begin action在二级目录生成地址错误

    yii2:Url::toRoute 和 ActiveForm::begin action在二级目录下生成地址错误. 正确地址: /www/super/web/wxreplay/edit-text?id ...

  5. 【Demo】HTML5拖放--简单demo

    用HTML5拖放功能编写一个简单的拖放Demo 单次拖放demo 效果: ------拖放前------- ------拖放后-------  实现代码: <!DOCTYPE html> ...

  6. python中的set类型

    一. 定义 set是一个无序且不重复的元素集合 set和dict类似,是一组key的集合,但不存储value set有以下特性: 1. 由于key不能重复,所有set中没有重复的key 2. 元素为不 ...

  7. Ceph Monitor的数据管理

    转自:https://www.ustack.com/blog/ceph-monitor-2/ Monitor管理了Ceph的状态信息,维护着Ceph中各个成员的关系,这些信息都是存放在leveldb中 ...

  8. 转: OLAP引擎——Kylin介绍

    本文转自:http://blog.csdn.net/yu616568/article/details/48103415 ,如有侵犯,立刻删除.  Kylin是ebay开发的一套OLAP系统,与Mond ...

  9. Prism5.0新内容 What's New in Prism Library 5.0 for WPF(英汉对照版)

    Prism 5.0 includes guidance in several new areas, resulting in new code in the Prism Library for WPF ...

  10. python面向对象总结

    一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...