Добавление визуального поведения к нескольким формам - PullRequest
1 голос
/ 06 августа 2009

Я хочу добавить определенное поведение к нескольким формам. В этом случае это всплывающее сообщение, которое вызывается, когда поле не проходит проверку ввода. Самым простым решением, которое я мог придумать, было сделать его статическим классом и вызвать его в состоянии сбоя события onvalidate каждого поля.

public static class BalloonMessage
{
    private static ToolTip _toolTip = new ToolTip()
                                          {
                                              Active = false,
                                              IsBalloon = true
                                          };

    public static void Show(string message,Control control)
    {
        if (!_toolTip.Active)
        {
            //4 year old bug in tooltip doesn't place balloon "tail" correctly
            // when first attached to a control. Microsoft still hasn't fixed it.
            _toolTip.Show(message, control); 
            _toolTip.Active = true;
            _toolTip.Show(message, control);
        }
    }

    public static void Clear()
    {
        _toolTip.Active = false;
    }
}

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (textBox1.Text.Contains(" "))
    {
        BalloonMessage.Show(String.Format("Field cannot contain spaces"), textBox1);
        e.Cancel = true;
    }
    else
    {
        BalloonMessage.Clear();
    }
}

Это позволяет мне использовать BalloonMessage в любой форме, не требуя явной зависимости, но Мне интересно, является ли это лучшим подходом . Пример кода не показывает его, но производственный код использует множество взаимосвязанных триад MVP. Проверка выполняется в докладчиках, которые не имеют прямого доступа ни к одному из элементов управления форм. Поэтому мне придется передать результат проверки и любое сообщение об ошибке обратно в представление для отображения в сообщении с сообщением.

Кстати, если вам интересно, почему я использую всплывающую подсказку вместо переноса EM_SHOWBALLOONTIP, потому что я хотел, чтобы эта функция была включена в Windows 2000, а EM_SHOWBALLOONTIP была добавлена ​​в XP. Подсказка может отображаться в виде всплывающей подсказки в 2000 году, если установлен IE 5.5 или более поздней версии (все мои клиенты Win2K используют IE 6). Я просто держу его в неактивном состоянии до тех пор, пока не потребуется запретить его поведение по умолчанию при наведении .

Ответы [ 2 ]

0 голосов
/ 06 августа 2009

Вы можете создать базу BalloonTipForm, от которой наследуются другие формы с нужными вам элементами. Вы по-прежнему не сможете обрабатывать события проверки для определенных элементов управления в нем, но у вас наверняка могут быть общие методы для его отображения.

И я уверен, что есть какой-то способ, которым вы могли бы настроить его так, чтобы он наблюдал вашу фактическую валидацию, чтобы вам не пришлось явно вызывать методы всплывающих подсказок show / hide. (Я не знаю, потребует ли фактическая проверка в ваших докладчиках несколько таких вызовов или может быть только несколько.)

Ваше собственное решение тоже не выглядит слишком плохо. Вы можете легко смешать 2.

0 голосов
/ 06 августа 2009

Я бы сказал, что это, вероятно, путь. Он соответствует функциональности MessageBox, встроенной в .NET.

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