CA1300: MessageBoxOption を指定します

Item [値]
規則 ID CA1300
カテゴリ Microsoft.Globalization
互換性に影響する変更点 なし

原因

System.Windows.Forms.MessageBoxOptions 引数を受け取らない System.Windows.Forms.MessageBox.Show メソッドのオーバーロードをメソッドで呼び出しています。

規則の説明

右から左への読み取り順序が使用される文化を持つ地域でメッセージ ボックスが正しく表示されるようにするには、Show メソッドに MessageBoxOptions.RightAlign および MessageBoxOptions.RtlReading フィールドを渡します。 右から左への読み取り順序が使用されるかどうかを判断するには、格納されているコントロールの System.Windows.Forms.Control.RightToLeft プロパティを調べます。

違反の修正方法

この規則違反を修正するには、MessageBoxOptions 引数を受け取る Show メソッドのオーバーロードを呼び出します。

どのようなときに警告を抑制するか

右から左への読み取り順序が使用される文化の地域にコード ライブラリがローカライズされない場合は、この規則による警告を抑制しても安全です。

次の例は、読み取り順序の文化に適したオプションを持つメッセージ ボックスが表示されるメソッドを示しています。 この例をビルドするには、表示されていないリソース ファイルが必要となります。 リソース ファイルを使用せずに例をビルドして、右から左の機能をテストするには、例のコメントに従います。

using System;
using System.Globalization;
using System.Resources;
using System.Windows.Forms;

namespace GlobalizationLibrary
{
    class Program
    {
        [STAThread]
        static void Main()
        {
            SomeForm myForm = new SomeForm();
            // Uncomment the following line to test the right-to-left feature.
            //myForm.RightToLeft = RightToLeft.Yes;
            Application.Run(myForm);
        }
    }

    public class SomeForm : Form
    {
        private ResourceManager _Resources;
        private Button _Button;
        public SomeForm()
        {
            _Resources = new ResourceManager(typeof(SomeForm));
            _Button = new Button();
            _Button.Click += new EventHandler(Button_Click);
            Controls.Add(_Button);
        }

        private void Button_Click(object sender, EventArgs e)
        {
            // Switch the commenting on the following 4 lines to test the form.
            // string text = "Text";
            // string caption = "Caption";
            string text = _Resources.GetString("messageBox.Text");
            string caption = _Resources.GetString("messageBox.Caption");
            RtlAwareMessageBox.Show((Control)sender, text, caption,
            MessageBoxButtons.OK, MessageBoxIcon.Information,
            MessageBoxDefaultButton.Button1, (MessageBoxOptions)0);
        }
    }

    public static class RtlAwareMessageBox
    {
        public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options)
        {
            if (IsRightToLeft(owner))
            {
                options |= MessageBoxOptions.RtlReading |
                MessageBoxOptions.RightAlign;
            }

            return MessageBox.Show(owner, text, caption,
            buttons, icon, defaultButton, options);
        }

        private static bool IsRightToLeft(IWin32Window owner)
        {
            Control control = owner as Control;
            
            if (control != null)
            {
                return control.RightToLeft == RightToLeft.Yes;
            }

            // If no parent control is available, ask the CurrentUICulture
            // if we are running under right-to-left.
            return CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;
        }
    }
}

関連項目