1

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

MBAnswer = MyApplication.CallMsgBox(IDUserCantDoThat)

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

在数据库表中,我将拥有诸如消息框标题、将显示的按钮、实际消息、自动附加在后续标准注释(如“如果发生这种情况,请联系帮助台”)上的特殊标志。 . 该函数将使用所有适用的设置调用消息框并返回答案。这样做的最大好处是,在一个位置拥有消息的所有“上下文”,并且通过常量,更容易阅读将要呈现给用户的消息。

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

4

3 回答 3

1

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

高温高压

于 2010-04-16T16:13:45.700 回答
0

您可以使用资源文件将所有文本导出到那里(还有一种本地化功能)。Resharper 5.0确实有助于突出显示可以移动到资源的文本。

通常它看起来像这样:

  1. 前:MessageBox.Show(error.ToString(), "Error with extraction");
  2. 建议:可本地化的字符串“提取错误”
  3. 右键单击移动到资源
  4. 选择资源文件和名称(MainForm_ExtractArchive_Error_with_extraction),同时选中复选框 Find same items in class ...
  5. 像这样称呼它MessageBox.Show(error.ToString(), Resources.MainForm_ExtractArchive_Error_with_extraction);

最重要的是,它可以轻松地将内容翻译成其他语言,并将文本MessageBox单独保存在Resource. 当然,Resharper会为您完成这一切,因此无需输入那么多 :-)

于 2010-04-16T16:24:12.403 回答
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 中创建消息框,并且可以在集合中存储超过 1 条信息来处理消息框标题,按钮类型,内容等。

于 2010-04-16T16:33:41.400 回答