1

他の人がMessageBox関数の呼び出しを一元化しようとすることにどのように対処するのか疑問に思っています。以前は(.net以外の言語で)コードのいたるところに長いテキストを埋め込む代わりに、システムおよびアプリケーションベースの「メッセージボックス」タイプのメッセージをデータベースファイルに入れ、実行可能ファイルに「焼き付け」ました。 .Netのリソースファイルによく似ています。プロンプト条件が発生した場合、私は次のようなものを呼び出すだけです

MBAnswer = MyApplication.CallMsgBox(IDUserCantDoThat)

次に、戻ったときにMBAnswerを確認します。たとえば、yes / no/cancelなどです。

データベーステーブルには、メッセージボックスのタイトル、表示されるボタン、実際のメッセージ、「これが発生した場合はヘルプデスクに連絡してください」などの後続の標準コメントに自動的に追加される特別なフラグなどがあります。 。この関数は、該当するすべての設定を使用してメッセージボックスを呼び出し、応答を返すだけです。これの大きな利点は、メッセージのすべての「コンテキスト」を1つの場所に配置し、定数を介して、ユーザーに表示されるメッセージを読みやすくすることでした。

同様のアプローチを行うために.Netに同様のシステムを持っている人はいますか、それとも.Net環境ではこれは悪い考えです。

4

3 に答える 3

1

以前は、モジュール (VB) を使用して一元化されたメッセージを処理していました。すべてのメッセージを含む 1 つのモジュールがあり、それをコードで呼び出します。これは、(ビジネス上の必要性により) 1 か所でメッセージを変更し、それがすべての場所に反映されるようにするためです。また、メッセージを変更するために複数のファイルではなく、1 つのファイルで変更を処理するのも簡単でした。また、そのファイルをビジネス アナリスト (VSS) に公開して、変更できるようにしました。モジュールや静的クラスが含まれている場合は悪い考えではないと思いますが、DB からフェッチするのはやり過ぎかもしれません。

HTH

于 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)を選択し、[クラスで同一のアイテムを検索する]チェックボックスもオンにします...
  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 でメッセージ ボックスを作成でき、メッセージ ボックスのタイトルを処理するために複数の情報をセットに格納できます。 、ボタンタイプ、コンテンツなど

于 2010-04-16T16:33:41.400 に答える