C# 动态更新在 dll 中创建的控件
C# dynamic update of control created in a dll
我创建了一个Control并将其编译成一个DLL:
namespace TSControlLibrary
{
public partial class BaseMaskedTextBox : MaskedTextBox
{
public BaseMaskedTextBox()
{
InitializeComponent();
this.BackColor = Color.Pink;
}
}
}
然后我创建了另一个测试项目并想在上面使用这个新的 MaskedTextBox...
效果很好,
1 - 我在测试中添加了对 DLL 的引用。并保留默认属性。复制本地 = True,特定版本 = False
2 - 我将 DLL 添加到工具箱,它显示了 BaseMaskedTextBox。
现在我可以在我的 winform 上添加一个新的蒙面东西了。 :-)
但是!!!但是当我想将原始 DLL 从 Color.Pink 更改为 Color.Blue 时,它将允许我在蓝色表单上添加一个新的 MaskedTextBox。但是粉红还是粉红
我想做的是更改 DLL 颜色,重新编译它,新的测试项目将具有新的颜色。我该怎么做?
VS2012,winforms,呵呵
嗯……嗯,看来我明白了。 :-)
我发现 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 的另一个实例 Test 上它将立即更新测试设计视图 - 使用 20 种字体,它看起来也会非常难看......编译时它也会是正确的 - 如设计所示。
奇怪的是,我唯一不能改变的就是面具。但我怀疑我是否会从 00/00/0000 开始更改它 - 至少对于这个项目而言。
我创建了一个Control并将其编译成一个DLL:
namespace TSControlLibrary
{
public partial class BaseMaskedTextBox : MaskedTextBox
{
public BaseMaskedTextBox()
{
InitializeComponent();
this.BackColor = Color.Pink;
}
}
}
然后我创建了另一个测试项目并想在上面使用这个新的 MaskedTextBox...
效果很好,
1 - 我在测试中添加了对 DLL 的引用。并保留默认属性。复制本地 = True,特定版本 = False
2 - 我将 DLL 添加到工具箱,它显示了 BaseMaskedTextBox。
现在我可以在我的 winform 上添加一个新的蒙面东西了。 :-)
但是!!!但是当我想将原始 DLL 从 Color.Pink 更改为 Color.Blue 时,它将允许我在蓝色表单上添加一个新的 MaskedTextBox。但是粉红还是粉红
我想做的是更改 DLL 颜色,重新编译它,新的测试项目将具有新的颜色。我该怎么做?
VS2012,winforms,呵呵
嗯……嗯,看来我明白了。 :-)
我发现 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 的另一个实例 Test 上它将立即更新测试设计视图 - 使用 20 种字体,它看起来也会非常难看......编译时它也会是正确的 - 如设计所示。
奇怪的是,我唯一不能改变的就是面具。但我怀疑我是否会从 00/00/0000 开始更改它 - 至少对于这个项目而言。