GcClassicFunctionKeyのF10キー押下でモーダルダイアログを表示するとボタンの選択状態が解除されない

文書番号 : 31489     文書種別 : 不具合     最終更新日 : 2011/10/14
文書を印刷する
対象製品
PlusPak for Windows Forms 6.0J
状況
回避方法あり
詳細
GcClassicFunctionKeyコントロールのF10キー押下時に別のフォームをモーダルダイアログで表示した場合、モーダルダイアログを閉じた後にF10キーの選択状態が解除されないことがあります。

この現象は、IMEがONの場合に発生します。
IMEがOFFの場合やATOKを使用している場合には発生しません。

【再現コード】
[Visual Basic]
Public Class Form1

    Private Sub gcClassicFunctionKey1_FunctionKeyPress(ByVal sender As System.Object, ByVal e As GrapeCity.Win.Bars.FunctionKeyPressEventArgs) Handles gcClassicFunctionKey1.FunctionKeyPress
        If e.Key = GrapeCity.Win.Bars.ButtonKeys.F10 Then
            ' gcClassicFunctionKeyのF10押下で、別のフォームをモーダルダイアログで表示します。
            Dim frm As Form3 = New Form3()
            frm.ShowDialog(Me)

            e.Handled = True
        End If
    End Sub
End Class

[C#]
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void gcClassicFunctionKey1_FunctionKeyPress(object sender, GrapeCity.Win.Bars.FunctionKeyPressEventArgs e)
        {
            if (e.Key == GrapeCity.Win.Bars.ButtonKeys.F10)
            {
                // gcClassicFunctionKeyのF10押下で、別のフォームをモーダルダイアログで表示します。
                Form3 frm = new Form3();
                frm.ShowDialog();

                e.Handled = true;
            }
        }
}
回避方法
F10押下時の処理を非同期に実行することで、現象を回避することが可能です。

[Visual Basic]
Public Class Form1

    ' デリゲート
    Public Delegate Sub DoCloseDeldgate()

    Private Sub gcClassicFunctionKey1_FunctionKeyPress(ByVal sender As System.Object, ByVal e As GrapeCity.Win.Bars.FunctionKeyPressEventArgs) Handles gcClassicFunctionKey1.FunctionKeyPress
        If e.Key = GrapeCity.Win.Bars.ButtonKeys.F10 Then
            ' gcClassicFunctionKeyのF10押下で、別のフォームをモーダルダイアログで表示します。
            'Dim frm As Form3 = New Form3()
            'frm.ShowDialog(Me)
            Me.BeginInvoke(New DoCloseDeldgate(AddressOf DoClose))

            e.Handled = True
        End If
    End Sub

    ' gcClassicFunctionKeyのF10押下で、別のフォームをモーダルダイアログで表示します。
    Private Sub DoClose()
        Dim frm As Form3 = New Form3()
        frm.ShowDialog(Me)
    End Sub
End Class

[C#]
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // デリゲート
        public delegate void DoCloseDeldgate();

        private void gcClassicFunctionKey1_FunctionKeyPress(object sender, GrapeCity.Win.Bars.FunctionKeyPressEventArgs e)
        {
            if (e.Key == GrapeCity.Win.Bars.ButtonKeys.F10)
            {
                // gcClassicFunctionKeyのF10押下で、別のフォームをモーダルダイアログで表示します。
                //Form3 frm = new Form3();
                //frm.ShowDialog();
                this.BeginInvoke(new DoCloseDeldgate(DoClose));

                e.Handled = true;
            }
        }

        // gcClassicFunctionKeyのF10押下で、別のフォームをモーダルダイアログで表示します。
        private void DoClose()
        {
            Form3 frm = new Form3();
            frm.ShowDialog();
        }
    }
}
キーワード
PPWI08487