2011-08-26 53 views
3

我有一个C#应用程序有两种形式。重点回到主窗体

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

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

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

这是我想要的。

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

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

如果预览曾经获得焦点只是将焦点设置到主窗体。

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

要显示预览窗格我简单地做(在​​主窗体上):

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

+0

+1为图片和悲伤的脸,希望这些答案可以帮助你,他们听起来对我,但它是错的你的悲伤让我微笑= D – Coops

+0

@CodeBlend:这不仅是错误的,它是精神上的东西。它被称为:sociopathy :) – PeeHaa

回答

2

youll需要的MainForm的实例传递到子窗体。因此,在调用show之前,请在您设置的预览窗体上创建一个属性。从预览形式

+0

@ mkcc049:我结束了你的答案和Arun的组合。 – PeeHaa

+0

是的,我打算建议使用他的调用方法,并将自己的父属性转换为正确的类型,以便您有权访问父窗体的所有成员。 – kmcc049

2

的情况下如果调用

preview.show(); 

preview.show(this); 

您可以preview.Parent访问预览对象中的主要形式,然后进入主窗体的该实例。

+0

我试过这个,但它不起作用。即使我修复你的错字。 'preview.Parent'应该是'this.Parent',如果在预览窗格中使用,我想。 – PeeHaa

+0

我结束了你的答案和kmcc049的结合。 – PeeHaa

+0

对不起,是的,它应该是this.Parent当里面的预览对象。谢谢! – Arun

0

你可以试试,

为Form1做,

public static Form1 Current; 

public Form1() 
{ 
    InitializeComponent(); 
    Current = this; 
} 
从预览的形式

然后,

Form1.Current.Focus(); 
0

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