2011-08-26 24 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()