Почему не появляется моя подсказка C ++ / CLI? - PullRequest
1 голос
/ 23 марта 2010

У меня есть некоторый проверочный код, который должен отображать макс / мин элемента управления при вводе неверного значения.

В моем конструкторе я делаю это:

m_wndToolTip = gcnew ToolTip(this->components);
m_wndToolTip->AutoPopDelay = 5000;
m_wndToolTip->InitialDelay = 10;
m_wndToolTip->ReshowDelay = 250;
m_wndToolTip->ShowAlways = true;// Force the ToolTip text to be displayed whether or not the form is active.

Это мой код отражения проверки:

void MyGUI::IndicateValidationResult(Windows::Forms::Control^ control, bool isValid, String^ invalidReason)
{
    // If the validation failed, make the background red. If not, turn it white.
    if( isValid )
    {
        control->BackColor = Drawing::Color::White;
        m_wndToolTip->Hide(control);
    }
    else
    {
        control->BackColor = Drawing::Color::LightCoral;
        m_wndToolTip->Show(invalidReason, control);
    }
}

... который вызывается из различных ValueChanged методов в моих текстовых полях. Я пытался использовать show, а также комбинацию SetToolTip и active = true, и, похоже, ничего не работает.

Я видел еще один вопрос, спрашивающий о всплывающих подсказках , и попытался установить соседнюю метку в вызове, чтобы показать, но это тоже не исправило. Подсказка - это переменная-член в моей производной форме System::Windows::Forms::Form, которая не позволяет ей выйти из области видимости.

Я что-то упускаю из виду?

1 Ответ

1 голос
/ 23 марта 2010

Когда я попробовал, твой код работал нормально, я не вижу очевидной ошибки. Я назвал это так, используя событие Validating текстового поля:

bool ok;

System::Void textBox1_Validating(System::Object^  sender, System::ComponentModel::CancelEventArgs^  e) {
  e->Cancel = !ok;
  IndicateValidationResult(textBox1, ok, "invalid");
  ok = !ok;
}

Остерегайтесь, что всплывающая подсказка может быть капризной. У нативного компонента Windows есть «функция», которая предотвращает повторное отображение всплывающей подсказки, когда время ожидания истекло. Компонент ErrorProvider - лучшая ловушка мыши, чтобы сделать это.

...