1

我正在创建一个 UserControl,它有一个SetCameraCount可以在控件实际显示之前和/或之后使用的方法。

如果在控件显示之前SetCameraCount使用,那么除了设置控件在第一次加载时使用它之外什么都不应该做。cameraCount

如果在加载控件SetCameraCount设置了 is used ,则控件应该以与第一次加载时相同的方式使用新值进行更新。cameraCount

为此,我使用_IsLoadedbool 来检查 UserControl 是否已加载。

bool _IsLoaded;

int cameraCount;

public void SetCameraCount(int cameraCount)
{
    if (this.cameraCount != cameraCount)
    {
        this.cameraCount = cameraCount;

        if (_IsLoaded)
            buildMenu();
    }
}

void CamMultiple_Load(object sender, EventArgs e)
{
    buildMenu();
    _IsLoaded = true;
}

void buildMenu()
{
    // this method will absolutely fail if the control is not loaded
    // ...
}

我经常使用这种模式。

虽然它工作正常,但我想知道是否可以用_IsLoadedWindows 窗体中已经实现的某些属性替换 bool。现在我什么也没找到。你知道这样的房产吗?

4

1 回答 1

1

影响其他视觉元素的 UserControl 属性值更改需要处理两种情况:

  • 控件可见之前:控件已构造,但尚未添加到控件集合中。Load 事件尚未触发,并且控件包含的某些可视元素尚未准备好。这就是为什么必须将属性值存储在某个地方并用作触发控件 Load 事件的原因。

  • 加载控件后:控件使用的视觉元素已准备就绪。可以正确应用属性值更改。

这就是为什么我使用问题中描述的模式。

正如 Hans Passant 所评论的,该属性IsHandleCreated在控件加载时变为真。Created 属性似乎也可以工作,但我需要进一步测试它。

于 2013-05-22T20:44:32.887 回答