忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

VB.NET:Spread(GrapeCity)データ一覧表示での行選択処理(CellDoubleClickイベント , KeyDownイベント)
SPREADを使ってマスタメンテナンスのマスタデータの一覧を表示した時に、行選択して何かを行いたい場合があります。 この場合には、セルダブルクリック(CellDoubleClick)もしくはキーダウン(KeyDown)イベント時にその処理を書きます。

以下のソースの説明ですが、SPREADコントロールのアクティブシートの「OperationMode」プロパティを「SingleSelect」に設定することで、 1行の選択が出来る様になります。選択された行はデフォルトでは薄い青色になり、選択されている状態がわかります。

SPREADコントロールの各種のプロパティの設定し、アクティブシートの設定を行った後で テストデータの一覧表示を行っています。

一覧表示の最後で、「AddSelection」により行選択を強制的に行っていますが、 この処理が無いと、最初に一覧を表示した時に選択状態の表示にならないので注意が必要です。
セルダブルクリック及び、キーダウンイベントでアクティブな行の第1カラム目のデータを単にメッセージボックスで 表示させるだけの簡単な処理を行います。
尚、セルダブルクリック時にはヘッダーダブルクリックの場合には処理を行わない様にします。

Imports FarPoint.Win
Public Class Form1
    'フォームロード時にSPREADの初期化
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'SPREADの設定
        With Me.FpSpread1
            'スクロールバーの設定
            .HorizontalScrollBarPolicy = Spread.ScrollBarPolicy.AsNeeded
            .VerticalScrollBarPolicy = Spread.ScrollBarPolicy.AsNeeded
            '分割ボックスの設定
            .ColumnSplitBoxPolicy = Spread.SplitBoxPolicy.Never
            .RowSplitBoxPolicy = Spread.SplitBoxPolicy.Never
            'カーソル設定
            .SetCursor(Spread.CursorType.Normal, Windows.Forms.Cursors.Arrow)
            .SetCursor(Spread.CursorType.LockedCell, Windows.Forms.Cursors.Arrow)
            'セルがアクティブ時に編集モードにしない
            .EditModePermanent = False
            'セルがアクティブ時に既存の内容を選択しない
            .EditModeReplace = False
        End With
        'アクティブシートの設定
        With Me.FpSpread1.ActiveSheet
            '選択状態
            .SelectionStyle = Spread.SelectionStyles.SelectionRenderer
            '編集モードの設定
            .OperationMode = Spread.OperationMode.SingleSelect
            '列のサイズ変更可、行のサイズ変更不可に設定する。
            .Columns.Default.Resizable = True
            .Rows.Default.Resizable = False
            'SPREADのアクティブシートのカラム数を3に設定
            .ColumnCount = 3
            'SPREADの行クリア
            .RowCount = 0
        End With

        '一覧データ表示
        Call Me.DisplayData()
    End Sub

    '一覧データ表示
    Private Sub DisplayData()
        'ソースが長くなるのでWith宣言
        With Me.FpSpread1.ActiveSheet
            '描画を停止させる
            Me.FpSpread1.SuspendLayout()
            'データの行数分の処理
            For i As Integer = 0 To 999
                '行数を増やす
                .RowCount += 1
                '各セルへのデータ設定
                .SetText(i, 0, "A" & i.ToString("000"))
                .SetText(i, 1, "B" & i.ToString("000"))
                .SetText(i, 2, "C" & i.ToString("000"))
            Next
        End With
        '描画を再開させる
        Me.FpSpread1.ResumeLayout(True)
        '先頭行を選択設定(1行目が選択色になる)
        Me.FpSpread1.ActiveSheet.AddSelection(0, 0, 1, 1)
    End Sub

    'セルダブルクリック時処理 
    Private Sub FpSpread1_CellDoubleClick(ByVal sender As System.Object,
              ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
        'ヘッダーダブルクリックの場合抜ける
        If e.ColumnHeader = True Then
            Return
        End If
        'シートにデータ行が在るか??
        If FpSpread1.ActiveSheet.RowCount > 0 Then
            'デフォルト処理のキャンセル
            e.Cancel = True
            'Spreadからコードの取得
            Dim str As String = "第1カラムデータ = " & _
                Me.FpSpread1.ActiveSheet.GetValue(e.Row, 0)
            MsgBox(str)
        End If
    End Sub

    'キーダウン時処理
    Private Sub FpSpread1_KeyDown(ByVal sender As Object, 
                        ByVal e As System.Windows.Forms.KeyEventArgs) Handles FpSpread1.KeyDown
        'Enterキー押下したとき
        If e.KeyCode = Windows.Forms.Keys.Enter Then
            'Spreadからコードの取得
            Dim str As String = "第1カラムデータ = " & _
                Me.FpSpread1.ActiveSheet.GetValue(Me.FpSpread1.ActiveSheet.ActiveRowIndex, 0)
            MsgBox(str)
        End If
    End Sub
End Class

下図は、フォーム表示後、2行目をダブルクリックしてメッセージボックスを表示した時の表示です。



=====
2016/02/29:の時の情報











PR

コメント

コメントを書く