2011-12-20 28 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有关,而不是与逻辑有关。从形式上显示的东西推断逻辑的状态是很奇怪的。