【问题标题】:WinForms UserControl How Do I Stop the control receiving focusWinForms UserControl 如何停止接收焦点的控件
【发布时间】:2011-11-07 13:22:21
【问题描述】:

我有一个自定义 UserControl,其中只包含一个 TextBox

当我将控件设置为Enabled = False 时,TextBox 被禁用但控件不是(控件仍会触发Enter 事件)。

如何确保UserControl 不会获得焦点?

我的已启用属性如下所示:

Private _Enabled As Boolean = True

Public Shadows Property Enabled As Boolean
    Get
        Return _Enabled
    End Get
    Set(value As Boolean)
        _Enabled = value
        txtTime.Enabled = value
    End Set
End Property

【问题讨论】:

  • @Hans - 删除它的问题是当 UserControl Enabled 属性更改时 TextBox 不会启用/禁用
  • 这很麻烦,启用也总是禁用任何子控件。小心 Shadows,它有回溯的本领。

标签: c# vb.net winforms user-controls


【解决方案1】:

要回答您的直接问题,您需要将 enabled 属性传递给基础对象:

public new bool Enabled {
    get { return _Enabled; }
    set {
        _Enabled = value;
        textBox1.Enabled = value;
        base.Enabled = value;
    }
}

但是...正确的方法是使用 OnEnabledChanged 覆盖:

protected override void OnEnabledChanged(EventArgs e) {
    textBox1.Enabled = this.Enabled;
    base.OnEnabledChanged(e);
}

(当您将其标记为 C# 时,我假设您可以自己转换回 VB.net)

【讨论】:

  • 谢谢 - 转换没问题。
【解决方案2】:

每个控件都有一个名为 Enabled 的属性。您不必创建自己的属性来执行此操作。

此属性继承自 Control 类,它是每个 Windows 窗体控件的基础。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2019-12-05
    • 2022-07-22
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多