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

时间:2016-01-07 04:47:10

标签: c# winforms dll controls

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

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

然后我创建了另一个Test项目,并希望在其上使用这个新的MaskedTextBox ......

这几乎有用,

1 - 我在Test中添加了对DLL的引用。并保留默认属性。复制Local = True,特定版本= False

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

现在我可以在我的winform上添加一个新的蒙面内容。 : - )

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

我想要做的是更改DLL颜色,重新编译它,新的Test项目将具有新颜色。我怎么能这样做?

VS2012,winforms,嘿。

1 个答案:

答案 0 :(得分:0)

嗯......好吧,看起来我想通了。 : - )

我发现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改变它 - 至少对于这个项目来说是这样。