GcFunctionKeyのFunctionKeyDownイベントでEnabledプロパティをFalseにするとその後のFunctionKeyDownイベントが発生しない
対象製品
PlusPak for Windows Forms 5.0J
状況
現象確認済み
詳細
GcFunctionKeyの FunctionKeyDownイベント内で GcFunctionKeyの Enabledプロパティを Falseにすると、Trueに戻した後の、初回の FunctionKeyDownイベントが発生しません。
例)
F2キーで Enabledプロパティを Falseに変更した場合、Enabledプロパティが Trueに変更されたあとの、最初の F2キー押下時の FunctionKeyDownイベントが発生しません。他のキー押下時には FunctionKeyDownイベントは発生します。
例)
F2キーで Enabledプロパティを Falseに変更した場合、Enabledプロパティが Trueに変更されたあとの、最初の F2キー押下時の FunctionKeyDownイベントが発生しません。他のキー押下時には FunctionKeyDownイベントは発生します。
回避方法
現時点では有効な回避方法は見つかっておりません。
下記のように、Enabledプロパティを切り替えずにフラグで処理を振り分ける方法での回避が、現時点で最も近い動作を実現できる方法です。
[Visual Basic]
Public Class Form1
Public Sub New()
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
InitializeInputMan()
End Sub
Private Sub InitializeInputMan()
' GcFunctionKeyの設定
GcFunctionKey1.FunctionKeyButtons.Add(New GrapeCity.Win.Bars.FunctionKeyButton(Keys.F2, "F2"))
GcFunctionKey1.FunctionKeyButtons.Add(New GrapeCity.Win.Bars.FunctionKeyButton(Keys.F3, "F3"))
End Sub
Private Sub GcFunctionKey1_FunctionKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles GcFunctionKey1.FunctionKeyDown
' フラグがFalseの場合には、FunctionKeyDownイベントの処理を行いません。
If Not _functionKeyEnabled Then
Return
End If
Select Case e.KeyCode
Case Keys.F2
' Enabledプロパティの代わりにフラグを設定します。
'GcFunctionKey1.Enabled = False
_functionKeyEnabled = False
Debug.WriteLine("F2")
Case Keys.F3
Debug.WriteLine("F3")
End Select
End Sub
' ファンクションキーコントロールのEnabledのフラグ
Private _functionKeyEnabled As Boolean = True
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Enabledプロパティの代わりにフラグを設定します。
'GcFunctionKey1.Enabled = True
_functionKeyEnabled = True
End Sub
End Class
[C#]
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeInputMan();
}
private void InitializeInputMan()
{
// GcFunctionKeyの設定
gcFunctionKey1.FunctionKeyButtons.Add(new GrapeCity.Win.Bars.FunctionKeyButton(Keys.F2, "F2"));
gcFunctionKey1.FunctionKeyButtons.Add(new GrapeCity.Win.Bars.FunctionKeyButton(Keys.F3, "F3"));
}
private void gcFunctionKey1_FunctionKeyDown(object sender, KeyEventArgs e)
{
// フラグがFalseの場合には、FunctionKeyDownイベントの処理を行いません
if(!_functionKeyEnabled)
{
return;
}
switch (e.KeyCode)
{
case Keys.F2:
// Enabledプロパティの代わりにフラグを設定します。
//gcFunctionKey1.Enabled = false;
_functionKeyEnabled = false;
System.Diagnostics.Debug.WriteLine("F2");
break;
case Keys.F3:
System.Diagnostics.Debug.WriteLine("F3");
break;
default:
break;
}
}
// ファンクションキーコントロールのEnabledのフラグ
private bool _functionKeyEnabled = true;
private void button1_Click(object sender, EventArgs e)
{
// Enabledプロパティの代わりにフラグを設定します。
//gcFunctionKey1.Enabled = true;
_functionKeyEnabled = true;
}
}
}
下記のように、Enabledプロパティを切り替えずにフラグで処理を振り分ける方法での回避が、現時点で最も近い動作を実現できる方法です。
[Visual Basic]
Public Class Form1
Public Sub New()
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
InitializeInputMan()
End Sub
Private Sub InitializeInputMan()
' GcFunctionKeyの設定
GcFunctionKey1.FunctionKeyButtons.Add(New GrapeCity.Win.Bars.FunctionKeyButton(Keys.F2, "F2"))
GcFunctionKey1.FunctionKeyButtons.Add(New GrapeCity.Win.Bars.FunctionKeyButton(Keys.F3, "F3"))
End Sub
Private Sub GcFunctionKey1_FunctionKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles GcFunctionKey1.FunctionKeyDown
' フラグがFalseの場合には、FunctionKeyDownイベントの処理を行いません。
If Not _functionKeyEnabled Then
Return
End If
Select Case e.KeyCode
Case Keys.F2
' Enabledプロパティの代わりにフラグを設定します。
'GcFunctionKey1.Enabled = False
_functionKeyEnabled = False
Debug.WriteLine("F2")
Case Keys.F3
Debug.WriteLine("F3")
End Select
End Sub
' ファンクションキーコントロールのEnabledのフラグ
Private _functionKeyEnabled As Boolean = True
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Enabledプロパティの代わりにフラグを設定します。
'GcFunctionKey1.Enabled = True
_functionKeyEnabled = True
End Sub
End Class
[C#]
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeInputMan();
}
private void InitializeInputMan()
{
// GcFunctionKeyの設定
gcFunctionKey1.FunctionKeyButtons.Add(new GrapeCity.Win.Bars.FunctionKeyButton(Keys.F2, "F2"));
gcFunctionKey1.FunctionKeyButtons.Add(new GrapeCity.Win.Bars.FunctionKeyButton(Keys.F3, "F3"));
}
private void gcFunctionKey1_FunctionKeyDown(object sender, KeyEventArgs e)
{
// フラグがFalseの場合には、FunctionKeyDownイベントの処理を行いません
if(!_functionKeyEnabled)
{
return;
}
switch (e.KeyCode)
{
case Keys.F2:
// Enabledプロパティの代わりにフラグを設定します。
//gcFunctionKey1.Enabled = false;
_functionKeyEnabled = false;
System.Diagnostics.Debug.WriteLine("F2");
break;
case Keys.F3:
System.Diagnostics.Debug.WriteLine("F3");
break;
default:
break;
}
}
// ファンクションキーコントロールのEnabledのフラグ
private bool _functionKeyEnabled = true;
private void button1_Click(object sender, EventArgs e)
{
// Enabledプロパティの代わりにフラグを設定します。
//gcFunctionKey1.Enabled = true;
_functionKeyEnabled = true;
}
}
}
キーワード
PPWI08186