2016-11-29 45 views
0

在這個簡單的代碼中,我希望知道如何使用其實際地址(而不是this.Hide())調用表單,以便即使表單當前未處於活動狀態,也可以關閉/隱藏表單。我的主要目的是隱藏Form2以單擊按鈕打開Form1,然後永久關閉Form2如何在C#中調用其地址?

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
     Form2.Hide(); // This doesn't work 
    } 
} 
+0

那麼,誰持有參考到'Form2'? –

+0

P/Invoke ........ –

+0

看到我的兩個表單項目:http://stackoverflow.com/questions/34975508/reach-control-from-another-page-asp-net – jdweng

回答

2

與Visual Basic不同,C#不保留表單引用。你需要自己保留它們。 Form2只是類型 - 它沒有「默認參考」。主要思想不是「每種表單類型都有一個實例,隱藏並根據需要顯示」 - 它是「表單與其他任何對象一樣 - 以與其他對象相同的方式創建和處理它們」。通常的工作流程不是Form1.Hide(); Form2.Show(); - 更像是Application.Run(new MainForm()); ... using (var form = new Form1()) { form.ShowDialog(); }。這並不意味着VB方法不能用於C# - 它只是意味着你必須自己實現它(或切換到VB.NET)。如果它是有道理的 - 設計已經有一段時間了,所以確保你有一個好的想法,你爲什麼以這種方式做事,而不僅僅是慣性。

這聽起來像你真正的問題是,你試圖實現某種嚮導,或通過多種形式的流。這意味着你應該使用嚮導,或者改變整個應用程序的構建方式。請致電program.cs。瞭解它的功能。當傳遞給Application.Run的表單關閉時,整個應用程序關閉。有很多方法可以重寫,但我們無法以一般方式真正幫助您 - 我只能告訴您,如果您的應用程序不適合「主窗口+其他窗口」模型,則默認的應用程序設置爲不會爲你工作。

有人應該對您的兩種表格的生命週期負責。我們無法真正地告訴你們 - 可能是其中一種形式,也許是主要形式,它以系列中的兩種形式打開模態對話框。我們根本無法分辨 - 這是您需要解決的設計問題。但負責人也將在正確的時間點處理關閉和打開個人表格。

+2

使用'this' ..... –

+0

如何/我可以在哪裏給我一個參考? – Zenektric

+0

@Zenektric - 「How」<---通過使用窗體的構造函數來創建一個新實例。 「哪裏」< - 你想要的任何地方。 –

1

thisForm2實例中的實際「地址」。如果你想從別的地方,你需要使用引用來調用它隱藏

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
     Hide(); // or this.Hide() 
    } 
} 

:那麼,把它藏在窗體本身做到這一點。像:

var f = new Form2(); 
f.Show(); 
// Do stuff with form 
f.Hide(); 
5

您不需要參考,因爲您已經在窗體本身。 this,它指向的上下文類的當前實例,會做什麼:

this.Hide(); 

或者,因爲它知道上下文:

Hide(); 
+3

這是最好的答案,不知道爲什麼其他人都過分複雜的事情。 – ThePerplexedOne

+0

我隱藏form2來打開form1,然後我需要form2來關閉,而不是活動的,所以我不能用它來關閉它。 – Zenektric

+1

你的代碼顯示從Form2中隱藏'Form2'。這樣做。沒有「積極的一方」或類似的東西。只是目前。 –

1

如果您在Form2工作只是用this

public Form2() 
    { 
     InitializeComponent(); 
     this.Hide(); 
    } 

您還可以使用:

public Form2() 
     { 
      InitializeComponent(); 
      Hide(); 
     } 

你不需要調用類似Form2 form = new Form2();只有當你以另一種形式的工作,例如像這樣:

public Form1() 
     { 
      Form2 form = new Form2(); 
      form.Show(); //or form.Hide(); 

     } 
相關問題