none
修改自定义控件对已存在控件无效 RRS feed

  • 问题

  • using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Drawing.Drawing2D;
    using System.Drawing.Text;
    
    namespace TestContorls
    {
        public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }
            public string Info
            {
                get; set;
            } = "¡";
    
            public Color InfoBackColor
            {
                get; set;
            } = Color.Orange;
    
            private void UserControl1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
                e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                e.Graphics.FillEllipse(new SolidBrush(InfoBackColor), new Rectangle(1, 1, Width - 2, Height - 2));
                SizeF size = e.Graphics.MeasureString(Info, Font);
                RectangleF _RecString = ClientRectangle;
                _RecString.Inflate(-(Width - size.Width) / 2f, -(Height - size.Height) / 2f);
                e.Graphics.FillRectangle(Brushes.Red, _RecString);
                e.Graphics.DrawString(Info, Font, new SolidBrush(ForeColor), _RecString);
            }
    
            /// <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 组件设计器生成的代码
            /// <summary> 
            /// 设计器支持所需的方法 - 不要修改
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                this.SuspendLayout();
                // 
                // UserControl1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.Name = "UserControl1";
                this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserControl1_Paint);
                this.ResumeLayout(false);
            }
            #endregion
        }
    }
    

    1,如上代码写好一个自定义控件,编译

    2,新建一个winform Form1,并在里面添加几个这个自定义控件,一切都看起来正常

    3,修改这个自定义控件,比如将Paint里面的这一行(e.Graphics.FillRectangle(Brushes.Red, _RecString);)删了,就是不显示字符的矩形框背景,然后编译!很奇怪,Form1的自定义控件仍然显示字符的矩形背景!在编译仍然是一样的结果。

    4,拷贝Form1的自定义控件,粘贴回去,什么都不需要修改,但是字符的矩形背景惊人神奇的消失了!!!

    2019年1月21日 4:05

全部回复

  • 你好,

    根据的描述和代码, 我使用VS2017 Enterprise版做了一个例子, 编译一次后,红色的方框直接就消失了, 并没有出现你说的情况。请问你用的是vs的哪个版本?

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年1月22日 5:36
    版主
  • 您好,我的版本是VS2017 15.9.3社区版。

    这似乎是个bug,我把项目关闭重新打开也不会再出现问题。

    2019年1月22日 13:35
  • 你好,

    这个可能是VS的问题, 我建议你可以登陆你的visual studio 2017, 然后通过点击 Help -> Send a feedback -> Report a Problem 来提交一个反馈。 

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年1月23日 1:18
    版主