2012-04-21 38 views
0

我知道這個問題之前已經被問過或者有類似的問題,但是沒有一個解決方案還沒有解決我的問題。禁用另一個類的按鈕

我有一個winform,有一個名爲hitButton的按鈕。我需要做的就是從另一個類(即不是表單類)中禁用此按鈕。

我的形式類是:

public partial class BlackJackTable : Form 
{ 
} 

我的單獨的類是:

class GameWon 
{ 
} 

我試圖暴露的公共方法在BlackJackTable這樣的:

public void DisableButtons() 
{ 
    hitButton.Enabled = false; 
} 

和訪問GameWon構造函數(在我訪問我的類中,似乎並不重要從雖然噸)所示:

public BlackJackTable blackJackTable = new BlackJackTable(); 

public GameWon() 
{ 
    blackJackTable.DisableButtons(); 
} 

我已經使用可變試圖GameWon

public Button hit; 

和從blackJackTable分配:

GameWon gameWon = new GameWon(); 

public void Assign() 
{ 
    gameWon.hit = this.hitButton; // or just = hitButton; 
} 

和從GameWon禁用:

hit.Enabled = false; 

我嘗試了其他一些東西,但都沒有工作。我猜我缺少一些明顯的東西,因爲我嘗試過的方法都沒有工作。

任何想法讚賞!

更新

我已經成功地做到與文本框和pictureboxes後一種方法,有什麼用一個按鈕有什麼區別?

+0

我只能想象你沒有做它的正確的按鈕。當你調用DisableButtons並將false設置爲Enabled時,它應該完全做到這一點。這都是單線程的,對嗎? – SimpleVar 2012-04-21 10:52:33

+0

@YoryeNathan是的這是正確的按鈕,它都是單線程的。我只是不明白這一點。 – 2012-04-21 10:54:50

+0

嘗試在實際具有按鈕的窗體的ctor處將Enabled設置爲false。只是爲了測試一下。 – SimpleVar 2012-04-21 10:56:50

回答

0

我最終使用後一種方法修復了這個問題,但使Button變量爲靜態。

public static Button hit; 

它一定是已經混淆了類的實例。感謝您的想法。

3

它不工作的原因是,你在的BlackJackTable錯誤實例調用DisableButtons 。你的GameWon類創建它自己的不可見的BlackJackTable對象,將它存儲在BlackJackTable blackJackTable變量中,並禁用它的按鈕;您可見的表單對象不會被修改。

爲了解決這個問題,你應該通過比如你BlackJackTable形式向GameWon構造函數,並將其設置爲一個變量:

private readonly BlackJackTable blackJackTable; 

public GameWon(BlackJackTable blackJackTable) { 
    this.blackJackTable = blackJackTable; 
} 

創建GameWon類的實例應該通過形式的代碼作爲構造函數的參數:

GameWon gameWon = new GameWon(myBjTable); 
+0

對不起,嘗試過,但仍然沒有運氣。 – 2012-04-21 13:04:29

+0

@BaliC請更新問題,顯示如何創建'GameWon',以及爲構造函數的參數傳遞什麼信息。如果你使用'BlackJackTable'方法創建它,那麼調用看起來就像'new GameWon(this);' – dasblinkenlight 2012-04-21 14:22:10

0

你在構造函數中做了很多工作。這通常是不好的做法,特別是對於表單。您似乎在表單顯示之前正在修改表單上對象的屬性 - 我並不感到驚訝,這會產生不可預知的行爲。如果我猜測,我會想象你的代碼運行後按鈕狀態正在通過表單初始化重置。表單對他們自己的生命週期需求是很有保護的,我想你必須遇到一種特殊情況,以處理表單準備顯示的方式。

我必須指出,你在這裏提出了一個相當奇怪的架構。我很難理解你爲什麼選擇以這種方式安排你的應用程序。我認爲最好從控制器類與表單和遊戲類進行通信,可能使用控制器中引發的事件來允許表單自行修改。在屏幕上可見時修改自己的狀態應始終有效。

相關問題