【发布时间】:2013-05-22 06:17:57
【问题描述】:
我正在创建一个 UserControl,它有一个 SetCameraCount 方法,可以在控件实际显示之前和/或之后使用。
如果在控件显示之前使用了SetCameraCount,那么除了设置cameraCount 以便控件在第一次加载时使用它之外,什么都不应该做。
如果使用SetCameraCount 是在控件加载之后设置的,那么控件应该以与第一次加载时相同的方式更新,使用新的cameraCount 值。 p>
为此,我使用_IsLoaded 作为布尔值来检查 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
// ...
}
我经常使用这种模式。
虽然它工作正常,但我想知道是否可以用 Windows 窗体中已经实现的某些属性替换 _IsLoaded bool。现在我什么也没找到。你知道这样的房产吗?
【问题讨论】:
-
IsHandleCreated 将匹配。顺便说一句,“构建菜单”操作没有充分的理由失败。
-
谢谢,我会试试这个。 buildMenu 是特定的内部样板,需要构造控件,而不是 winforms 中的控件。
-
嗯,这就是为什么 UserControl 有一个构造函数。如果您需要创建另一个类的对象,请在构造函数中执行此操作,避免使用稍后在不可预测的时间运行的事件。
-
IsHandleCreated 没问题。也似乎是 Created 属性。您是否愿意将您的评论更改为答案,以便我相信您?谢谢。
-
我会跳过,我并不特别在意这是必要的。
标签: .net winforms user-controls