我是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; ... }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top