我在其中有一个加载控件的对话框。每个和evey控件将在加载序列期间填充,并且可能需要一段时间才能完全填充。同时,我不想让用户点击任何控件。换句话说,我想禁用控件接收事件,我不想禁用控件(因为它可能看起来很奇怪)。另外,我不想订阅和取消订阅事件定期间隔。有没有办法阻止控件在短时间内收听事件?
Sudarsan Srinivasan
答案 0 :(得分:4)
禁用控件的重点是向用户传达控件无法在特定时间使用。这是用户已经学习并习惯的惯例,因此我建议遵循这一惯例。不这样做可能会使用户感到困惑。
最简单的方法是禁用控件所在的容器,而不是禁用每个控件。更好的方法(或者至少是我喜欢的方式)是有一个方法可以根据UI所处的状态来控制控件的Visible
和Enabled
属性。
答案 1 :(得分:2)
最简单的方法是将控制填充移出加载事件(如果可能)。然后在Load中做类似的事情:
private bool _LoadComplete;
void OnFormLoad(Object sender, EventArgs e)
{
_LoadComplete = true;
InitializeControls();
_LoadComplete = false;
}
void InitializeControls()
{
// Populate Controls
}
void OnSomeControlEvent()
{
if (_LoadComplete)
{
// Handle the event
}
}
编辑其他一些想法:
答案 2 :(得分:1)
不幸的是,我知道的唯一方法是拥有一个类变量(称为_loading),并在每个控制处理程序中执行以下操作:
If (! _loading )
{
...
}
加载完成后,在加载代码集_loading = true;
中。
答案 3 :(得分:0)
如果您只想禁用用户输入,则可以将表单的Enabled
属性设置为false。
这样可以阻止用户输入任何表单的控件,而不会改变控件的外观;它是ShowDialog
方法在内部使用的技术。