为什么我的控件的属性不会在同类课程之外发生变化?
-
10-10-2019 - |
题
我是C#中的新手,但并不是新的编码 - 将其进行近二十年的发展 - 并且在我构建的自定义控件中的属性遇到了问题,该属性是从面板中继承的。当我将属性放置时,我可以在Designer属性列表中看到它们,甚至可以设置它们,但是在运行我的小应用程序时,似乎没有使用这些属性值。如果我以编程方式更改属性:没有错误,但是我的控件无能为力,那就好像它们无法正确设置一样。但是,如果我以编程方式进行课程,那么他们会工作。我的猜测是,我的属性设置/获取东西不正确。请查看我如何做的以下代码块:
public class ColorStrip : Panel
{
// properties
// ------------------------------------------
// size of color clusters (boxes)
private int _clusterSize = 20;
// controls if show the buttons panel
private Boolean _showButtons;
// property setters/getters
// ------------------------------------------
// clusterSize...
public int clusterSize
{
get { return _clusterSize; }
set { _clusterSize = value; }
}
// showButtons...
public Boolean showButtons
{
get { return _showButtons; }
set { Console.Write(_showButtons); _showButtons = value; }
}
....
因此,以我的形式,例如在加载中,甚至在单击事件中,如果我放置colorstrip1.showbuttons = false;或colorstrip1.showbuttons = true;无论如何(ColorsTrip1将是在设计模式下将控件放置在形式之后的实例名称)... console.write始终说“ false”;即使我将其设置为“ True”在“设计属性”列表中,它也不会反映定居值,即使我默认为true,它也永远不会在外部更改。有任何想法吗?这些方法的非属于新的和外部定居的属性值都没有,显然Getter/Setter的东西无法正常工作。在我看来,我没有按照我设定或获得财产的方式做正确的事 外部 班上。它只能在其中工作,作为魅力...任何帮助...非常感谢!
干杯
锂
PS澄清解决方案:
在这种情况下设置属性 不起作用,因为我试图在构造函数中使用新的设定值, ,这似乎无法获得新值,因为它是建立东西的。如果我 更改属性价值 在设计模式>属性编辑器或在对象外部的代码中,请在父级的加载事件中说明, 它将更改它,但对于除构造函数以外的所有方法都可以阅读, 当然 :)
解决方案
这可能是执行顺序的问题。您的属性设置器只是设置一个变量,但实际上并未触发控件上的任何内容以更新与此变量相关的状态(例如,添加或显示我假设的按钮)。
当您设置属性befre时,其余的初始化完成了,正在使用该值,否则不是因为在初始go期间,默认值仍然是属性值。
您需要在设置器上采取行动,这里有一些伪代码要说明:
set {
_showButtons = value;
if (alreadyInitialized) {
UpdateButtons();
}
}
注意:确保首先设置值,然后采取行动 - 否则您最终使用旧值(就像您的 Console.Write()
是在做)。
其他提示
引用的代码看起来并不有问题。您确定要引用相同的Colorstrip实例吗?另外,请检查您的.designer.cs文件,以确保设置属性的代码在那里。
实际上,尝试使用自动实施属性来简化代码:
public int clusterSize { get;set;}
public Boolean showButtons {get;set;}
public ColorStrip() { ... clusterSize = 20; ... }