1

以下のコードを見て、私が何を意味するのかをよりよく理解してください。

using System;
using System.Windows.Forms;

namespace CurrentInputLanguageTest
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); // It's US
            Console.ReadLine(); // Changed my keyboard layout while typing something
            Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); // It's still US

            var form = new Form();
            var button = new Button();
            button.Click += CheckInputLanguage;
            form.Controls.Add(button);
            Application.Run(form);
        }

        static void CheckInputLanguage(object sender, EventArgs e)
        {
            // I have changed my input language while the form is opened and pressed the button.
            // It changes when called in this event handler.
            Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); 
        }
    }
}

問題:アプリにいくつかのイベント ハンドラーがあり、イベントが発生したときの現在の入力言語を知る必要があります。これどうやってするの?

4

1 に答える 1

0

コマンド内にいて、その入力行に対してのみ設定が変更されているため、常に US が返される理由。

フォームが表示されている間にユーザーが入力言語を変更すると、現在の言語が適切に返されます。ただし、別のボタンを使用してプログラムで設定することもできます。

using System;
using System.Windows.Forms;

namespace CurrentInputLanguageTest
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); // It's US
            Console.ReadLine(); // Changed my keyboard layout while typing something
            Console.WriteLine(Application.CurrentInputLanguage.LayoutName); // It's still US

            var form = new Form();
            var grid = new TableLayoutPanel();
            var button = new Button();
            var button2 = new Button();
            button2.Left = button.Right + 5;
            form.Refresh();
            button.Click += CheckInputLanguage;
            button2.Click += ChangeInputLanguage;
            form.Controls.Add(button);
            form.Controls.Add(button2);
            Application.Run(form);
        }

        private static void ChangeInputLanguage(object sender, EventArgs e)
        {
            InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo("en-US"));
        }

        static void CheckInputLanguage(object sender, EventArgs e)
        {
            // I have changed my input language while the form is opened and pressed the button.
            // It changes when called in this event handler.
            Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName);
        }
    }
}
于 2016-05-19T02:05:46.350 に答える