SPREADのアクティブシートのセルにボタンセルタイプ(ButtonCellType)を設定した時の、 クリック時イベントの処理についてです。
以下のソースは、フォームロード時にSPREADの初期化を行っています。 アクティブシートのカラム数を3に設定し、ヘッダ行数を0でクリア設定しています。
フォーム表示後、ボタンをクリックすると、 クリックイベント内で宣言された固定的なテストデータをSPREADに設定し表示させます。
データの1行分毎の処理で、「RowCount」プロパティを+1して行を追加します。
追加された行の1カラム目にはボタンセルタイプ(ButtonCellType)を設定します。 ボタンのキャプションの設定は、ButtonCellTypeの「Text」プロパティに設定します。
2カラム目はテキストセルタイプ(TextCellType)を設定します。 データを設定するには、セルの「Text」プロパティに設定します。 TextCellTypeは先頭ゼロが省かれることなく、5個目のデータの"0000005"がそのまま表示されます。
3カラム目はチェックボックスセルタイプ(CheckBoxCellType)を設定します。 CheckBoxCellTypeの場合、データのチェックの状態を設定するには「Value」プロパティに設定します。
ボタンクリック時のイベントとしては、SPREADコントロールの「ButtonClicked」に処理を記述します。 「ButtonClicked」は「ButtonCellType」だけではなく以下のセルタイプでイベントが発生します。
・ButtonCellType ・CheckBoxCellType ・HyperlinkCellType ・MultiOptionCellType
下図は、最初、フォームが表示後、「Button1」をクリックした結果が以下の図です。
1行目の「001」ボタンをクリックした結果が以下の図です。 (メッセージBOXの表示をForm1の上に移動して画面キャプチャしていますので実際の表示位置とは異なります)
「ButtonClicked」イベントの引数である「e」のプロパティ「Row」「Column」で クリック時の行、カラム位置が分かります。このプロパティを使ってセルの情報を取得します。
5行目のチェックボックスをクリックした結果が以下の図です。
「ButtonClicked」がチェックボックスにも対応していることが分かります。 この時の3カラム目の値を見ると、チェックボックスが変化した後のチェックの状態を返す様です。 この点は注意が必要だと思います。
もし、セル上に各種のセルタイプのものが存在する場合は、カラム位置かもしくは、 イベントを発生させたControlオブジェクト(「e」のプロパティ「EditingControl」)で処理を分ける必要があります。
=====
2016/02/29:の時の情報
以下のソースは、フォームロード時にSPREADの初期化を行っています。 アクティブシートのカラム数を3に設定し、ヘッダ行数を0でクリア設定しています。
フォーム表示後、ボタンをクリックすると、 クリックイベント内で宣言された固定的なテストデータをSPREADに設定し表示させます。
データの1行分毎の処理で、「RowCount」プロパティを+1して行を追加します。
追加された行の1カラム目にはボタンセルタイプ(ButtonCellType)を設定します。 ボタンのキャプションの設定は、ButtonCellTypeの「Text」プロパティに設定します。
2カラム目はテキストセルタイプ(TextCellType)を設定します。 データを設定するには、セルの「Text」プロパティに設定します。 TextCellTypeは先頭ゼロが省かれることなく、5個目のデータの"0000005"がそのまま表示されます。
3カラム目はチェックボックスセルタイプ(CheckBoxCellType)を設定します。 CheckBoxCellTypeの場合、データのチェックの状態を設定するには「Value」プロパティに設定します。
ボタンクリック時のイベントとしては、SPREADコントロールの「ButtonClicked」に処理を記述します。 「ButtonClicked」は「ButtonCellType」だけではなく以下のセルタイプでイベントが発生します。
・ButtonCellType ・CheckBoxCellType ・HyperlinkCellType ・MultiOptionCellType
Public Class Form1
'フォームロード時にSPREADの初期化
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With Me.FpSpread1.ActiveSheet
'SPREADのアクティブシートのカラム数を3に設定
.ColumnCount = 3
'SPREADの行クリア
.RowCount = 0
End With
End Sub
'ボタンクリックでカラム連結処理
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'仮に4行分のデータ
Dim ArrData(,) As String = { _
{"001", "Test001", "True"}, _
{"002", "Test002", "False"}, _
{"003", "Test003", "True"}, _
{"004", "Test004", "False"}, _
{"005", "0000005", "False"} _
}
'ソースが長くなるのでWith宣言
With Me.FpSpread1.ActiveSheet
'データの行数分の処理
For i As Integer = 0 To ArrData.GetLength(0) - 1
'行数を増やす
.RowCount += 1
'第1カラムはボタン(ButtonCellType)
Dim buttonCell As New FarPoint.Win.Spread.CellType.ButtonCellType
buttonCell.Text = ArrData(i, 0) 'ボタンのキャプション
.Cells(i, 0).CellType = buttonCell
'第2カラムはテキスト(TextCellType)
Dim textCell As New FarPoint.Win.Spread.CellType.TextCellType
.Cells(i, 1).CellType = textCell
.Cells(i, 1).Text = ArrData(i, 1)
'第3カラムはチェックボックス(CheckBoxCellType)
Dim chkCell As New FarPoint.Win.Spread.CellType.CheckBoxCellType
.Cells(i, 2).CellType = chkCell
.Cells(i, 2).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center
.Cells(i, 2).Value = CBool(ArrData(i, 2)) '値はValueに設定
Next
End With
End Sub
'ボタンクリック時処理
Private Sub FpSpread1_ButtonClicked(ByVal sender As Object, _
ByVal e As FarPoint.Win.Spread.EditorNotifyEventArgs) _
Handles FpSpread1.ButtonClicked
Dim str As String = ""
With Me.FpSpread1.ActiveSheet
str &= "行(e.Row) = " & e.Row & vbCrLf
str &= "列(e.Column) = " & e.Column & vbCrLf
str &= "2カラム目 = " & .Cells(e.Row, 1).Text & vbCrLf
str &= "3カラム目 = " & CBool(.Cells(e.Row, 2).Value).ToString & vbCrLf
MsgBox(str)
End With
End Sub
End Class
下図は、最初、フォームが表示後、「Button1」をクリックした結果が以下の図です。
1行目の「001」ボタンをクリックした結果が以下の図です。 (メッセージBOXの表示をForm1の上に移動して画面キャプチャしていますので実際の表示位置とは異なります)
「ButtonClicked」イベントの引数である「e」のプロパティ「Row」「Column」で クリック時の行、カラム位置が分かります。このプロパティを使ってセルの情報を取得します。
5行目のチェックボックスをクリックした結果が以下の図です。
「ButtonClicked」がチェックボックスにも対応していることが分かります。 この時の3カラム目の値を見ると、チェックボックスが変化した後のチェックの状態を返す様です。 この点は注意が必要だと思います。
もし、セル上に各種のセルタイプのものが存在する場合は、カラム位置かもしくは、 イベントを発生させたControlオブジェクト(「e」のプロパティ「EditingControl」)で処理を分ける必要があります。
=====
2016/02/29:の時の情報
PR
コメント