【问题标题】:How to remove a LinkLabel as a tab stop when using .NET 3.5?使用 .NET 3.5 时如何删除 LinkLabel 作为制表位?
【发布时间】:2014-09-09 23:39:36
【问题描述】:

当用户在字段中切换时,他们必须通过 LinkLabel 来切换到下一个字段。我宁愿他们直接从一个领域到另一个领域,而不是在 LinkLabel 上停留。但是,在 .NET 3.5 中,LinkLabel 没有设置为 false 的 TabStop 属性。升级到 .NET 4.0 或 .NET 4.5 现在不是一种选择。

我尝试了另外两种可能的跳过 LinkLabel 的方法,但这些方法不起作用。

  1. 将 LinkLabel 放在面板上,并将面板上的 TabStop 属性设置为 false。 LinkLabel 仍会被标记到。

  2. 处理 LinkLabel 上的 Enter 事件并使用 SendKeys 或一些类似的废话继续下一个控件。这不起作用,因为它使 Click 事件停止触发。

我还考虑将表单上所有 LinkLabels 的 TabIndex 设置为比其他控件高得多的值。但是,这也行不通

每个字段都是面板上带有标签的文本框或组合框。 ComboBox 字段在面板上有一个附加控件:一个显示“编辑项目”的 LinkLabel。这些面板中的每一个都位于主 FlowLayoutPanel 上。

如果我错了,请纠正我。我理解嵌套面板上控件的选项卡顺序的方式是每个面板都有自己的选项卡顺序。然后根据每个Panel的TabIndex依次组合每个的Tab顺序,确定窗体上控件的有效Tab顺序。正确的?因此,在我看来,将每个 LinkLabel 的 TabIndex 设置为 200 高的数字并不能解决最初的问题。

有人见过这个挑战吗?你是怎么解决的?我觉得我可能必须做一些激烈的事情,比如将 LinkLabel 控件子类化。你会怎么做?

【问题讨论】:

    标签: c# .net winforms .net-3.5 linklabel


    【解决方案1】:

    这是一个错误,LinkLabel 继承自 Label,它没有有意义的聚焦支持。因此该属性隐藏在“属性”窗口中,就像标签一样。 .NET 4.0 纠正了这个错误。

    这不是一个真正的问题,该属性仍然可用。只需在代码中设置它:

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            linkLabel1.TabStop = false;
        }
        // etc..
    }
    

    请注意,该属性对于 IntelliSense 也是隐藏的,所以不要对您没有获得帮助感到惊讶。

    【讨论】:

    • 太棒了。这就是我喜欢stackoverflow的原因。谢谢。
    【解决方案2】:

    使用LinkLabel,我们应该通过代码设置TabStop属性,不能通过更改属性窗口来设置。

    当 VisualStudio 从 GUI 生成代码时,它会这样做:

    this.linkbThread.TabIndex = 31;        //first
    this.linkbThread.Text = "My URL";      //second
    

    但是MSDN说:

    “但是,请注意,将新链接添加到 Links 集合会 自动将 TabStop 属性再次设置为 true。"

    因此,如果我们在属性窗口中更改 TabStop 属性,或者在分配 linkbThread.Text = "My URL" 之前插入代码 linkbThread.TabStop = false ,则不是没用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 2015-03-20
      • 2019-04-30
      • 1970-01-01
      相关资源
      最近更新 更多