2015年7月6日月曜日

SPREAD Enterキーでセルのタブ移動

SPREAD for Windows Forms5.0でEnterキーでセルのタブ移動する設定。

【事象】
汎用機等の利用者が旧システムと同様操作ができるようにEnterキーでセルのタブ移動をするようしたいと言う要求があります。
その設定(コード)を書きとめる。

【環境】
.NET VB (Microsoft Visual Studio 2010(sp1) .NET Framework 4)
SPREAD for Windows Forms Version : 5.0.2025.2008(SP3)(グレープシティ株式会社)

【対応】
以下のコードで対応

Enterキーで移動
Private Sub frmTail_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
    Dim im As New FarPoint.Win.Spread.InputMap
    'Enterキーで移動を追加
    '非編集セルでの[Enter]キーを「次行へ移動」とします
    im = vaSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused)
    im.Put(New FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None),        FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap)

    '編集中セルでの[Enter]キーを「次行へ移動」とします
    im = vaSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused)
    im.Put(New FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None),     FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap)
End Sub



コンボボックEnterキー押下でTab移動する
'コンボボックスオブジェクト
Private WithEvents _Combo As New FarPoint.Win.FpCombo()
    'Enterキーが押されたフラグ
    Dim bEnterKey As Boolean

Private Sub vaSpread1_EditModeOn(sender As System.Object, e As System.EventArgs) Handles vaSpread1.EditModeOn
    'セル型がコンボボックス型の場合は、EditingControlをComboにマッピングする 
    Dim iRow As Integer = vaSpread1.ActiveSheet.ActiveRowIndex 
    Dim iCol As Integer = vaSpread1.ActiveSheet.ActiveColumnIndex

    If TypeOf (vaSpread1.ActiveSheet.GetCellType(iRow, iCol)) Is FarPoint.Win.Spread.CellType.ComboBoxCellType Then
        _Combo = CType(vaSpread1.EditingControl, FarPoint.Win.FpCombo)
    End If
End Sub

Private Sub _Combo_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles _Combo.KeyDown
    ' Enterキーが押された場合にフラグを立てる
    bEnterKey = (e.KeyCode = Keys.Enter)
End Sub

Private Sub _Combo_DropDown(ByVal sender As Object, ByVal e As FarPoint.Win.DropDownEventArgs) Handles _Combo.DropDown
    ' フラグが立っている場合は、DropDown処理をキャンセルする
    If Not bEnterKey Then
        Return
    End If
    e.Cancel = bEnterKey
    bEnterKey = False

    ' アクティブセルを右隣に移動
    SendKeys.Send("{Tab}")
End Sub

'一覧コンボボックで空白選択だできない対応
Private Sub vaSpread1_ComboSelChange(sender As System.Object, e As FarPoint.Win.Spread.EditorNotifyEventArgs) Handles vaSpread1.ComboSelChange
    Dim cb As FarPoint.Win.FpCombo = CType(e.EditingControl, FarPoint.Win.FpCombo)
    If cb.SelectedItem.Equals(String.Empty) Then
        cb.Clear()
    End If
End Sub

0 件のコメント:

コメントを投稿