【问题标题】:Giving focus back to main form将焦点返回到主要形式
【发布时间】:2011-08-26 15:35:38
【问题描述】:

我有一个有两种形式的 C# 应用程序。

第一个是主窗体,应该始终打开。

第二个是用户可以启用的预览窗格。

当用户选择显示预览窗格(菜单选项)时,预览窗格被打开。

这是我想要的。

但是我想阻止预览窗格获得焦点。否则,如果用户想要访问菜单(位于主窗体上),他们首先单击并且看起来什么都没有发生(但实际上焦点从预览切换到主窗体)。 只有在第二次点击后,他们才能访问菜单。

所以我认为我有一个非常简单的解决方案:

如果预览获得焦点,只需将焦点设置到主窗体。

但是,我似乎无法从预览窗格访问主表单。

为了显示预览窗格,我只需(在主窗体上):

QRcodeGenerator.QrCodePreview preview = new QRcodeGenerator.QrCodePreview();
preview.show();

我试图通过(在预览窗口上)将焦点放回主窗体:

private void QrCodePreview_GotFocus(object sender, EventArgs e)
{
    QrCodeGenerator.QrCodeSampleApp.focus();
}

但如前所述,我似乎无法访问它。

【问题讨论】:

  • 为照片和悲伤的脸+1,希望这些答案对你有帮助,它们听起来对我来说是正确的,但你的悲伤让我微笑是不是错了=D
  • @CodeBlend:这不仅是错误的,而且是心理问题。它被称为:反社会 :)

标签: c# focus setfocus


【解决方案1】:

您需要将主窗体的实例传递给子窗体。因此,在调用 show 之前设置的预览表单上创建一个属性。然后从预览表单的实例中访问主表单的那个实例

【讨论】:

  • @mkcc049:我最终得到了你的答案和 Arun 的结合。
  • 是的,我打算建议使用他的调用方法并将 Parent 属性包装在您自己的一个转换为正确的类型中,这样您就可以访问父表单的所有成员。
【解决方案2】:

如果你调用

preview.show();

作为

preview.show(this);

您可以使用 preview.Parent 访问预览对象内的主窗体。

【讨论】:

  • 我试过这个,但它不起作用。即使我修正了你的错字。 preview.Parent 应该是 this.Parent 我认为如果在预览窗格中使用。
  • 我最终得到了您的答案和 kmcc049 的组合。
  • 对不起,应该是 this.Parent 在预览对象中。谢谢!
  • 我意识到我在指向错误的属性时犯了一个错误。要使用的属性是“所有者”,而不是“父母” - 抱歉!
【解决方案3】:

你可以试试,

对于 Form1 来说,

public static Form1 Current;

public Form1()
{
    InitializeComponent();
    Current = this;
}

然后从预览表格,

Form1.Current.Focus();

【讨论】:

    【解决方案4】:

    使用 ShowDialog() 开始预览,然后调用 ShowDialog() 之后的下一行调用 this.Focus()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多