MESCIUS SPREAD for Windows Forms 17.0J
フォームコントロールの使用

SPREAD for Window Forms は、ボタン、コンボ ボックス、チェックボックス、スピンボタン、リストボックス、オプションボタン、グループボックス、ラベル、スクロールなど、ダイアログシート用のいくつかのフォームコントロールを揃えています。これらのフォームコントロールを使用すると、データを操作できるワークシートにオブジェクトを挿入することができます。また、フォームコントロールを使用することで、Spread ワークシート内のセルデータを簡単に操作できます。

AddFormControl メソッドを使用してフォーム コントロールを追加する

フォーム コントロールを追加するには、IShape インタフェースの AddFormControl メソッドを使用できます。このメソッドは、パラメータとしてFormControl 列挙型を渡します。

次のサンプル コードは、ワークシートにボタンフォーム コントロールを追加します。

C#
コードのコピー
// 拡張シェイプエンジンを true に設定します
fpSpread1.Features.EnhancedShapeEngine = true;
// ボタン コントロールを追加します
fpSpread1.AsWorkbook().ActiveSheet.Cells[0, 0].Value = "Button";
var btn = fpSpread1.AsWorkbook().ActiveSheet.Shapes.AddFormControl(FormControl.Button, 80, 40, 100, 20);
btn.ControlFormat.Enabled = false;
btn.Name = "Button Shape";
btn.CanMove = Moving.None;
btn.CanSize = Sizing.Width;

Visual Basic
コードのコピー
' 拡張シェイプエンジンを true に設定します

fpSpread1.Features.EnhancedShapeEngine = True

' ボタン コントロールを追加します

fpSpread1.AsWorkbook().ActiveSheet.Cells(0, 0).Value = "Button"
Dim btn = fpSpread1.AsWorkbook().ActiveSheet.Shapes.AddFormControl(FormControl.Button, 80, 40, 100, 20)
btn.ControlFormat.Enabled = False
btn.Name = "Button Shape"
btn.CanMove = Moving.None
btn.CanSize = Sizing.Width

上述と同様に、AddFormControlメツッド を使用して他のコントロールを追加し、特定のコントロールに対する適切な列挙型パラメータを渡すこともできます。

IWorkSheet インタフェースを使用してフォーム コントロールを追加する

ワークシートを表すIWorksheet インタフェースを使用して、ワークシートにフォーム コントロールを追加することをできます。これを行うには、IWorksheet インタフェースによってが提供するプロパティを使用します。

Form Control UI Using the API

Button

C#
コードのコピー
// ボタン
var button = fpSpread1.AsWorkbook().ActiveSheet.Buttons.Add(0, 200, 200, 50);
button.Text = "クリックする";

Visual Basic
コードのコピー
Dim button = fpSpread1.AsWorkbook().ActiveSheet.Buttons.Add(0, 200, 200, 50)
button.Text = "クリックする"

ComboBox

C#
コードのコピー
var dropDown = fpSpread1.AsWorkbook().ActiveSheet.DropDowns.Add(70, 170, 105, 20);
dropDown.AddItem("Sales");
dropDown.AddItem("Tech");
dropDown.AddItem("Management");

Visual Basic
コードのコピー
Dim dropDown = fpSpread1.AsWorkbook().ActiveSheet.DropDowns.Add(70, 170, 105, 20)
dropDown.AddItem("Sales")
dropDown.AddItem("Tech")
dropDown.AddItem("Management")

CheckBox

C#
コードのコピー
var chkBox = fpSpread1.AsWorkbook().ActiveSheet.CheckBoxes.Add(100, 130, 100, 20);
chkBox.Text = "サッカー";

Visual Basic
コードのコピー
Dim chkBox = fpSpread1.AsWorkbook().ActiveSheet.CheckBoxes.Add(100, 130, 100, 20)
chkBox.Text = "サッカー"

OptionButton

C#
コードのコピー
var opt1 = fpSpread1.AsWorkbook().ActiveSheet.OptionButtons.Add(0, 75, 100, 20);
opt1.Text = "男性";
opt1.Checked = true;
var opt2 = fpSpread1.AsWorkbook().ActiveSheet.OptionButtons.Add(100, 75, 100, 20);
opt2.Text = "女性";

Visual Basic
コードのコピー
Dim opt1 = fpSpread1.AsWorkbook().ActiveSheet.OptionButtons.Add(0, 75, 100, 20)
opt1.Text = "男性"
opt1.Checked = True
Dim opt2 = fpSpread1.AsWorkbook().ActiveSheet.OptionButtons.Add(100, 75, 100, 20)
opt2.Text = "女性"

ListBox

C#
コードのコピー
//リストボックス
fpSpread1.AsWorkbook().ActiveSheet.Cells[7, 0].Value = "Department:";
var list = fpSpread1.AsWorkbook().ActiveSheet.ListBoxes.Add(70, 170, 105, 20);
list.MultiSelect = GrapeCity.Spreadsheet.Drawing.SelectionMode.Simple;
list.ListFillRange = "E1:E14";
list.Enabled = true;
list.Height = 100;

Visual Basic
コードのコピー
' リストボックス
fpSpread1.AsWorkbook().ActiveSheet.Cells(7, 0).Value = "Department:"
Dim list = fpSpread1.AsWorkbook().ActiveSheet.ListBoxes.Add(70, 170, 105, 20)
list.MultiSelect = GrapeCity.Spreadsheet.Drawing.SelectionMode.Simple
list.ListFillRange = "E1:E14"
list.Enabled = True
list.Height = 100

SpinButton

C#
コードのコピー
var spinner = fpSpread1.AsWorkbook().ActiveSheet.Spinners.Add(130, 25, 50, 50);
spinner.Value = 18;
spinner.LinkedCell = "B2";

Visual Basic
コードのコピー
Dim spinner = fpSpread1.AsWorkbook().ActiveSheet.Spinners.Add(130, 25, 50, 50)
spinner.Value = 18
spinner.LinkedCell = "B2"

GroupBox

C#
コードのコピー
//グループボックス
var grpGender = fpSpread1.AsWorkbook().ActiveSheet.GroupBoxes.Add(0, 60, 200, 50);
grpGender.Text = "性別";
var opt1 = fpSpread1.AsWorkbook().ActiveSheet.OptionButtons.Add(0, 75, 100, 20);
opt1.Text = "男性";
opt1.Checked = true;
var opt2 = fpSpread1.AsWorkbook().ActiveSheet.OptionButtons.Add(100, 75, 100, 20);
opt2.Text = "女性";

Visual Basic
コードのコピー
Dim grpGender = fpSpread1.AsWorkbook().ActiveSheet.GroupBoxes.Add(0, 60, 200, 50)
grpGender.Text = "性別"
Dim opt1 = fpSpread1.AsWorkbook().ActiveSheet.OptionButtons.Add(0, 75, 100, 20)
opt1.Text = "男性"
opt1.Checked = True
Dim opt2 = fpSpread1.AsWorkbook().ActiveSheet.OptionButtons.Add(100, 75, 100, 20)
opt2.Text = "女性"

Label

C#
コードのコピー
var lbl = fpSpread1.AsWorkbook().ActiveSheet.Labels.Add(150, 170, 200, 50);
lbl.Text = "ラベルです。";

Visual Basic
コードのコピー
Dim lbl = fpSpread1.AsWorkbook().ActiveSheet.Labels.Add(150, 170, 200, 50)
lbl.Text = "ラベルです。"

Scrollbar

C#
コードのコピー
var scrollBar = fpSpread1.AsWorkbook().ActiveSheet.ScrollBars.Add(150, 170, 250, 50);
scrollBar.Display3DShading = true; 

Visual Basic
コードのコピー
Dim scrollBar = fpSpread1.AsWorkbook().ActiveSheet.ScrollBars.Add(150, 170, 250, 50)
scrollBar.Display3DShading = True

LinkedCell プロパティの使用

SPREAD のフォーム コントロールの主な機能は、LinkedCell プロパティを使用して、フォーム コントロールの値をセルにリンクできることです。

LinkedCell プロパティは、コントロールの値にリンクされているワークシート範囲を設定します。例えば、次のサンプル コードは、コンボ ボックスからアイテムを選択する方法と、それが A1 セルの値にどのように影響するかを示します 。コンボ ボックスから項目を選択した後、 A1 セルの値への影響を示しています。

C#
コードのコピー
var dropDown = fpSpread1.AsWorkbook().ActiveSheet.DropDowns.Add(70, 170, 105, 20);
dropDown.AddItem("Sales");
dropDown.AddItem("Tech");
dropDown.AddItem("Management");
dropDown.LinkedCell = "A1";

Visual Basic
コードのコピー
Dim dropDown = fpSpread1.AsWorkbook().ActiveSheet.DropDowns.Add(70, 170, 105, 20)
dropDown.AddItem("Sales")
dropDown.AddItem("Tech")
dropDown.AddItem("Management")
dropDown.LinkedCell = "A1"

イベントの使用

Click イベント

IFormControl インタフェースのClickイベントには、コントロールをクリックするときに発生しますする Click イベントがあります。例えば、ComboBox フォームコントロールでもに対して、 DropDown_Click イベントを呼び出すことができます。

次のサンプル コードは、ComboBox コントロールをクリックして、特定のセル範囲から取得されたアイテムのを含んだドロップダウンリストを開く方法を示しています開きます。

C#
コードのコピー
public Form1()
{
    InitializeComponent();
    fpSpread1.Features.EnhancedShapeEngine = true;
    // セル A1 からセルA5まで に値を追加します
    fpSpread1.AsWorkbook().ActiveSheet.Cells["A1"].Value = 1;
    fpSpread1.AsWorkbook().ActiveSheet.Cells["A2"].Value = 2;
    fpSpread1.AsWorkbook().ActiveSheet.Cells["A3"].Value = 3;
    fpSpread1.AsWorkbook().ActiveSheet.Cells["A4"].Value = 4;
    fpSpread1.AsWorkbook().ActiveSheet.Cells["A5"].Value = 5;
    //最初のセルにドロップダウンを追加します
    var dropDown = fpSpread1.AsWorkbook().ActiveSheet.DropDowns.Add(70, 0, 100, 25);
    dropDown.ListFillRange = "A1:A5"; //ドロップダウン リストに指定された範囲を入力します
    dropDown.Click += DropDown_Click;  //クリック イベントを処理します
}
/// <summary>
/// ドロップダウンのClickイベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DropDown_Click(object sender, EventArgs e)
{
    MessageBox.Show("Changed");
}

Visual Basic
コードのコピー
Class SurroundingClass
    Public Sub New()
        InitializeComponent()
        fpSpread1.Features.EnhancedShapeEngine = True
        ' セル A1 からセルA5まで に値を追加します
        fpSpread1.AsWorkbook().ActiveSheet.Cells("A1").Value = 1
        fpSpread1.AsWorkbook().ActiveSheet.Cells("A2").Value = 2
        fpSpread1.AsWorkbook().ActiveSheet.Cells("A3").Value = 3
        fpSpread1.AsWorkbook().ActiveSheet.Cells("A4").Value = 4
        fpSpread1.AsWorkbook().ActiveSheet.Cells("A5").Value = 5
        ' 最初のセルにドロップダウンを追加します
        Dim dropDown = fpSpread1.AsWorkbook().ActiveSheet.DropDowns.Add(70, 0, 100, 25)
        dropDown.ListFillRange = "A1:A5" ' ドロップダウン リストに指定された範囲を入力します
        dropDown.Click += AddressOf DropDown_Click ' クリック イベントを処理します
    End Sub
' <summary>
' ドロップダウンのClickイベント
' </summary>
' <param name="sender"></param>
/// <param name="e"></param>
    Private Sub DropDown_Click(ByVal sender As Object, ByVal e As EventArgs)
        MessageBox.Show("Changed")
    End Sub
End Class

マクロの割り当て

Spreadでは、VBAコードをインポートして実行できる機能に対応していませんが、VBA関数と同名の関数がある場合、 独自のロジックを実行できます。ただし、関数が検出する されるために、次の条件を満たしている必要があります。

したがって、XLSX ファイルを開くと、関連する VBA 関数名がインポートされます。また、関連付けられている関数を持つコントロールを操作すると、その関数も呼び出されます。

C#
コードのコピー
public static void Button3_Click()
{
    MessageBox.Show("Assigned Macro Sample. Button3_Click");
}
public static void Button_click(object sender, EventArgs args)
{
    MessageBox.Show("Assigned Macro Sample Method. Button_click");
}

Visual Basic
コードのコピー
Class SurroundingClass
    Public Shared Sub Button3_Click()
        MessageBox.Show("Assigned Macro Sample. Button3_Click")
    End Sub
    Public Shared Sub Button_click(ByVal sender As Object, ByVal args As EventArgs)
        MessageBox.Show("Assigned Macro Sample Method. Button_click")
    End Sub
End Class

マクロの解決方法

マクロ関数がフォームに属していない場合があるとします。このような場合に、FpSpread.MacroResolve イベントを使用してマクロ関数を解決できます。また、前述のようにデリゲートシグネチャを宣言する必要があります。例えば、次のサンプルコードは、マクロを解決シナリオする方法を示しています。

C#
コードのコピー
private void Form1_Load(object sender, EventArgs e)
{
    //フォームコントロールの拡張シェイプ エンジンを有効にします
    fpSpread1.Features.EnhancedShapeEngine = true;
    fpSpread1.OpenExcel("testmacro.xlsm");
    fpSpread1.MacroResolve += FpSpread1_MacroResolve;
}
private void FpSpread1_MacroResolve(object sender, FarPoint.Win.Spread.DelegateResolveEventArgs e)
{
    switch (e.Name)
    {
case "Button_click":
    e.Delegate = (Action<object,EventArgs>)MacroHndlers.Button_click;
    break;
case "Button3_Click":
    e.Delegate = (Action)MacroHndlers.Button3_Click;
    break;
    }
}

Visual Basic
コードのコピー
Class SurroundingClass
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
        ' フォームコントロールの拡張シェイプ エンジンを有効にします
        fpSpread1.Features.EnhancedShapeEngine = True
        fpSpread1.OpenExcel("testmacro.xlsm")
        fpSpread1.MacroResolve += AddressOf FpSpread1_MacroResolve
    End Sub
    Private Sub FpSpread1_MacroResolve(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.DelegateResolveEventArgs)
        Select Case e.Name
            Case "Button_click"
                e.[Delegate] = CType(MacroHndlers.Button_click, Action(Of Object, EventArgs))
            Case "Button3_Click"
                e.[Delegate] = CType(MacroHndlers.Button3_Click, Action)
        End Select
    End Sub
End Class

実行時にフォーム コントロールの操作

実行時に [コントロールの書式設定]ダイアログを呼び出すには、BuiltInDialogs クラスの FormatDialog メツッドを使用します。次のサンプルコードは、[コントロールの書式設定]ダイアログを呼び出す方法を示しています。

C#
コードのコピー
GrapeCity.Spreadsheet.FormControls.IScrollBar scrollBar = fpSpread1.AsWorkbook().ActiveSheet.ScrollBars.Add(100, 200, 20, 200);
BuiltInDialogs.FormatControl(fpSpread1, scrollBar);

Visual Basic
コードのコピー
Dim scrollBar As GrapeCity.Spreadsheet.FormControls.IScrollBar = fpSpread1.AsWorkbook().ActiveSheet.ScrollBars.Add(100, 200, 20, 200)
BuiltInDialogs.FormatControl(fpSpread1, scrollBar)

次の方法でも、実行時に [コントロールの書式設定]ダイアログを呼び出すことができます。

または

[コントロールの書式設定 ]ダイアログには、サイズ、保護、プロパティ、および代替テキストの 4 つの共通タブがあります。

メモ: フォーム コントロール ダイアログ内のタブ数は、使用するコントロールの種類によって異なります。

 

 


© MESCIUS inc. All rights reserved.