2012-01-12 67 views
3

我仍然在C#的學習階段,如果你認爲這是一個愚蠢的問題;-)打開一個新的窗口,但並不總是它的一個新實例

在該項目中,所以不要拍我我有主窗口,一個被稱爲「窗口1」

在主要的新窗口,我做的按鈕時,會去窗口1這樣的:現在

private void Button_Click(object sender, RoutedEventArgs e) 
{ 

    Window1 W1 = new Window1(); 
    W1.Show(); 
    this.Close(); 

} 

,這正常工作,創建一個window1的新實例並在關閉主窗口時顯示它。

但是,這裏有一個問題:在window1中,一些東西可以改變,就像用戶點擊一個按鈕,然後當一個新按鈕顯示時該按鈕被隱藏。

而且我做了窗口1後退按鈕,使用上述同樣的代碼,回到主窗口(所以現在新的窗口1,但新的主窗口)

但在這一點上,我在主點擊,再按一次該按鈕以轉到window1,那個window1將回到默認狀態。這對我來說似乎合乎邏輯,因爲它在使用按鈕時會創建一個新實例。

但是我應該怎麼做,如果我想再次打開window1的第一個實例,那個已經被用戶更改過的實例?

首先我想將Window1 W1 = new Window1();放在按鈕方法的外面,但是由於那個「後退」按鈕,這也不起作用。

我希望我解釋得很清楚我想做什麼。

有什麼想法嗎?

=====================

EDIT 1:

使用從 「chrfin」 某些部分genarate錯誤代碼示例中,像「可見=真」部分 也許這是因爲我使用快遞2010年,或者是因爲我使用WPF而不是表單?

Window1 W1 = null; // Initialise Field. 

private void CalcTabel_Click(object sender, RoutedEventArgs e) 
{ 

    if (W1 == null) 
    { 
     W1 = new Window1(); 
     W1.MainWindow = this; //ERROR 
     W1.Show(); 
    } 
    else 
     W1.Visibility = Visibility.Visible; 
    this.Visibility = Visibility.Hidden; 
} 
在窗口1

public MainWindow w1 { get; set; } 

private void Quit_Click(object sender, RoutedEventArgs e) 
{ 
    w1.Visibility = Visibility.Visible; 
    this.Visibility = Visibility.Hidden; 

} 

現在我得到的主要部分的錯誤是: 「WpfApplication1.Window1」不包含'的定義MainWindow'接受類型'WpfApplication1.Window1'的第一個參數可以找到(你是否缺少using指令或程序集引用?)

just刪除該錯誤行,將導致get,set部分不會得到任何東西。

有什麼想法?

=====================

編輯1:

再次感謝名單 「chrfin」 得到它現在的工作:)

主:

Window1 W1 = null; // Initialise Field. 

private void CalcTabel_Click(object sender, RoutedEventArgs e) 
{ 

    if (W1 == null) 
    { 
     W1 = new Window1(); 
     W1.Hoofdmenu = this; 
     W1.Show(); 
    } 
    else 
     W1.Visibility = Visibility.Visible; 
    this.Visibility = Visibility.Hidden; 
} 
在窗口1

public MainWindow Hoofdmenu { get; set; } 

private void Quit_Click(object sender, RoutedEventArgs e) 
{ 

    Hoofdmenu.Visibility = Visibility.Visible; 
    this.Visibility = Visibility.Hidden; 

} 
  • 解決 -
+0

也許juste設置可見false? – 2012-01-12 08:52:38

+0

我認爲你可以'隱藏'窗口窗體並在以後將它帶回 – V4Vendetta 2012-01-12 08:59:55

+0

+1:在SO上,沒有這樣的事情是愚蠢的問題,只是嚴重問的問題。每個人都必須學習,只要他們努力使自己的問題清楚明白(你有) – 2012-01-12 11:22:08

回答

2

你可以做這樣的事情:

Window1 w1 = null; 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    if(w1 == null) 
    { 
     w1 = new Window1(); 
     w1.MainWindow = this; //create this property - see below 
     w1.Show(); 
    } 
    else 
     w1.Visible = true; 

    this.Visible = false; 
} 

和內窗口1:

public MainWindow MainWindow { get; set; }  

private void ButtonBack_Click(object sender, RoutedEventArgs e) 
{ 
    this.Visible = false; 
    MainWindow.Visible = true; 
} 
+0

這確實是我一直在尋找的東西。謝謝 – Dante1986 2012-01-12 09:00:49

+0

...但是,當你想關閉應用程序時不要忘記關閉窗口...... – ChrFin 2012-01-12 09:07:56

+0

......在這種情況下,有沒有像關閉所有的東西?或退出按鈕我需要關閉他們一個接一個? – Dante1986 2012-01-12 11:13:01

0

你也可以取消該事件。

0

做一個靜態屬性來存儲W1的引用在它和Button_Click方法檢查是否有一些值使用它否則創建一個新的;

另一種選擇是查看可通過Application.Current.Windows訪問的應用程序對象中的打開窗口。

0

那麼這裏可以有多個解決方案。

1)您可以保留用戶在Windows1中所做的更改。無論何時您重新啓動Window1,都會傳遞設置或先前的更改,以便Window1可以根據最後一個狀態重新進行自我調整

2)不是始終創建Window1的新實例,而是關閉後退按鈕使用顯示和隱藏,使窗口1可見和不可見的用戶

1

有很多方法可以達到預期的效果。我會使用的方法如下:

Window1 W1 = null; // Initialise Field. 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    if (W1 == null) W1 = new Window1(); 
    W1.Show(); 
    this.Close(); 
} 
+0

Thanx!我看到「chrfin」更詳細一點,不過謝謝你! – Dante1986 2012-01-12 09:01:33