在richtextbox中获取最真实的字符串像素大小

设计器:

 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;//没有
        }

  

 

转载于:https://www.cnblogs.com/wxylog/p/7697806.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值