MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集
編集中セルでのキー入力を検知する

編集中セルにおいて、各Keyイベント(FpSpreadクラスのKeyDown/KeyPress/KeyUpイベント:いずれもSystem.Windows.Forms.Controlから継承)は基本的に発生しません。/p>

このような場合は、編集中に利用されるエディターコントロール(FpSpread1.EditingControl)にハンドルすることで、各Keyイベントを発生させることができます。

但し、各Keyイベントの発生条件は入力マップの定義などにも大きく依存しますので、実装の際にはあらかじめ十分な動作確認を行ってください。

  • 各Keyイベントの詳細についてはMSDNライブラリをご参照ください。
  • シート上にフォーカスが存在する場合にはSPREADコントロールのKeyイベントを利用してください。(FormのKeyイベントでは取得できない場合があります)
  • 全てのキー入力に対し、KeyUp/KeyPress/KeyDownの各イベントが常に発生する訳ではありません。
  • 独自の機能を実装するためにファンクションキー([F2]〜[F4]など)のKeyイベントを発生させたい場合は、あらかじめこれらのキーに対する入力マップの定義を無効にしておく必要があります。
  • セルが編集中の場合や常時入力モード(EditModePermanentプロパティ=True)を定義している場合、[F10]キー押下による SPREADのKeyDownイベントが発生しないことがあります。 Windowsでは[F10]キーを[Alt]キーと同機能(メニューバーをアクティブにする)として使っており、SPREAD側ではこの動作を制御することができません。
  • 入力マップによる動作は、設定されているシートの操作モード(SheetViewクラスのOperationModeプロパティ)やセルの編集状態に大きく関係します。そのため、変更時には十分な動作検証を行う必要があります。
  • 編集中セルでは入力用のエディタコントロール(FpSpread1.EditingControl)が使われます。当コントロールはOSが提供するエディタクラスを利用しているため、例えば編集中セルにおける[BackSpace]キーなど、一般的な入力補助機能を制御することはできません。

 private void fpSpread1_EditModeOn(object sender, System.EventArgs e)
 {

   //セルの編集開始のタイミングで各Keyイベントをハンドルします
   fpSpread1.EditingControl.KeyDown += new KeyEventHandler(this.fpSpread1_KeyDown);

   fpSpread1.EditingControl.KeyPress += new KeyPressEventHandler(this.fpSpread1_KeyPress);

   fpSpread1.EditingControl.KeyUp += new KeyEventHandler(this.fpSpread1_KeyUp);

 }

 private void fpSpread1_EditModeOff(object sender, System.EventArgs e)
 {

   //セルの編集終了のタイミングで各Keyイベントのハンドルを解除します
   fpSpread1.EditingControl.KeyDown -= new KeyEventHandler(this.fpSpread1_KeyDown);

   fpSpread1.EditingControl.KeyPress -= new KeyPressEventHandler(this.fpSpread1_KeyPress);

   fpSpread1.EditingControl.KeyUp -= new KeyEventHandler(this.fpSpread1_KeyUp);

 }

 private void fpSpread1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
 {
   Console.WriteLine("KeyDownイベント:" + e.KeyCode.ToString());
 }

 private void fpSpread1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
 {
   Console.WriteLine("KeyPressイベント:" + e.KeyChar.ToString());
 }

 private void fpSpread1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
 {
   Console.WriteLine("KeyUpイベント:" + e.KeyCode.ToString());
 }
 Private Sub FpSpread1_EditModeOn(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOn

   'セルの編集開始のタイミングで各Keyイベントをハンドルします
   Dim KeyDownHandler As KeyEventHandler = AddressOf FpSpread1_KeyDown
   AddHandler FpSpread1.EditingControl.KeyDown, KeyDownHandler

   Dim KeyPressHandler As KeyPressEventHandler = AddressOf FpSpread1_KeyPress
   AddHandler FpSpread1.EditingControl.KeyPress, KeyPressHandler

   Dim KeyUpHandler As KeyEventHandler = AddressOf FpSpread1_KeyUp
   AddHandler FpSpread1.EditingControl.KeyUp, KeyUpHandler

 End Sub

 Private Sub FpSpread1_EditModeOff(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOff

   'セルの編集終了のタイミングで各Keyイベントのハンドルを解除します
   Dim KeyDownHandler As KeyEventHandler = AddressOf FpSpread1_KeyDown
   RemoveHandler FpSpread1.EditingControl.KeyDown, KeyDownHandler

   Dim KeyPressHandler As KeyPressEventHandler = AddressOf FpSpread1_KeyPress
   RemoveHandler FpSpread1.EditingControl.KeyPress, KeyPressHandler

   Dim KeyUpHandler As KeyEventHandler = AddressOf FpSpread1_KeyUp
   RemoveHandler FpSpread1.EditingControl.KeyUp, KeyUpHandler

 End Sub

 Private Sub FpSpread1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles FpSpread1.KeyDown
   Console.WriteLine("KeyDownイベント:" + e.KeyCode.ToString)
 End Sub

 Private Sub FpSpread1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles FpSpread1.KeyPress
   Console.WriteLine("KeyPressイベント:" + e.KeyChar.ToString)
 End Sub

 Private Sub FpSpread1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles FpSpread1.KeyUp
   Console.WriteLine("KeyUpイベント:" + e.KeyCode.ToString)
 End Sub

 

 


© MESCIUS inc. All rights reserved.