Как определить, какое изображение отображается в .NET 3.5? - PullRequest
0 голосов
/ 21 декабря 2011

Я попробовал это:

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

И это не работает.Я бы подумал, что он сравнивает указатели внутри, чтобы увидеть, указывают ли они на одно и то же место.

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Я бы определил возможные состояния с помощью перечисления:

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, а не к логике. Выводить логику из отображаемых на формах вещей странно.

2 голосов
/ 21 декабря 2011

Вы работаете с ресурсами, поэтому, если вы хотите убедиться, что ссылка верна, сравните, используя статический метод Object.ReferenceEquals(). Как сказал ChrisF, вам не следует использовать это для определения логики приложения. Использование простой переменной bool намного лучше (и немного более удобно для производительности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...