GcFunctionKeyのFunctionKeyDownイベントでEnabledプロパティをFalseにするとその後のFunctionKeyDownイベントが発生しない

文書番号 : 30420     文書種別 : 不具合     最終更新日 : 2011/01/25
文書を印刷する
対象製品
PlusPak for Windows Forms 5.0J
状況
現象確認済み
詳細
GcFunctionKeyの FunctionKeyDownイベント内で GcFunctionKeyの Enabledプロパティを Falseにすると、Trueに戻した後の、初回の 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;
    }
  }
}
キーワード
PPWI08186