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

      

  • 相关阅读:
    [Linked List]Convert Sorted List to Binary Search Tree
    [Linked List]Reorder List
    [Linked List]Insertion Sort List
    解剖Nginx·模块开发篇(4)模块开发中的命名规则和模块加载与运行流程
    解剖Nginx·模块开发篇(3)ngx_http_hello_world_module 模块的基本函数实现
    解剖Nginx·模块开发篇(2)ngx_http_hello_world_module 模块基本结构定义
    解剖Nginx·模块开发篇(1)跑起你的 Hello World 模块!
    Nginx 源码完全注释(11)ngx_spinlock
    Nginx 源码完全注释(10)ngx_radix_tree
    Nginx源码完全注释(9)nginx.c: ngx_get_options
  • 原文地址:https://www.cnblogs.com/wxylog/p/7697806.html
Copyright © 2020-2023  润新知