MESCIUS SPREAD for Windows Forms 17.0J
外部変数のテキストボックスコントロールでの使用

次のサンプルコードは、外部変数を作成し、標準のテキストボックスコントロールで使用する方法を示します。

サンプルコードの内容は次のとおりです。

C#
コードのコピー
// 外部変数を作成および定義します。
public class TextBoxExternalVariable : ExternalVariable
{
    private TextBox _textBox;
    private bool _asInput;
    public TextBoxExternalVariable(TextBox textBox, bool asInput)
    {
        _textBox = textBox;
        if (asInput)
        {
            textBox.TextChanged += TextBox_TextChanged;
        }
    }
    private void TextBox_TextChanged(object sender, EventArgs e)
    {
        Dirty();
    }
   
    protected override bool OnDirtying()
    {
        return !_asInput;
    }
  
    protected override void OnDirtied()
    {
        Refresh();
    }
   
    protected override void EvaluateCore(IEvaluationContext context,
     IValue result)
    {
        string text = _textBox.Text;
        if (!string.IsNullOrEmpty(text) && double.TryParse(text,
             out double dblValue))
        {
            result.SetValue(dblValue);
        }
        else
        {
            result.SetValue(text);
        }
    }
   
    public void Refresh()
    {
        if (!_asInput)
        {
            _textBox.Text = this.Value.GetText();
        }
    }
} 
// 外部変数をテキストボックスコントロールで使用します。
private void Form2_Load(object sender, EventArgs e)
{
 var workbook = fpSpread1.AsWorkbook();
 var activeSheet = workbook.ActiveSheet;
 activeSheet.Cells["A1"].Value = "Factor";
 activeSheet.Cells["B1"].Value = 2;
   
 // textbox1を参照する外部変数「x」を追加します。
 workbook.Names.AddExternalVariable("x",
 new TextBoxExternalVariable(textBox1, true));
   
 // textbox2を参照する外部変数「y」、および数式「Sheet1!B1 * x」を追加します。
 var extVariable2 = new TextBoxExternalVariable(textBox2, false);
 workbook.Names.AddExternalVariable("y", extVariable2, "Sheet1!B1 * x");
 extVariable2.Refresh();
} 

VB
コードのコピー
' 外部変数を作成および定義します。
Public Class TextBoxExternalVariable
    Inherits ExternalVariable
Private _textBox As TextBox
Private _asInput As Boolean
Public Sub New(ByVal textBox As TextBox, ByVal asInput As Boolean)
    _textBox = textBox
    If asInput Then
        AddHandler textBox.TextChanged, AddressOf TextBox_TextChanged
    End If
End Sub
Private Sub TextBox_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dirty()
End Sub
Protected Overrides Function OnDirtying() As Boolean
    Return Not _asInput
End Function
Protected Overrides Sub OnDirtied()
    Refresh()
End Sub
Protected Overrides Sub EvaluateCore(ByVal context As IEvaluationContext, ByVal result As IValue)
    Dim text As String = _textBox.Text
    Dim dblValue As Double = Nothing
If Not String.IsNullOrEmpty(text) AndAlso Double.TryParse(text, dblValue) Then
   result.SetValue(dblValue)
Else
    result.SetValue(text)
End If
End Sub
Public Sub Refresh()
    If Not _asInput Then
      _textBox.Text = Me.Value.GetText()
End If
End Sub
End Class    

' 外部変数をテキストボックスコントロールで使用します。
Private Sub Form2_Load(ByVal sender As Object, ByVal e As EventArgs)
    Dim workbook = fpSpread1.AsWorkbook()
    Dim activeSheet = workbook.ActiveSheet
        activeSheet.Cells("A1").Value = "Factor"
        activeSheet.Cells("B1").Value = 2
        workbook.Names.AddExternalVariable("x", New TextBoxExternalVariable(textBox1, True))
    Dim extVariable2 = New TextBoxExternalVariable(textBox2, False)
        workbook.Names.AddExternalVariable("y", extVariable2, "Sheet1!B1 * x")
        extVariable2.Refresh()
End Sub

 

 


© MESCIUS inc. All rights reserved.