集中处理应用程序的Messagebox

时间:2010-04-16 16:02:19

标签: c# implementation messagebox centralized

我想知道其他人如何处理试图集中MessageBox函数调用。在过去(非.net语言)中,我不会将长文本嵌入代码中,而是将系统和应用程序库“messagebox”类型的消息放入数据库文件中,该文件将“烧录”到可执行文件中,很像.Net中的资源文件。当出现提示条件时,我会打电话给

MBAnswer = MyApplication.CallMsgBox(IDUserCantDoThat)

然后在返回时检查MBAnswer,例如是/否/取消或其他。

在数据库表中,我会有类似于消息框标题的内容,将显示的按钮,实际消息,在后续标准评论中自动添加的特殊标记,如“请联系帮助台,如果这样发生。”。该函数将使用所有适用的设置调用消息框,然后返回答案。这样做的最大好处是,一个位置具有消息的所有“上下文”,并且通过常量,更容易阅读将向用户呈现的消息。

有没有人在.Net中有类似的系统来做类似的方法,或者这只是.Net环境中的一个坏主意。

3 个答案:

答案 0 :(得分:1)

我们曾经使用模块(VB)处理集中式消息。我们有一个包含所有消息的模块,我们在代码中调用它。这样做是为了让我们在一个地方(由于业务需求)更改消息,并在任何地方反映出来。而且在一个文件中处理更改也很容易,而不是多个文件来更改消息。我们还向业务分析师(VSS)开放了该文件,以便他们可以更改它。如果它涉及模块或静态类,我认为这不是一个坏主意,但是从DB中获取它可能是一种过度的做法。

HTH

答案 1 :(得分:0)

您可以使用资源文件将所有文本导出到那里(还有一些本地化功能)。 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);
  6. 最重要的是,它可以轻松地将内容翻译成其他语言,并将MessageBox的文字保存在单独的Resource中。当然 Resharper 为你完成所有这些,所以不需要输入那么多: - )

答案 2 :(得分:0)

我想你可以使用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"));

我把它放在一个新类而不是直接使用HashTable get / set方法,因为这留下了自定义的空间,因此可以在get中创建消息框,并且可以在集合中存储多条信息。处理消息框标题,按钮类型,内容等等。