【问题标题】:Focus() on TextBox does not workTextBox 上的 Focus() 不起作用
【发布时间】:2012-10-02 08:25:49
【问题描述】:

我有一个带有TextBox 的表单。每次文本更改时,我都会使用 TextChanged 事件创建 PDF 文件并将其加载到同一表单中的 AxAcroPDF-Object 中。这工作正常,但随后TextBox 失去焦点,并且由于某种原因,加载文件后textBox.Focus() 不起作用。

有没有人知道我可以如何安排您在刷新 PDF 的同时继续打字?

编辑:

我有另一个想法,我创建了一个单独的线程来更新 PDF,并且在 TextChanged-event 中我只设置了一个标志。但是现在我遇到了一个奇怪的错误

Unable to cast COM object of type 'System.__ComObject' to interface type 'AcroPDFLib.IAcroAXDocShim'.

【问题讨论】:

  • 我认为您应该在设计时将表单中的 .SelectedControl 设置为 TextBox 实例。您不能在表单加载器中设置焦点控件(如果我没记错的话)。抱歉,我不确定属性名称,可能是 .FocusedControl 之类的。
  • 文本框控件是否托管在组框、面板或任何其他容器中?
  • 如何加载文件?寻找文件完成加载时触发的某种事件,然后才设置焦点。否则,请尝试为此使用计时器。
  • @TheBlastOne: 找不到你想要的属性,form.controls 没有焦点。像这样
  • @Danilo Vulović:不,简单的测试表单,只有一个按钮、一个文本框和 pdf-viewer

标签: c# winforms pdf axacropdf


【解决方案1】:

试试这个:

textBox.Select();
textBox.Focus();

【讨论】:

    【解决方案2】:

    我为自己感到羞耻,我发现了一个非常非常肮脏的黑客,但它确实有效...... 我做了以下事情:

    当我在 MessageBox 中编写文本时,我会在 TextChange-Event 中重写我的 PDF。在相同的方法中,我存储了具有焦点的控件(在 PDF 对象上调用 LoadFile 时,此控件仍然失去焦点)。现在麻烦的工作来了:我实现了一个线程,它不断地将焦点设置到存储在变量中的控件上。在 TextBox 的 Leave-Event 中,我重置了变量,这样其他控件就不会被阻止。

    我知道这是一个非常肮脏的黑客,但现在我可以立即用我自己的表单“编辑”一个 pdf,这是一个不错的视觉享受;)

    感谢大家的帮助!

    【讨论】:

      【解决方案3】:

      我无法让 .Focus() 和 .Select() 工作,所以我使用了 Jquery,它运行良好。

      $(document).ready(function () {
          setTimeout(function () {
              $(".contentWrapper input")[0].focus();
          }, 100);
      });
      

      【讨论】:

        猜你喜欢
        • 2017-08-24
        • 1970-01-01
        • 2013-01-23
        • 2017-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 2013-07-03
        相关资源
        最近更新 更多