【问题标题】:How to send focus to control with tabindex lower than current control in C# windows form application?如何在 C# windows 窗体应用程序中将焦点发送到 tabindex 低于当前控件的控件?
【发布时间】:2013-11-15 23:39:20
【问题描述】:

在我的 C# Windows 窗体应用程序中,我在窗体中有许多 TextBox 控件,用户可以在其中输入要保存在数据库中的数据。我希望用户能够通过向上和向下箭头将焦点更改为每个 TextBox。I可以为向下箭头执行此操作,因此当用户按下向下箭头时,焦点通过 SendKey("Tab") 设置到具有更高 tabindex 的文本框。但是我无法为向上箭头执行此操作,因此当用户按下向上箭头时,焦点设置为 tabindex 较低的文本框,有什么帮助吗??

【问题讨论】:

  • 能否请您发布更改向下箭头(工作)焦点的代码和向上箭头(不工作)的代码.然后我们可以尝试找出为什么后者不起作用
  • 如果你可以用向下箭头来做,你应该可以用向上箭头来做。听起来你必须正确地单独设置所有标签索引。如果我没记错的话.. 当您为不按顺序放置/分配控件的选项卡索引时,C# GUI 的行为很有趣.. 或者它可能是 ASP.NET 应用程序我有类似的问题.. 但是显示您尝试捕获的代码/关键事件跨度>
  • 这无济于事,但使用 UP/DOWN 来改变焦点通常不是一个好主意。例如,对于单行文本框,UP/DOWN 充当 LEFT/RIGHT,因此我不建议将行为更改为充当 TAB。
  • 检查我的答案,我刚刚测试过。
  • 它已经这样工作了,不要帮忙。

标签: c# .net


【解决方案1】:

您可以使用 Control.SelectNextControl() 而不是使用 SendKey() ,并使用 forward=false 向后退。

【讨论】:

    【解决方案2】:

    你能不能试试SendKeys.Send("+{TAB}"); 之类的东西,它会模拟 Shift 键 + Tab 所以应该带你回去

    【讨论】:

      【解决方案3】:

      在文本框之间移动的最佳方式是使用 Control.SelectNextControl + 前向参数。

      检查下面的代码,每次用户在表单上按下键时,都会激活下一个控件:

      private void Form1_KeyDown(object sender, KeyEventArgs e)
          {
              Control ctl;
              ctl = (Control)sender;
              if (e.KeyCode == Keys.Down )
              {
                  ctl.SelectNextControl(ActiveControl, true, true, true, true);
              }
              else if (e.KeyCode == Keys.Up)
              {
                  ctl.SelectNextControl(ActiveControl, false, true, true, true);
              }
          }
      

      不要忘记将表单的 keypreview 设置为 true。

      【讨论】:

      • 请注意:要使用此表单的 KeyPress 必须设置为 true :)
      【解决方案4】:

      您可以发送 Shift+Tab,请参阅有关如何使用 SendKeys 执行此操作的文档

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

      【讨论】:

        猜你喜欢
        • 2011-05-02
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2013-04-04
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多