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 |