在dll中创建的控件的C#动态更新

本文关键字:动态 更新 控件 创建 dll | 更新日期: 2023-09-27 18:29:28

我创建了一个控件并将其编译成DLL:

namespace TSControlLibrary
{
    public partial class BaseMaskedTextBox : MaskedTextBox
    {
        public BaseMaskedTextBox()
        {
            InitializeComponent();
            this.BackColor = Color.Pink;
        }
    }
}

然后我创建了另一个测试项目,并想在上面使用这个新的MaskedTextBox…

这很有效,

1-我在测试中添加了对DLL的引用。并保留了默认属性。复制本地=真,特定版本=假

2-我将DLL添加到工具箱中,其中显示了BaseMaskedTextBox。

现在我可以在我的winform上添加一个新的蒙面东西了。:-)

但是!!!但是,当我想将原始DLL从Color.Prink更改为Color.Blue时,它将允许我在蓝色表单上添加一个新的MaskedTextBox。但是粉红色仍然是粉红色的。

我想做的是更改DLL的颜色,重新编译它,新的测试项目就会有新的颜色。我该怎么做?

VS2012,winforms,呵呵。

在dll中创建的控件的C#动态更新

hmm。。。嗯,看起来我想明白了。:-)

我发现DLL颜色集是有效的,它会将颜色从默认值更新为绿色或其他颜色,但之后会运行Test.Designer.cs,并将其重置为几个小时前添加时的颜色。

所以过了一段时间,在我的测试表上,我有30个不同的盒子,所有的颜色都不一样。因为designer.cs会跟踪它们的去向和其他一些东西,比如颜色、字体大小等等。

所以,我发现LocationChanged事件会在设计器之后,但在它显示在屏幕上之前触发。这就是门票。

   public BaseMaskedTextBoxDate2()
    {
        this.LocationChanged += new EventHandler(Setup);
    }

    //*************************************************************************************************
    private void Setup(object sender, EventArgs e)
    {
        MaskedTextBox maskedBox = (MaskedTextBox)sender;
        maskedBox.BackColor = Color.Gray;  // For testing and also to make sure all fields are handled.
        maskedBox.Font = new Font("Microsoft Sans Serif", 10.0f);
        maskedBox.ValidatingType = typeof(System.DateTime);
        maskedBox.BeepOnError = false;
        maskedBox.TypeValidationCompleted += new TypeValidationEventHandler(maskedTextBoxDate_TypeValidationCompleted);
        ...
    }

现在,如果我在VS的一个实例中打开DLL版本(上面),并进行更改,比如字体大小从10变为20,在VS的另一个实例上,它将立即在测试设计视图中更新-使用20字体,它看起来也会很难看。。。当编译时,它也将是正确的——如设计中所示。

奇怪的是,我唯一不能改变的就是面具。但我怀疑我是否会从00/00/0000改变这一点——至少对这个项目来说是这样。