GcClassicFunctionKeyのF10キー押下でモーダルダイアログを表示するとボタンの選択状態が解除されない
対象製品
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;
}
}
}
この現象は、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();
}
}
}
[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