【问题标题】:C# dynamic update of control created in a dllC#动态更新在dll中创建的控件
【发布时间】:2016-01-07 04:47:10
【问题描述】:

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

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

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

这很有效,

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

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

现在我可以在我的 winform 中添加一个新的蒙面对象。 :-)

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

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

VS2012,winforms,呵呵。

【问题讨论】:

  • 您是否考虑过在控件上公开背景属性?无需重新编译。
  • 颜色变化只是为了让我可以看到它改变了控件,我计划改变其他一些东西,当我完成时可能永远不会改变颜色......字体大小,方法,验证。 ..
  • 你试过增加AssemblyVersion的数字吗?
  • 原来 DLL 正在更新并实际设置颜色,但 Test.Designer.cs 只是将其重置回来。所以它不是 DLL ...... :-) 设计师也会在进入设计模式之前设置颜色(和其他一些东西) - 所以这可能有点傻。知道在设计器加载之后和在设计器屏幕上显示之前触发的任何事件吗?
  • locationChanged 事件在正确的时间触发...

标签: c# winforms dll controls


【解决方案1】:

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

我发现 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 版本(上面)并在另一个 VS 实例上进行更改,比如说字体大小,从 10 到 20,它是 Test 它将更新立即测试设计视图 - 使用 20 种字体,它看起来也很讨厌......而且编译后它也将是正确的 - 如设计中所示。

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

【讨论】:

  • 大声笑,事实证明我确实想更改货币版本的掩码...大声笑...啊,永远不要说我猜。
猜你喜欢
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2017-07-22
  • 2023-03-28
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多