none
c# 自己做的控件不接收键盘输入 RRS feed

  • 问题

  • 使用C#自己做的控件上有一个TextBox框A,使用Focus或select使其获得焦点,将该控件集成到工程中后,以shell方式启动该工程,光标在A上闪烁但是使用键盘输入信息时不能显示在A上,使用鼠标再点击一下A,就能够输入了,请问是什么原因?谢谢!
    guiwenyang
    2010年4月9日 7:05

答案

  • 你好!

    尝试在你的 Form Load 事件加入下面的代码。

    // 延时 200 毫秒执行。
    using (BackgroundWorker backgroundWorker = new BackgroundWorker())
    {
        backgroundWorker.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs workerEventArgs)
        {
            Thread.Sleep(100);
        });
    
        backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(delegate(object o, RunWorkerCompletedEventArgs erg)
        {
            this.Activate(); // 激活窗体。
            this.textBox2.Focus(); // 为你的 TextBox 设置焦点。
        });
    
        backgroundWorker.RunWorkerAsync();
    }


    知识改变命运,奋斗成就人生!
    2010年4月13日 3:15
    版主

全部回复

  • 这个问题往往是由于放置控件的窗体中有默认控件 (TabIndex = 0),或 AcceptButton,您的 TextBox 是嵌入到 Panel 之类的东西上的?如果是这样,先要让 Panel 获得焦点,还有注意一下控件暴露的属性有没有 TabIndex 或者 TabStop 之类的东西。
    Mark Zhou
    2010年4月9日 7:24
  • 这个问题往往是由于放置控件的窗体中有默认控件 (TabIndex = 0),或 AcceptButton,您的 TextBox 是嵌入到 Panel 之类的东西上的?如果是这样,先要让 Panel 获得焦点,还有注意一下控件暴露的属性有没有 TabIndex 或者 TabStop 之类的东西。
    Mark Zhou

    我感觉也是这个原因,你在自己写控件的时候要注意,你有输入框的时候,它一定要是默认的控件,要不然在应用的自己的工程中时,你按tab键时,你自己做的控件得到光标时并不是输入框得到焦点了,所以会有你现在的问题。
    2010年4月9日 7:28
  • 这个问题往往是由于放置控件的窗体中有默认控件 (TabIndex = 0),或 AcceptButton,您的 TextBox 是嵌入到 Panel 之类的东西上的?如果是这样,先要让 Panel 获得焦点,还有注意一下控件暴露的属性有没有 TabIndex 或者 TabStop 之类的东西。
    Mark Zhou

    我感觉也是这个原因,你在自己写控件的时候要注意,你有输入框的时候,它一定要是默认的控件,要不然在应用的自己的工程中时,你按tab键时,你自己做的控件得到光标时并不是输入框得到焦点了,所以会有你现在的问题。
    2010年4月9日 7:28
  • 这3点我都查看过了,都符合要求,但是还是不行。
    guiwenyang
    2010年4月13日 1:26
  • 你好!

    尝试在你的 Form Load 事件加入下面的代码。

    // 延时 200 毫秒执行。
    using (BackgroundWorker backgroundWorker = new BackgroundWorker())
    {
        backgroundWorker.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs workerEventArgs)
        {
            Thread.Sleep(100);
        });
    
        backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(delegate(object o, RunWorkerCompletedEventArgs erg)
        {
            this.Activate(); // 激活窗体。
            this.textBox2.Focus(); // 为你的 TextBox 设置焦点。
        });
    
        backgroundWorker.RunWorkerAsync();
    }


    知识改变命运,奋斗成就人生!
    2010年4月13日 3:15
    版主