DateコントロールのShowLiteralsプロパティがPreDisplay/PostDisplayの場合に例外が発生する場合がある

文書番号 : 26835     文書種別 : 不具合     最終更新日 : 2009/03/19
文書を印刷する
対象製品
InputMan for .NET 4.0J Windows Forms Edition
発生環境
動作環境と同じ
状況
回避方法あり
詳細
DateコントロールのShowLiteralsプロパティがPreDisplay/PostDisplayの場合に、DeleteキーやBackspaceキーなどを押下した場合に例外が発生する場合があります。
回避方法
ShowLiteralsプロパティがAlwasの場合には例外が発生しません。特定のキーを押下されたタイミングでShowLiteralsプロパティを切り替えることで回避します。

[VB]
  ' 回避策用の変数を宣言します。
  Private showLiteralsValue As GrapeCity.Win.Input.ShowLiterals
  Private isClipboardCut As Boolean = False

  Public Sub New()
    InitializeComponent()

    ' 日付コントロールを初期化します。
    InitializeGcControls()
  End Sub

  Private Sub InitializeGcControls()
    ' 日付コントロールの設定をします。
    Date1.ShowLiterals = GrapeCity.Win.Input.ShowLiterals.PreDisplay
    showLiteralsValue = Date1.ShowLiterals
  End Sub

  Private Sub Date1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Date1.KeyDown
    ' Ctrl+x、Delete、Backspaceのいずれかの場合、フラグをONにしShowLiteralsプロパティをAlwaysに変更します。
    If (e.Control And e.KeyCode = Keys.X) Or e.KeyCode = Keys.Delete Or e.KeyCode = Keys.Back Then
      isClipboardCut = True
      Date1.ShowLiterals = GrapeCity.Win.Input.ShowLiterals.Always
    End If
  End Sub

  Private Sub Date1_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Date1.KeyUp
    ' フラグがONの場合、ShowLiteralsプロパティを元に戻します。
    If isClipboardCut Then
      isClipboardCut = False
      Date1.ShowLiterals = showLiteralsValue
    End If

[C#]
  // 回避策用の変数を宣言します。
  private GrapeCity.Win.Input.ShowLiterals showLiteralsValue;
  private bool isClipboardCut = false;
  
  public Form1()
  {
    InitializeComponent();

    // 日付コントロールを初期化します。
    InitializeGcControls();
  }

  private void InitializeGcControls()
  {
    // 日付コントロールの設定をします。
    date1.ShowLiterals = GrapeCity.Win.Input.ShowLiterals.PreDisplay;
    showLiteralsValue = date1.ShowLiterals;
    date1.KeyDown += new KeyEventHandler(date1_KeyDown);
    date1.KeyUp += new KeyEventHandler(date1_KeyUp);
  }

  private void date1_KeyDown(object sender, KeyEventArgs e)
  {
    // Ctrl+x、Delete、Backspaceのいずれかの場合、フラグをONにしShowLiteralsプロパティをAlwaysに変更します。
    if ((e.Control && e.KeyCode == Keys.X) || e.KeyCode==Keys.Delete || e.KeyCode==Keys.Back)
    {
      isClipboardCut = true;
      date1.ShowLiterals = GrapeCity.Win.Input.ShowLiterals.Always;
    }
  }

  private void date1_KeyUp(object sender, KeyEventArgs e)
  {
    // フラグがONの場合、ShowLiteralsプロパティを元に戻します。
    if (isClipboardCut)
    {
      isClipboardCut = false;
      date1.ShowLiterals = showLiteralsValue;
    }
  }
キーワード
INMN07285

この文書は、以前は次のバグレポートIDで公開されていました : 7898