2011-10-04 35 views
0

我有一個代碼塊重複使用「for」循環,並且每個循環構造一個窗體來顯示一些文本。有些東西像下面的簡寫代碼。C#打破了從單獨的類/方法循環

Main() 
{ 

For (int x: x<=20; x++) 
{ 

createform(string[x]); 
} 

} 

因此,對於每個循環來說,一個不同的字符串被傳遞給一個將構造如下形式的方法。

createform void (string input_) 

{ 

... 
code to build form and add a button "cancelbutton" 
form.text = intput_ 
.... 
form.cancelbutton.Click += // and I want this to cause the original loop to end.... 

} 

沒有我知道我可以使用該按鈕來使int x大於20,並且將結束循環,但我真的不知道該最大值將是什麼,因爲這是動態的。再次我可以解決這個問題,並做同樣的事情,但它看起來有點「凌亂」。

有沒有更合適的方法,以使點擊按鈕退出循環。如果Createform方法與main單獨分類,那麼這有什麼區別?

+1

該循環將完成前任何人都可以點擊該按鈕 – Joe

+0

沒有如果有一個顯示對話框的語句來顯示它不會的形式:) – DevilWAH

+0

所以真的應該叫做「CreateAndShowForm」? – Polyfun

回答

2

只需添加一個變量和代碼的Click事件:

static bool clicked; 

Main() 
{ 
clicked = false; 
For (int x: (x<=20) && !clicked; x++) 
{ 

createform(string[x]); 
} 

} 

public static void Click_Detector(object sender, EventArgs e) { 
    clicked = true; 
} 

你的日常需要做這樣的事情:

createform void (string input_) 
{ 

... 
code to build form and add a button "cancelbutton" 
form.text = intput_ 
.... 
form.cancelbutton.Click += MainClass.Click_Detector; 

} 
+0

歡呼,似乎確實是合乎邏輯的方式,並以正向的方式來做到這一點。我確信下面的Tigran方法會使用該方法返回True/False。 Boh似乎是完美的。 :) – DevilWAH

1

您不應該使用循環來創建每個表單。假設你有一個提交按鈕。每次用戶點擊提交時,都應該明確顯示下一個表單。這樣,如果用戶點擊取消,則不必擔心其他表單。

+0

在這種情況下點擊提交發送一串字符串給用戶顯示,(表格是一個榮耀的分機框)。不希望他們不得不點擊提交中間的每個表單,或者關閉當前表單並且下一個表單出現,或者點擊cancle並分解。 – DevilWAH

+0

@DevilWAH,我的指示仍然有效。在提交按鈕後顯示下一個表單,而不是在任何操作關閉當前表單後執行。 – mikerobi

1

這使我的心是第一個解決方案:方法真/假,並在辦理入住手續的foreach其返回值,如果假=>突破的返回值。

+0

現在,這是非常簡單! – DevilWAH

+1

@DevilWAH:如果你的函數參數不一樣,那個函數的執行時間也不一樣。如果您希望儘可能快地反饋用戶的行爲,那麼您可以儘可能深入地理解用戶的行爲。 – Tigran

3

如果你的循環從0到20(或甚至超過9000),用戶將不能夠點擊一次取消按鈕。實際上,因爲它全部在一個線程上,所以循環將在UI響應點擊之前完成,但也許我誤解了。你可以在每次進入循環時檢查一個布爾標誌,並且一旦用戶點擊按鈕就將其設置爲false?

+0

我猜想簡單的循環只是爲了教學目的。我可能是錯的。 – jp2code

1

你的僞代碼不說明您是如何顯示的的CreateForm形式()。這是一種模態還是非模態?它必須是模態的,否則,你只需要繼續創建表單,直到母牛回家。請記住,單擊按鈕之前添加處理程序並不實際執行處理程序方法。

假設您的單擊事件處理程序可以將x的值設置爲大於20,但由於您說過不確定最大值是多少,因此可以使用布爾標誌來控制do循環,並且您的createform ()可以設置標誌的狀態。

我建議你重新考慮你的問題的空間,因爲這總方針似乎真的令人費解。我不明白你的用戶界面,但是你的目的似乎是讓用戶控制一個無限循環的退出,就像那些問你「你想要冒險是/否」的老RPG一樣,會繼續詢問你,直到你點擊「是」。這些都毫無意義和令人困惑。

+0

沒有endlles,但可能是10或20個週期。每一個循環都比簡單地顯示一個表單要複雜得多,這純粹是爲了讓用戶檢查每個循環的輸出(循環體積從通過各種方法輸入的日期創建輸出結果輸出)。所以每個配置都會顯示出來,有三個選擇:「保存」,「刪除」和「取消」。有些人完全進入了蠕蟲事件,我需要回去修復它,然後再繼續。 – DevilWAH

1

添加一個布爾值到類和具有click事件設置的布爾值。然後你可以從循環中斷開。但是,如果您的真實世界使用是上述問題,我會同意mikerobi給出的答案。

+0

我給出的同樣的答案,用代碼示例。 – jp2code

+0

是的,你的代碼示例更好地解釋了它,我很着急去開會,所以我跳過了示例。我可能會在ShowForm類中暴露一個事件,而不是讓事件回調到調用類的靜態方法。只是爲了分開擔憂。 – Druegor