コードからセル型を設定する
セルのタイプを変更する操作は、SPREADデザイナを使って行うことができますが、このプログラムではコードからセル型を変更し作成するようにします。
セルの文字列の位置の調整
最初に、データを表示するセルの文字位置がセルの中心に来るようにします。
これは、Cell
オブジェクトのHorizontalAlignmen
プロパティとVerticalAlignment
プロパティを使用します。設定値は、それぞれ「CellHorizontalAlignment列挙型」と「CellHorizontalAlignment列挙型」のメンバです。
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.FpSpread1.ActiveSheet.Cells(0, 2).HorizontalAlignment = _ FarPoint.Win.Spread.CellHorizontalAlignment.Center Me.FpSpread1.ActiveSheet.Cells(0, 2).VerticalAlignment = _ FarPoint.Win.Spread.CellVerticalAlignment.Center Me.FpSpread1.ActiveSheet.Cells(1, 2).HorizontalAlignment = _ FarPoint.Win.Spread.CellHorizontalAlignment.Center Me.FpSpread1.ActiveSheet.Cells(1, 2).VerticalAlignment = _ FarPoint.Win.Spread.CellVerticalAlignment.Center
private void Form1_Load(object sender, EventArgs e) { fpSpread1.ActiveSheet.Cells[0, 2].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; fpSpread1.ActiveSheet.Cells[0, 2].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center; fpSpread1.ActiveSheet.Cells[1, 2].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center; fpSpread1.ActiveSheet.Cells[1, 2].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
メンバ | 説明 |
General | セルの内容を、セルによる内容の解釈に合わせて配置します。 |
Left | セルの内容を左揃えにします。 |
Center | セルの内容を(左右の)中央揃えにします。 |
Right | セルの内容を右揃えにします。 |
ボタン型の作成
フォームのLoadイベントハンドラで、2つのボタン型を作成しセルに設定します。
ボタン型は、FarPoint.Win.Spread.CellType名前空間のクラス「ButtonCellType」なので、このコンストラクタでインスタンスを作成します。
そして、Text
プロパティでボタン表面の文字を設定し、Cell
オブジェクトのCellType
プロパティに、このButtonCellType
オブジェクトを設定します。このプログラムでは、1行目の1列目と2列目のセルをボタン型にします。
Dim btn1 As New FarPoint.Win.Spread.CellType.ButtonCellType() btn1.Text = "加算" FpSpread1.ActiveSheet.Cells(0, 0).CellType = btn1 Dim btn2 As New FarPoint.Win.Spread.CellType.ButtonCellType() btn2.Text = "減算" FpSpread1.ActiveSheet.Cells(0, 1).CellType = btn2
FarPoint.Win.Spread.CellType.ButtonCellType btn1 = new FarPoint.Win.Spread.CellType.ButtonCellType(); btn1.Text = "加算"; fpSpread1.ActiveSheet.Cells[0, 0].CellType = btn1; FarPoint.Win.Spread.CellType.ButtonCellType btn2 = new FarPoint.Win.Spread.CellType.ButtonCellType(); btn2.Text = "減算"; fpSpread1.ActiveSheet.Cells[0, 1].CellType = btn2;
ボタンのイベント処理
ボタン型セルのボタンがクリックされると、FpSpreadコンポーネントにButtonClickedというイベントが発生します。
ただし、複数のボタンをセル型に指定している場合は、どのボタンが押されたのかが分かりませんから、押されたボタンがあるセルの行列番号で把握します。これは、イベントハンドラの引数e
のColumn
またはRow
プロパティを参照します。
[加算]ボタンは列「0」に、[減算]ボタンは列「1」に作成しましたので、この数字で押されたボタンを判別します。そして、セル「0,2」の値を加算または減算します。
Private Sub FpSpread1_ButtonClicked(ByVal sender As Object, _ ByVal e As FarPoint.Win.Spread.EditorNotifyEventArgs) _ Handles FpSpread1.ButtonClicked If e.Column = 0 Then Me.FpSpread1.ActiveSheet.Cells(0, 2).Value += 1 ElseIf e.Column = 1 Then Me.FpSpread1.ActiveSheet.Cells(0, 2).Value -= 1 End If
C#では、セルの値を直接加減算することができないようなので、1度変数に代入して加減算したあとに、再度セルに値を戻す形にします。
private void fpSpread1_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e) { if(e.Column == 0){ int i = (int)fpSpread1.ActiveSheet.Cells[0, 2].Value; i++; fpSpread1.ActiveSheet.Cells[0,2].Value = i; }else if(e.Column == 1){ int i = (int)fpSpread1.ActiveSheet.Cells[0, 2].Value; i--; fpSpread1.ActiveSheet.Cells[0, 2].Value = i; }
セルの値を変更したら、値が0以上であればセルの文字色を青色に、0未満のマイナスになれば赤色に変更します。これは、Cell
オブジェクトのForeColor
プロパティの値を変更します。
If Me.FpSpread1.ActiveSheet.Cells(0, 2).Value < 0 Then Me.FpSpread1.ActiveSheet.Cells(0, 2).ForeColor = Color.Red Else Me.FpSpread1.ActiveSheet.Cells(0, 2).ForeColor = Color.Blue End If
if((int)fpSpread1.ActiveSheet.Cells[0, 2].Value < 0){ fpSpread1.ActiveSheet.Cells[0, 2].ForeColor = Color.Red; }else{ fpSpread1.ActiveSheet.Cells[0, 2].ForeColor = Color.Blue; }
スライダーとプログレスバー型の作成
今度は、スライダーとプログレスバー型を作成します。これも、フォームのLoadイベントハンドラで行います。スライダー型はSliderCellType
クラスのインスタンスを、プログレスバー型はProgressCellType
クラスのインスタンスを作成します。
作成したら、2つのコントロールの動作範囲をそれぞれMinimum
、Maximum
プロパティで設定します。
そして、Cell
オブジェクトのCellType
プロパティに設定します。
Dim sl As New FarPoint.Win.Spread.CellType.SliderCellType() sl.Minimum = 0 sl.Maximum = 100 FpSpread1.ActiveSheet.Cells(1, 0).CellType = sl FpSpread1.ActiveSheet.Cells(1, 0).Value = 50
Dim pg As New FarPoint.Win.Spread.CellType.ProgressCellType() pg.Maximum = 100 pg.Minimum = 0 FpSpread1.ActiveSheet.Cells(1, 1).CellType = pg FpSpread1.ActiveSheet.Cells(1, 1).Value = 50
スライダーのイベント処理
スライダーがユーザーによって操作されると、FpSpreadコンポーネントにEditChangeイベントが発生します。ここでも、どのセルのスライダーが操作されたのかを知るために、イベントハンドラの引数e
のColumn
またはRow
プロパティを参照します。
このスライダーは、セル「1,0」に作成したので、Column
、Row
プロパティがこの値のときだけ処理を実行させます。
ここでは、プログレスバーの値をスライダーの値と一致させますが、プログレスバーの値を変えるのではなく、プログレスバーがあるセルの値を変更します。また、隣の列のセルにスライダーの値を10倍した値も代入します。
Private Sub FpSpread1_EditChange(ByVal sender As Object, _ ByVal e As FarPoint.Win.Spread.EditorNotifyEventArgs) _ Handles FpSpread1.EditChange If e.Row = 1 And e.Column = 0 Then FpSpread1.ActiveSheet.Cells(1, 1).Value = _ FpSpread1.ActiveSheet.Cells(1, 0).Value FpSpread1.ActiveSheet.Cells(1, 2).Value = _ FpSpread1.ActiveSheet.Cells(1, 0).Value * 10 End If End Sub
ここでも、C#ではセルの値を直接演算することができないようなので、1度変数に代入して加減算したあとに、再度セルに値を戻す形にします。
private void fpSpread1_EditChange(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e) { if(e.Row == 1 & e.Column == 0){ fpSpread1.ActiveSheet.Cells[1, 1].Value = fpSpread1.ActiveSheet.Cells[1, 0].Value; int i = (int)fpSpread1.ActiveSheet.Cells[1, 0].Value; i*=10; fpSpread1.ActiveSheet.Cells[1, 2].Value = i; }
まとめ
セルのデータ入力にボタンやスライダーが使えると便利です。また、データの表示をプログレスバーなどにすると、入力値が視覚的に把握できるのでユーザー受けのするGUIをアプリケーションに組み込むことができます。