Унаследованный элемент управления не обновляется после изменения визуальных свойств - PullRequest
1 голос
/ 24 февраля 2012

У меня есть MLable, который наследует Label.Цвет фона красный.Я могу использовать его на формах с красным фоном.Но когда я хочу изменить фон на черный из пользовательского управления MLabel, уже добавленные ярлыки не действуют.Только новый фон MLabel черный, другие красный.Что за

Должен ли я менять их один за другим?

КОД ОБРАЗЦА:

MLabel.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestCControl
{
    public partial class CustomControl1 : Label
    {
        public CustomControl1()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }
    }
}

Форма 1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestCControl
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

Form1.Designer.cs

namespace TestCControl
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.customControl11 = new TestCControl.CustomControl1();
            this.customControl12 = new TestCControl.CustomControl1();
            this.SuspendLayout();
            // 
            // customControl11
            // 
            this.customControl11.AutoSize = true;
            this.customControl11.BackColor = System.Drawing.Color.Black;
            this.customControl11.Location = new System.Drawing.Point(50, 23);
            this.customControl11.Name = "customControl11";
            this.customControl11.Size = new System.Drawing.Size(86, 13);
            this.customControl11.TabIndex = 0;
            this.customControl11.Text = "customControl11";
            // 
            // customControl12
            // 
            this.customControl12.AutoSize = true;
            this.customControl12.BackColor = System.Drawing.Color.Maroon;
            this.customControl12.Location = new System.Drawing.Point(140, 74);
            this.customControl12.Name = "customControl12";
            this.customControl12.Size = new System.Drawing.Size(86, 13);
            this.customControl12.TabIndex = 1;
            this.customControl12.Text = "customControl12";
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.customControl12);
            this.Controls.Add(this.customControl11);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private CustomControl1 customControl11;
        private CustomControl1 customControl12;
    }
}

Как вы можете видеть, один из пользовательских элементов управления имеет черный другой бордовый задний цвет.Изменения в MLabel не влияют на ранее добавленные элементы управления на winform.

1 Ответ

2 голосов
/ 24 февраля 2012

Несколько вещей, чтобы проверить здесь.

Все ли ваши MLabels ссылаются на одну и ту же версию? (Возможно)

Как вы устанавливаете фон элемента управления MLabel, это изменение цвета фона по умолчанию?

Как вы меняете существующие MLabels, устанавливаете ли вы их вручную в коде или используете цвет фона по умолчанию?

Также проверьте код winform. Если код конструктора явно задает цвет фона MLabel, то это заменит любые значения по умолчанию, которые может иметь элемент управления. Если это так, то вам нужно будет либо удалить настройку цвета фона, чтобы она использовала настройки по умолчанию, либо вам придется изменить каждую настройку вручную.

Если все вышеперечисленное кажется правильным, то здесь будет полезен некоторый код и / или немного больше информации.

Обновлен ответ после просмотра фактического кода:

В CustomControl1 вы захотите сделать что-то вроде этого:

 System.Drawing.Color _backColor = System.
 protected override System.Drawing.Color BackColor 
 {
     get{return _backColor;} 
     set{_backColor = value;}
 }

В Form1.Designer.cs удалите строки, которые устанавливают BackColor. Они явно устанавливают задний цвет и не допускают цвет по умолчанию

this.customControl11.BackColor = System.Drawing.Color.Black;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...