我是 C# 的新手,但对编码并不陌生——我已经做了将近 20 年——并且我正在构建的自定义控件中的属性存在问题,该控件继承自面板。当我放置我的属性时,我可以在 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 总是说“假”;即使我在设计属性列表中将其设置为“true”,它也不会反映已确定的值,即使我将其默认为 true,它也永远不会在外部更改。有任何想法吗?这些方法都没有获得新的和外部解决的属性值,显然 getter/setter 的东西不起作用。在我看来,我在课堂外设置或获取属性的方式不正确。它仅在其中起作用,作为一种魅力...任何帮助...非常感谢!
干杯
锂
ps澄清解决方案:
在这种情况下设置属性不起作用,因为我试图在构造函数中使用新的设置值,这似乎无法获取新值,因为它是构建事物。如果我在设计模式 > 属性编辑器或在对象外部的代码中更改属性值,比如在它的父表单的加载事件中,它会更改它,但对于除构造函数之外的所有方法都是可读的,当然:)