3

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

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

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

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

这就是我想要的。

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

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

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

但是,看起来我无法从预览窗格访问主表单。

要显示预览窗格,我只需执行以下操作(在主窗体上):

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

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

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

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

表格不见了

4

4 回答 4

2

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

于 2011-08-26T15:39:05.197 回答
2

如果你调用

preview.show();

作为

preview.show(this);

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

于 2011-08-26T15:41:28.987 回答
1

你可以试试,

对于 Form1,

public static Form1 Current;

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

然后从预览表格中,

Form1.Current.Focus();
于 2011-08-26T15:43:36.587 回答
0

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

于 2017-11-27T19:48:31.380 回答