在.NET 3.5中,如何确定要显示的图像?

时间:2011-12-20 23:09:01

标签: c# .net winforms

我试过了:

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

它不起作用。我原本以为它是在内部比较指针,看它们是否指向同一个地方。

2 个答案:

答案 0 :(得分:2)

您正在使用资源,因此如果您想确保引用正确,请使用静态方法Object.ReferenceEquals()进行比较。正如ChrisF所说,你不应该用它来确定应用程序逻辑。使用简单的bool变量要好得多(而且性能更友好)。

答案 1 :(得分: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有关,而与逻辑无关。从形式上显示的东西推断出逻辑状态是很奇怪的。