2011-09-29 137 views
1

我有一個表單(AddNewCamper),它包含一個文本框和一個提交按鈕。以不同的形式,我試圖寫:調用按鈕單擊事件方法

if (submit button is clicked) 
    do stuff 

在該按鈕實際位於的窗口中,我創建了一個單擊事件。所以我想我試圖調用if語句內的click事件(它位於與click事件所在位置不同的窗口中)。

這是我有:

AddNewCamper camp = new AddNewCamper(); 
camp.Show(); 

// This is where I'm confused. How do I say if this button is clicked, 
// or how do i call its click event that's located in AddNewCamper? 
if (camp.btnNewSubmit_Click_1()) 
{ 
    Camper person = new Camper(camp.txtNewFirstName.Text); 
    camp.txtNewFirstName.Text = person.getName(); 
    c.testListBox.Items.Add(person.getName()); 
    campersFrame.Content = c; 
} 
+0

好吧,如果你創建了一個按鈕,然後雙擊該按鈕,它會帶你到代碼視圖,以便您可以在一些代碼編寫爲你想要點擊按鈕時發生的事情。在我的項目中的另一個地方,我試圖編寫「如果該按鈕被點擊」所以在我的if(上面的語句)中,我試圖說如果用戶單擊該按鈕。 Idk如何編寫if(語句)。對不起,我只是不知道該怎麼問。 – TMan

+0

你是說你只是想直接調用'AddNewCamper.btnNewSubmit_Click_1()',是不是? – Kev

+0

爲什麼不把你的代碼放在AddNewCamper的'AddNewCamper.btnNewSubmit_Click_1()'事件處理程序中? – Kev

回答

1

據我瞭解你的問題,似乎你想要顯示在父窗體中的一些內容時提交按鈕單擊AddNewCamper窗體。以下是您可以做到的一種方式。

將一個公共方法添加到ParentForm中以顯示(或刷新)一次提交從AddNewCamper單擊的內容。

在ParentForm

public RefreshCamper(string firstName) 
{ 
    Camper person = new Camper(camp.txtNewFirstName.Text); 
    camp.txtNewFirstName.Text = person.getName(); 
    c.testListBox.Items.Add(person.getName()); 
    campersFrame.Content = c; 
    // ETC... 
} 

傳遞ParentForm實例的形式AddNewCamper在構造器。

private ParentForm _parentForm; 

public AddNewCamper(ParentForm parentForm) 
{ 
    _parentForm = parentForm; 
} 

private void btnNewSubmit_Click_1() 
{ 
    _parentForm.RefreshCamper(txtNewFirstName.Text); 
} 

從ParentForm中創建一個AddNewCamper實例,如下所示。

AddNewCamper camp = new AddNewCamper(this); 
camp.Show(); // Or ShowDialog if you want Model.. 

或者您可以用同樣的方式在ParentForm中設置一個標誌來標識提交按鈕被單擊。

+0

嘿謝謝你給我看這個。我相信我很接近,但是當我點擊提交時,程序就爆炸了。大聲笑它開始調試,並立即指向你有什麼在btnNewSubmit_Click1()方法。我不確定爲什麼 – TMan

+0

它表示NullReferenceException未被用戶代碼取代。 – TMan

+0

未將對象引用設置爲對象的實例。 – TMan

0

轉到按鈕的事件處理程序(在Visual Studio中的表單視圖,在屬性網格發現包裝盒上的點擊事件,雙擊在它旁邊,這會把你帶到它[或者如果它還沒有被創建,就創建它])從這裏開始,你需要調用你想在用戶按下按鈕時要做的方法。看看你提供的代碼,我假設你想要做的是等待if語句,直到用戶按下按鈕爲止。不幸的是,除非此代碼位於單獨的線程中,否則如果您要等待用戶按下按鈕,程序將掛起。相反,你必須弄清楚當用戶按下按鈕時你想要發生什麼,把它放在一個方法中,並讓按鈕事件處理程序調用該方法。

0

當你有「營」的形式顯示,通過這樣父窗體的引用:

camp.Show(this); 

然後,當有人點擊了「營」形式的提交按鈕,你可以參考一下使用所有者變量,做你想做的事情,形式類似這樣的父窗體:

((ParentForm)owner).SomeMethod(parametersToPassToParentForm); 
+0

是的,這是我之前想要做的。我很困惑所有者變量是什麼? – TMan

+0

它是一個變量(類型對象),在您的ParentForm繼承的基類Form中,因爲它是一個對象類型變量,所以您需要按順序將它轉換回ParentForm類型使用它當你用camp.Show(this)顯示另一個表單時,「this」會傳遞一個對你存儲在變量所有者中的ParentForm的引用。 –