把重点放回主要形式

时间:2011-08-26 15:35:39

标签: c# focus setfocus

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

第一个是应始终打开的主要形式。

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

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

这就是我想要的。

但是我想阻止预览窗格获得焦点。否则,如果用户想要访问菜单(在主窗体上),他们首先点击它,看起来没有任何事情发生(但实际上焦点从预览切换 - > main)。 只有在第二次点击后,他们才能访问菜单。

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

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

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

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

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

我尝试通过执行(在预览窗口中)将焦点放回主窗体:

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

但如上所述,我看起来无法访问它。

form gone http://s2.postimage.org/6ncwyxmnm/looking_for_my_main_form.png

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

如果您调用

preview.show();

作为

preview.show(this);

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

答案 2 :(得分:0)

你可以试试,

Form1 do,

public static Form1 Current;

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

然后从预览表格中

Form1.Current.Focus();

答案 3 :(得分:0)

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