マスタのメンテテンス用プログラムとしては、1個のウインドウでいろんな項目を入力するのですが、 基本的には項目名とそれに対応するデータ入力コントロールとしてテキストボックス等を設置します。
このテキストボックスには入力の書式や、キーデータの選択等を自分で組んでやる必要があります。 市販の入力用コントロールを使えばいいのですが、自分で組むと結構大変です。
そこで、SPREADの出番なのですが、SPREAD自身には既に入力コントロールが備わっています。 これを使わない手はありません。SPREADなので表形式になってしまいますが、 この形が許されるのであれば、SPREADを使っていいのではと思います。
SPREADには、数値セルタイプとして CurrencyCellType , NumberCellType がありますが、 今回は NumberCellType を使って数値用のメンテナンスを行う場合を想定した例を紹介します。
画面の表示は以下の様になります。
以下の今回のソースを示しますが、フォームのロード時に全ての数値セルの CellType を設定しています。 尚、最後のコード的なセルは、通常では編集入力後の表示で先頭ゼロを行う様に、 NumberCellType を拡張したクラスを定義しています。
また、セルの編集時には背景色と文字色を変更して入力を分かりやすくしています。
下図は、「Button1」をクリックした時の表示です。
■SPREADをコントロールを何個も設置
SPREADの表形式が気に入らないのであれば、テキストボックスを何個も設置する様に 1セルしかないSPREADを個別に設置し、それぞれのSPREADのセルにCellTypeを設定してやれば テキストボックス的に使えます。
この方法だと、SPREADコントロールを何個も設置するのでプログラムの動きが重くなるかも しれませんが、意外と使える方法だと思いますが、如何でしょうか?
=====
2016/03/18:の時の情報
このテキストボックスには入力の書式や、キーデータの選択等を自分で組んでやる必要があります。 市販の入力用コントロールを使えばいいのですが、自分で組むと結構大変です。
そこで、SPREADの出番なのですが、SPREAD自身には既に入力コントロールが備わっています。 これを使わない手はありません。SPREADなので表形式になってしまいますが、 この形が許されるのであれば、SPREADを使っていいのではと思います。
SPREADには、数値セルタイプとして CurrencyCellType , NumberCellType がありますが、 今回は NumberCellType を使って数値用のメンテナンスを行う場合を想定した例を紹介します。
画面の表示は以下の様になります。
以下の今回のソースを示しますが、フォームのロード時に全ての数値セルの CellType を設定しています。 尚、最後のコード的なセルは、通常では編集入力後の表示で先頭ゼロを行う様に、 NumberCellType を拡張したクラスを定義しています。
また、セルの編集時には背景色と文字色を変更して入力を分かりやすくしています。
Imports FarPoint.Win.Spread.CellType Public Class Form1 'フォームロード時イベントで各数値セルの初期化 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim NumCell As New NumberCellType '【ZZ9】 With NumCell .DecimalPlaces = 0 .MaximumValue = 999 .MinimumValue = 0 End With FpSpread1.ActiveSheet.Cells(0, 1).CellType = NumCell '【ZZ9.99】 NumCell = New NumberCellType With NumCell .DecimalPlaces = 2 .MaximumValue = 999.99 .MinimumValue = 0 End With FpSpread1.ActiveSheet.Cells(1, 1).CellType = NumCell '【-ZZ9~ZZ9】 NumCell = New NumberCellType With NumCell .DecimalPlaces = 0 .MaximumValue = 999 .MinimumValue = -999 .NegativeRed = True End With FpSpread1.ActiveSheet.Cells(2, 1).CellType = NumCell '【-ZZ9.99~ZZ9.99】 NumCell = New NumberCellType With NumCell .DecimalPlaces = 2 .MaximumValue = 999.99 .MinimumValue = -999.99 .NegativeRed = True End With FpSpread1.ActiveSheet.Cells(3, 1).CellType = NumCell '【-ZZ,ZZ9~ZZ,ZZ9】 NumCell = New NumberCellType With NumCell .DecimalPlaces = 0 .MaximumValue = 99999 .MinimumValue = -99999 .NegativeRed = True .Separator = "," .ShowSeparator = True End With FpSpread1.ActiveSheet.Cells(4, 1).CellType = NumCell '【CODE 99999】 Dim CdCell = New CodeCellType With CdCell .MaximumValue = 99999 .MinimumValue = 0 End With FpSpread1.ActiveSheet.Cells(5, 1).CellType = CdCell End Sub '編集中に背景色と文字色を変える Private Sub FpSpread1_EditModeOn(sender As Object, e As EventArgs) Handles FpSpread1.EditModeOn CType(FpSpread1.EditingControl, GeneralEditor).BackColor = Color.AntiqueWhite CType(FpSpread1.EditingControl, GeneralEditor).ForeColor = Color.Blue End Sub '入力データの取得・表示 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim str As String = "" str &= "ZZ9 : " & Me.FpSpread1.ActiveSheet.GetValue(0, 1) & vbCrLf str &= "ZZ9.99 : " & Me.FpSpread1.ActiveSheet.GetValue(1, 1) & vbCrLf str &= "-ZZ9~ZZ9 : " & Me.FpSpread1.ActiveSheet.GetValue(2, 1) & vbCrLf str &= "-ZZ9.99~ZZ9.99 : " & Me.FpSpread1.ActiveSheet.GetValue(3, 1) & vbCrLf str &= "-ZZ,ZZ9~ZZ,ZZ9 : " & Me.FpSpread1.ActiveSheet.GetValue(4, 1) & vbCrLf str &= "CODE 99999 : " & Me.FpSpread1.ActiveSheet.GetValue(5, 1) & vbCrLf MsgBox(str, "数値入力テスト") End Sub End Class '【CODE用カスタムセルクラス】 Public Class CodeCellType Inherits FarPoint.Win.Spread.CellType.NumberCellType Public Sub New() MyBase.New() Me.DecimalPlaces = 0 End Sub '編集を抜ける時に先頭ゼロ付きで表示 Public Overrides Function Format(ByVal obj As Object) As String Dim Val As Decimal = Convert.ToDecimal(obj) Dim Len As Integer = Me.MaximumValue.ToString.Length Return Val.ToString(New String("0"c, Len)) End Function End Class
下図は、「Button1」をクリックした時の表示です。
■SPREADをコントロールを何個も設置
SPREADの表形式が気に入らないのであれば、テキストボックスを何個も設置する様に 1セルしかないSPREADを個別に設置し、それぞれのSPREADのセルにCellTypeを設定してやれば テキストボックス的に使えます。
この方法だと、SPREADコントロールを何個も設置するのでプログラムの動きが重くなるかも しれませんが、意外と使える方法だと思いますが、如何でしょうか?
=====
2016/03/18:の時の情報
PR
コメント