CA1300: MessageBoxOptions angeben

TypeName

SpecifyMessageBoxOptions

CheckId

CA1300

Kategorie (Category)

Microsoft.Globalization

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Eine Methode ruft eine Überladung der MessageBox.Show-Methode auf, die kein MessageBoxOptions-Argument annimmt.

Regelbeschreibung

Damit in Kulturen, in denen von rechts nach links gelesen wird, ein Meldungsfeld ordnungsgemäß angezeigt wird, müssen der RightAlign-Member und der RtlReading-Member der MessageBoxOptions-Enumeration an die Show-Methode übergeben werden.Überprüfen Sie die Control.RightToLeft-Eigenschaft des Containersteuerelements, um festzustellen, ob eine Rechts-nach-Links-Lesefolge verwendet werden soll.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, rufen Sie eine Überladung der Show-Methode auf, die ein MessageBoxOptions-Argument annimmt.

Wann sollten Warnungen unterdrückt werden?

Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn die Codebibliothek nicht für eine Kultur lokalisiert wird, in der von rechts nach links gelesen wird.

Beispiel

Das folgende Beispiel zeigt eine Methode, die ein Meldungsfeld mit Optionen anzeigt, die der Lesefolge der Kultur entsprechen.Zur Erstellung des Beispielcodes wird eine Ressourcendatei (nicht dargestellt) benötigt.Folgen Sie dem Kommentar im Beispiel, um das Beispiel ohne eine Ressourcendatei zu erstellen und das Rechts-nach-Links-Feature zu testen.

Imports System
Imports System.Globalization
Imports System.Resources
Imports System.Windows.Forms

Namespace GlobalizationLibrary
    Class Program

        <STAThread()> _
        Shared Sub Main()
            Dim myForm As New SomeForm()

            ' Uncomment the following line to test the right to left feature. 
            ' myForm.RightToLeft = RightToLeft.Yes
            Application.Run(myForm)
        End Sub 
    End Class 

    Public Class SomeForm : Inherits Form
        Private _Resources As ResourceManager
        Private WithEvents _Button As Button

        Public Sub New()
            _Resources = New ResourceManager(GetType(SomeForm))
            _Button = New Button()
            Controls.Add(_Button)
        End Sub 

        Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles _Button.Click
            ' Switch the commenting on the following 4 lines to test the form. 
            'Dim text As String = "Text" 
            'Dim caption As String = "Caption" 
            Dim text As String = _Resources.GetString("messageBox.Text")
            Dim caption As String = _Resources.GetString("messageBox.Caption")

            RtlAwareMessageBox.Show(CType(sender, Control), text, caption, _
            MessageBoxButtons.OK, MessageBoxIcon.Information, _
            MessageBoxDefaultButton.Button1, CType(0, MessageBoxOptions))
        End Sub 
    End Class 

    Public Module RtlAwareMessageBox

        Public Function Show(ByVal owner As IWin32Window, ByVal text As String, ByVal caption As String, ByVal buttons As MessageBoxButtons, ByVal icon As MessageBoxIcon, ByVal defaultButton As MessageBoxDefaultButton, ByVal options As MessageBoxOptions) As DialogResult
            If (IsRightToLeft(owner)) Then
                options = options Or MessageBoxOptions.RtlReading Or _
                MessageBoxOptions.RightAlign
            End If 

            Return MessageBox.Show(owner, text, caption, _
            buttons, icon, defaultButton, options)
        End Function 

        Private Function IsRightToLeft(ByVal owner As IWin32Window) As Boolean 
            Dim control As Control = TryCast(owner, Control)

            If (control IsNot Nothing) Then 
                Return control.RightToLeft = RightToLeft.Yes
            End If 

            ' If no parent control is available, ask the CurrentUICulture 
            ' if we are running under right-to-left. 
            Return CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft
        End Function 
    End Module 
End Namespace
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;
        }
    }
}

Siehe auch

Referenz

ResourceManager

Konzepte

Ressourcen in Desktop-Apps