2015-01-08 84 views
0

你好,我有一個主窗體(Form1)和子窗體(Form5)。如果我第一次點擊一個按鈕,我希望它打開一個新窗體。但是,如果被點擊它的形成,我將填好的數據,第二次我想它來打開我開設了第一時間的形式,控股(文本框等)。這是我有: .cpp文件:從父窗體子窗體去,而無需創建gcnew形式

System::Void Form1::button5_Click(System::Object^ sender, System::EventArgs^ e){ 
formclick++; 

if (formclick == 1) 

{ 
     Form5 ^dos1 = gcnew Form5(this, MyArray, MyArray1); 

    dos1->Show(); 
} 

if (formclick==2) 
{ 


      otherform->Show(); 
} 

Form1.h文件:

> Form1(System::Windows::Forms::Form^Form5) 
>   { 
>   
>   
>    otherform = Form5; 
>    InitializeComponent(); 
>   }   public: System::Windows::Forms::Form^otherform; 

但是我得到的錯誤: 型 'System.NullReferenceException' 未處理的異常發生在系統.Windows.Forms.dll

其他信息:對象沒有設置爲一個對象的一個​​實例。

TIA

+0

該構造函數你寫的是從來沒有使用過,所以「otherform」將始終nullptr。 Kaboom當然。當它是nullptr時創建一個新對象。您需要訂閱FormClosed事件才能可靠地將其設置回nullptr。然後在Form5中實現FormClosing來隱藏它。 –

回答

0

要存儲在button5_click功能(在dos1變量)的本地範圍的新創建的形式,這意味着它是免費時,函數存在要被從內存中刪除。

你給的代碼摘錄是有點混亂,但它可能是足以讓你點擊funtion更改爲以下:

System::Void Form1::button5_Click(System::Object^ sender, System::EventArgs^ e){ 
    if (!otherForm) 
    otherForm = gcnew Form5(this, MyArray, MyArray1); 
    else 
    otherform->Show(); 
} 

代碼沒有測試過,但主要的是你需要將新創建的表單存儲在類成員中,而不僅僅是本地的點擊功能!

問候 即使

+0

感謝那個Holroy,工作!我想知道如果我想自動填寫表單5中的點擊框,我該怎麼做? – AmyC

+0

例如 otherform-> checkedListBox1->項 - >添加(gcnew字符串(緩衝液)); – AmyC

+0

很高興幫助。您的評論是另一個問題,可能會在Stack Overflow中使用單獨的問題。然而,你可能會從[這裏]一些提示(http://www.codeproject.com/Tips/196341/CheckList-Box-and-List-Box)。您的代碼看起來會/可能會添加一個新項目到其他窗體的檢查列表中。請使用評論來評論,而不是提出新的問題! :-) – holroy

相關問題