2012-04-20 109 views
0

因此,即時通訊工作與Windows窗體,我偶然發現一個問題,當我按下一個窗體稱爲Form2窗體打開和Form1隱藏..但問題是我需要從Form1繼承Form2 Form2,但我不知道如何做到這一點... 我試圖讓類Form2從Form1繼承,但這使得Form2具有所有的控件(文本框,標籤等)。 )。那麼做到這一點的正確方法是什麼? Maby我創造了Form2 incorectly ...如何繼承Visual Studio中的窗體之間的變量,C++

這裏是如何寫表單類。

public ref class Form2 : public System::Windows::Forms::Form 
{ 

public ref class Form1 : public System::Windows::Forms::Form 
{ 

我試圖

public ref class Form2 : public System::Windows::Forms::Form, public Form1 
{ 

謝謝關注!

+0

你知道構造函數嗎? (你正在使用C++/CLI,順便說一句) – 2012-04-20 12:54:34

+0

是的,我知道什麼是構造函數,我只是很難找出在哪裏寫什麼:/ – krishkule 2012-04-20 15:16:44

回答

0

不允許從兩個基類繼承。您只能從一個類繼承,但只需要實現多個接口。試試這樣:

public ref class Form2 : public Form1 
{ 

你的情況,你不需要從兩個類繼承,因爲Form1中已經繼承System.Windows.Forms.Form中,如果窗體2繼承Form1中它也是自動的類型System.Windows.Forms的的。形成。

如果它只是一個變量,這兩個表單應該有共同點而沒有別的,爲什麼要使用繼承?因爲繼承通常意味着擴展基類,因此Form1中的所有成員/屬性/方法也都可用。因爲表單必須從System.Windows.Forms.Form繼承,所以不能使用任何其他基類。也許你應該考慮使用一個通用接口來定義公共變量作爲屬性,然後,這兩種形式都必須實現該接口。

public interface IMyForm 
{ 
    int MyValue { get; set; } 
} 

public class Form1 : System.Windows.Forms.Form, IMyForm 
{ 
    public int MyValue { get; set; } 
    ... 
} 

public class Form2 : System.Windows.Forms.Form, IMyForm 
{ 
    public int MyValue { get; set; } 
    ... 
} 

對不起,C#的語法,希望它變得清楚我的意思。如果你現在有希望與共同財產,例如參數的形式的方法,你可以簡單的做到這一點:

public void DoSomething(IMyForm form) 
{ 
    form.MyValue = 5; 
} 

而且你可以通過Form1中或窗體2的實例作爲參數。