2011-09-08 42 views
-2

聽起來很愚蠢,但這種情況發生在我身上。C#WinForms:執行超過預期的函數

我激活了一個函數,並且它完成了它的工作,並且在它完成後它再次啓用它自己。換句話說,該功能激活兩次,而不是一次。我試圖找出爲什麼通過調試,但我沒有找到原因。

當我點擊面板此功能激活上:

private void Play(object sender, EventArgs e) 
{ 
    Play0(MousePositionX, MousePositionY); 
    if (swich_player == true && AI_enabled == true) 
    { 
     AI_playing(); 
     swich_player = false; 
    } 
} 

整個代碼是很長的。

難道我沒有正確地搜索嗎?還有其他原因嗎?爲了使這個功能重新開始,必須啓動它。我找不到什麼是再次激活功能。

任何建議,在哪裏尋找問題?或者是什麼問題?

編輯:

我終於找到了問題。有一個按鈕(button1)改變面板的屬性,第二個按鈕(按鈕2)使面板0像素寬和0像素高(以使其不可見)。第一個按鈕還添加了一個EventHandler來激活該功能。但button2不會刪除EventHandler。這樣,函數被調用的次數與按下button1的次數相同。

+2

whhhhhhat ?!你能更好地解釋哪個函數應該由哪個函數調用?或者你想使上面的遞歸?如果你只是想多次執行一些代碼,你會不會只需要一段時間(真)? –

回答

1

看起來您正在尋找的內容(通過您的評論/編輯)是多次調用此函數的源代碼。用目前的代碼片段,我們不可能說出來。但是你應該做的是在函數的入口處放置一個斷點,然後當它被命中時,看看visual studio中的「調用棧」窗口。

這可以通過調試訪問 - >窗口 - >調用堆棧菜單項(運行程序時它不會在Windows中顯示出來,如果你不運行。)

然後你可以看到什麼是通過這個窗口調用你的函數。這是一個非常有用的工具。

預編輯: 你的問題不是很清楚,但我想(從你的變量名),你正在尋找一個遊戲循環將持續運行。如果是這樣,看看this blog post,它有不同風格的遊戲循環的一些非常好的信息。它從簡單到更復雜(和可擴展)的循環。

你的問題指出,你激活了一次,它「再次啓用」,並且還說:「爲了這個功能再次啓動,必須​​激活它,我找不到什麼」。這些似乎是矛盾的說法。你可以編輯你的問題要清楚一點嗎?如果我的回答不是你在編輯之後尋找的內容,我會盡我所能添加任何需要的內容。

+0

我編輯了這個問題。但我不認爲這可以幫助我(但它可能會在未來有用)。我只想知道爲什麼一次點擊就調用了兩次函數。代碼沒有行告訴程序這樣做,也沒有行再次調用該函數。 – AlexSavAlexandrov

+1

現在我明白了,我沒有從原來的問題中得知。您是否調試過並使用「調用堆棧」窗口來確定每個來電的來源? – Kevek

+0

不,我沒有。我不知道這是否存在。謝謝! – AlexSavAlexandrov

0

檢查您已註冊此功能的事件。如果您註冊了某個按鈕沒有「OnClick」,則可能是根本原因

+0

對不起,我不明白按鈕屬性窗格上的...... – AlexSavAlexandrov

+0

,請檢查函數寫入哪個事件。它應該只是OnClick事件 – NirMH