跳过布局事件处理程序

本文关键字:程序 事件处理 布局 | 更新日期: 2023-09-27 18:31:34

我使用布局事件处理程序将焦点设置为特定字段。因此,每次发生布局事件时,焦点都将设置为该字段。

我的问题是,当我使某些内容可见/不可见时,焦点将再次设置为我不想要的这个特定字段。

如何避免这种情况?

有没有办法说"下次跳过布局事件处理程序"?

还是应该使用另一个事件处理程序而不是布局处理程序?

我只想第一次设置它,但 Load 事件似乎没有按预期工作。

Load 事件处理程序的代码:在设计器中.cs

private void InitializeComponent()
{
    // other stuff automatically generated by windows
    this.Load += new System.EventHandler(this.myControl_Load);
    // other stuff automatically generated by windows
}

在 myControl 中.cs:

private void myControl_Layout(object sender, LayoutEventArgs e)
{
    this.myTimeEdit.Focus();
}

跳过布局事件处理程序

据我所知,您需要在首次显示窗体时聚焦特定控件。首先,您可以尝试将 TabIndex 属性设置为 0。在这种情况下,此控件将集中在显示的第一个窗体上。

还尝试将控件的焦点放在 Form.Show 事件上,而不是 Load 事件上。

您可以使用

LayoutEventArgs.AffectedProperty属性。只需检查其值是否设置为 "Visible"

private void myControl_Layout(object sender, LayoutEventArgs e)
{
    if (e.AffectedProperty == "Visible")
        return;
    this.myTimeEdit.Focus();
}