2011-12-20 56 views
0

我嘗試這樣做:在.NET 3.5中,如何確定正在顯示哪個圖像?

if(PauseButton.Image != global::GripAIConsole.Icons.Resume) 
{ 
    PauseButton.Image = global::GripAIConsole.Icons.Resume; 
    ToolTipMainWin.SetToolTip(PauseButton, "Resume/Step <F4>"); 
} 

而且這是行不通的。我原以爲這是在內部比較指針,看看它們是否指向同一個地方。

+0

你確定這兩個'PauseButton.Image'和'全球:: GripAIConsole.Icons.Resume'指向同一個參考?你怎麼知道的? – Oded 2011-12-20 23:11:04

+7

你爲什麼使用圖像來確定程序的狀態? – ChrisF 2011-12-20 23:12:22

+0

我使用的圖像狀態,因爲如果它的工作,這將是最容易做的事情。如果我做PauseButton.Image =全​​球:: GripAIConsole.Icons.Resume,我期望這是相同的全球:: GripAIConsole.Icons.Resume。 – Almo 2011-12-20 23:14:38

回答

2

您與資源工作,所以如果你想確保參考是正確的,比較使用靜態方法Object.ReferenceEquals()。正如ChrisF所說,你不應該用它來確定應用程序邏輯。使用簡單的bool變量要好得多(並且性能更友好一些)。

+1

感謝的ReferenceEquals的解釋,但讓每個人都知道,我不會在這種情況下使用它。 – Almo 2011-12-21 14:35:11

2

我將定義可能的狀態與一個枚舉:

public enum State { 
    Stopped, 
    Pausing, 
    Running 
} 

,然後定義一個狀態屬性或變量:

State _state; 

然後更改狀態如下:

void ChangeState(State newState) 
{ 
    _state = newState; 
    switch (newState) { 
     case State.Stopped: 
      PauseButton.Image = global::GripAIConsole.Icons.Pause; 
      ToolTipMainWin.SetToolTip(PauseButton, "Start game <F5>"); 
      break; 
     case State.Pausing: 
      PauseButton.Image = global::GripAIConsole.Icons.Resume; 
      ToolTipMainWin.SetToolTip(PauseButton, "Resume/Step <F4>"); 
      break; 
     case State.Running: 
      PauseButton.Image = global::GripAIConsole.Icons.Pause; 
      ToolTipMainWin.SetToolTip(PauseButton, "Pause <F4>/Stop game <F6>"); 
      break; 
    } 
} 

...或任何您的邏輯要求。

這是更清潔和可以理解的。一張圖片與GUI有關,而不是與邏輯有關。從形式上顯示的東西推斷邏輯的狀態是很奇怪的。