Централизация обработки Messagebox для приложения - PullRequest
1 голос
/ 16 апреля 2010

Мне интересно, как другие справляются с попытками централизовать вызов функции MessageBox. Вместо того, чтобы в коде встраивался длинный текст в прошлом (не на языке .net), я бы помещал сообщения системы и приложения типа «messagebox» в файл базы данных, который «записывался» в исполняемый файл, очень похоже на файл ресурсов в .Net. Когда возникает условие подсказки, я просто вызываю что-то вроде

MBAnswer = MyApplication.CallMsgBox (IDUserCantDoThat)

затем проверьте MBAnswer по возвращении, например, да / нет / отмена или что-то еще.

В таблице базы данных у меня есть такие вещи, как заголовок окна сообщения, отображаемые кнопки, собственное сообщение, специальный флаг, который автоматически прикрепляется к последующему стандартному комментарию, например «Пожалуйста, свяжитесь со службой поддержки, если это случается. ". Функция вызывает окно сообщения со всеми применимыми настройками и просто возвращает ответ. Большим преимуществом этого было то, что в одном месте был весь контекст сообщений, а с помощью констант было легче читать, какое сообщение должно было быть представлено пользователю.

Есть ли у кого-нибудь подобная система в .Net для такого же подхода, или это просто плохая идея в среде .Net.

Ответы [ 3 ]

1 голос
/ 16 апреля 2010

Мы использовали для обработки централизованных сообщений с модулями (VB). У нас был один модуль со всеми сообщениями, и мы называем это в нашем коде. Это было сделано для того, чтобы мы изменили сообщение в одном месте (из-за потребностей бизнеса), и оно отражается повсюду. Также было легко обрабатывать изменения в одном файле вместо нескольких файлов для изменения сообщения. Также мы открыли этот файл для бизнес-аналитиков (VSS), чтобы они могли его изменить. Я не думаю, что это плохая идея, если речь идет о модулях или статических классах, но может быть излишним извлекать его из БД.

НТН

0 голосов
/ 16 апреля 2010

Полагаю, вы могли бы использовать HashTable, чтобы сделать что-то подобное, это можно найти в:

using System.Collections;

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

public class MessageBoxStore
{
    private HashTable stock;
    public string Get(string msg)
    {
        if (stock.ContainsKey(msg))
            return stock[msg];
        else
            return string.Empty;
    }

    public string Set(string msg, string msgcontent)
    {
        stock[msg] = msgcontent;
    }
}

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

вызовите такую ​​функцию при загрузке программы.

public LoadErrorMessages()
{
    storeClass = new MessageBoxStore();
    storeClass.Set("UserCantDoThat", "Invalid action. Please confirm your action and try again");
}

например, а затем.

MessageBox.Show(storeClass.Get("UserCantDoThat"));

Я поместил это в новый класс, вместо того, чтобы использовать методы get / set HashTable напрямую, потому что это оставляет место для настройки, так что окно сообщений может быть создано в get, и в наборе может храниться более 1 части информации. обрабатывать заголовок, тип кнопки, содержимое и т. д. и т. д.

0 голосов
/ 16 апреля 2010

Вы можете использовать файлы ресурсов, чтобы экспортировать весь текст туда (вроде как и в локализацию). Resharper 5.0 действительно помогает в выделении текста, который можно переместить на ресурс.

Обычно это выглядит так:

  1. До: MessageBox.Show(error.ToString(), "Error with extraction");
  2. Предложение: локализуемая строка "Ошибка с извлечением"
  3. Щелкните правой кнопкой мыши Переместить в ресурс
  4. Выберите файл ресурса и имя (MainForm_ExtractArchive_Error_with_extraction), также установите флажок Найти идентичные элементы в классе ...
  5. Назовите это так MessageBox.Show(error.ToString(), Resources.MainForm_ExtractArchive_Error_with_extraction);

Лучше всего это позволяет легко переводить материал на другие языки, а также хранить текст для MessageBox в отдельном Resource. Конечно, Resharper делает все это за вас, поэтому не нужно так много печатать: -)

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