Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# winforms中的这个.ActiveControl=XControl,XControl.Focus()之间有什么不同?_C#_Winforms - Fatal编程技术网

C# winforms中的这个.ActiveControl=XControl,XControl.Focus()之间有什么不同?

C# winforms中的这个.ActiveControl=XControl,XControl.Focus()之间有什么不同?,c#,winforms,C#,Winforms,我在一个C#Winform项目上工作 我不知道他们之间有什么不同 this.ActiveControl=XControl XControl.Focus() 有时XControl.Focus()不起作用,我必须设置this.ActiveControl=XControl。我不知道为什么会这样。我很困惑,有人能帮我吗?很清楚这一点: Focus是一种低级方法,主要用于自定义控件作者。相反,应用程序程序员应该为子控件使用方法或属性,或为窗体使用方法 因此,听起来您应该设置ActiveControl属性。

我在一个C#Winform项目上工作

我不知道他们之间有什么不同

  • this.ActiveControl=XControl
  • XControl.Focus()
  • 有时
    XControl.Focus()
    不起作用,我必须设置
    this.ActiveControl=XControl
    。我不知道为什么会这样。我很困惑,有人能帮我吗?

    很清楚这一点:

    Focus是一种低级方法,主要用于自定义控件作者。相反,应用程序程序员应该为子控件使用方法或属性,或为窗体使用方法

    因此,听起来您应该设置
    ActiveControl
    属性。它可能在做一些
    Focus
    没有做的额外事情

    你可以查一查到底是什么,但这对我来说似乎是浪费时间。遵循记录的行为总是比依赖于实现细节更好

    仅凭文档中的信息和我对Windows编程的了解,我就可以很好地猜测
    Focus
    方法只是调用Win32,然而,
    ActiveControl
    属性可能有一些额外的逻辑来处理直接调用
    SetFocus
    无法工作的情况

    例如,
    SetFocus
    的链接文档非常明确地说明了一个事实,即设置焦点的窗口必须附加到调用线程的消息队列。
    ActiveControl
    属性可以解决这个问题。或者,它可能有处理嵌套控件的代码