Fall Creators Update を適用後 DataGridView に文字を入力すると 2 文字入力される

こんにちは、Platform SDK (Windows SDK) サポートチームです。

今回は、Fall Creators Update を適用すると Windows フォーム アプリケーションの DataGridView で文字が 2 文字表示される現象についてご案内します。

 

現象

Windows フォーム アプリケーションで DataGridView のセル自体が選択されている状態で日本語 (全角文字、カタカナ) を 1 文字入力すると、確定された状態で 2 文字が表示されます。

例)写真 1 の状態で「あ」と入力するため「A」キーを 1 回押下すると、写真 2 のように「ああ」と 2 文字が確定された状態で表示されます。

写真 1

clip_image002

写真 2

clip_image004

 

この現象は Fall Creators Update を適用した Windows 10 で発生を確認しており、以前のバージョンでは発生しません。

写真のような Visual Studio で Windows フォーム アプリケーションを作成して DataGridView にカラムを追加しただけの状態でも発生します。

 

原因

<2018 年 6 月 25 日 (月) 更新>
この現象は、Windows 10 Fall Creators Update (v1709) の IME/TSF (Text Service Framework) の不具合が原因で発生していました。

 

回避方法

<2018 年 6 月 25 日 (月) 更新>
以下のいずれかの回避方法をご利用ください。

  • 回避方法 (1)
    セルを 2 回クリックして、セル自体が選択されている状態を解除してから文字を入力します。
  • 回避方法 (2)
    Windows 10 April 2018 Update (v1803) にバージョンアップすると共に、アプリケーション側でもこの修正に対応するためのプログラムの変更を行います。

 

以下に、回避方法 (2) で必要となるプログラムの変更方法について詳しくご説明します。

具体的には、DataGridView 上で動く IME/TSF 側に対して初期化の機会を与えるための変更を行います。
なお下記コードは、Form1 という Form の上に、dataGridView1 という DataGridView コントロールが配置されている場合の、プログラム変更例です。
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Shown(object sender, EventArgs e) { this.dataGridView1.BeginEdit(false); Application.DoEvents(); this.dataGridView1.EndEdit(); } }
上記のプログラム変更例では、Form1 の Shown イベント内で、先ず dataGridView1 の BeginEdit メソッド、次に Application.DoEvents メソッド、最後に dataGridView1 の EndEdit メソッドを実行します。
この一連の処理を実行することにより、IME/TSF 側に DataGridView 上での初期化の機会を与えることができるため、Windows 10 April 2018 Update (v1803) で行われた修正に対応できるようになります。

お手数ではございますが、回避方法 (2) については、Windows 10 April 2018 Update (v1803) のご利用とあわせてアプリケーション側でも上記の対応をお願いします。