Динамические ресурсы Прикладного уровня не являются динамичными при хостинге в ElementHost

operator>> не гарантируется вывод значащего целочисленного значения в случае сбоя, но вы не проверяете сбой перед оценкой __userChoice, и то, как ваши if структурированы, проверка else (!cin) никогда не будет быть достигнутым. Но даже если operator>> успешно, вы не проверяете, вводил ли пользователь больше, чем просто целое число.

Чтобы сделать то, что вы просите, вы должны прочитать из std::cin в std::string сначала используя std::getline() , а затем использовать std::istringstream или [1115 ] std:stoi() (или эквивалентный) для преобразования string в int с проверкой ошибок.

Например:

bool strToInt(const std::string &s, int &value)
{
    std::istringstream iss(s);
    return (iss >> value) && iss.eof();

    // Or:

    std::size_t pos;
    try {
        value = std::stoi(input, &pos);
    }
    catch (const std::exception &) {
        return false;
    }
    return (pos == input.size());
}

...

std::string input;
int userChoice;

std::cout << "Please select: ";
std::getline(std::cin, input);

if (strToInt(input, userChoice))
{
    if (userChoice > 0 && userChoice < 5)
    {
        std::cout << "You selected menu item " << userChoice <<". Processing... Done!\n";
    }
    else if (userChoice == 5)
    {
        Finalization(); //call exit
    }
    else
    {
        std::cout << "Please select a number from 1 to 5.\n";
    }
}
else
{
    std::cout << "Invalid input, please input an integer number.\n";
}

5
задан dustyburwell 7 April 2009 в 19:19
поделиться

1 ответ

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

Из того, что я могу сказать через Reflector, видно, что когда словарь ресурсов приложения Application катастрофически изменяется (изменение, которое, вероятно, будет иметь широкий спектр эффектов, таких как добавление, удаление или замена обложки), это код, который перебирает все Windows в приложении и заставляет их переоценивать свои DynamicResources . Однако другие элементы, которые я бы рассматривал верхнего уровня в WPF, такие как ElementHost , не получают такой же обработки. Это приводит к тому поведению, которое я испытываю.

Мой обходной путь к этой проблеме - вручную просмотреть все мои ElementHost и добавить, удалить, или замените скин ResourceDictionary файл. Это не идеально, но оно выполняет свою работу.

6
ответ дан 14 December 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: