C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■89187 / 1階層)  テキストボックス内で演算
□投稿者/ 魔界の仮面弁士 (1922回)-(2018/11/05(Mon) 14:36:18)
2018/11/05(Mon) 14:37:38 編集(投稿者)

No89184 (krh さん) に返信
> テキストボックスは数式と答えの二つです。
> テキストボックス内での計算の仕方を教えてください。

テキストボックスは、文字列の表示と入力を行うだけの代物です。

ComboBox であれ TextBox であれ、基本的には同じこと。
演算機能は自分自身で作りこむしか無いでしょう。


> 数式のテキストボックス2つの状態

1 つでも 2 つでも、3 つでも、そこは作り手の設計次第でしょう。

市販の電卓だって、たとえば C / CE / CA キーの動作だったり
定数計算の操作などでも、シャープ系とカシオ系では微妙に異なりますよね。
https://ja.wikipedia.org/wiki/%E9%9B%BB%E5%8D%93


10÷3 の計算結果を何桁まで表示するのか、とか、
その結果に ×3 したときに、10 に戻すべきか否か、とか、
0÷0 の計算結果をどう表現するのか(エラー、未定義、不定、NaN など)、などなど。



何にせよ、どういう操作が行われた時に、どういう振る舞いをしてほしいのか、
一つ一つ仕様として細かく事前設計するのが肝要です。
C# のコードを書くのは、設計が終わってからの話。



とまぁ、アプリケーションの振る舞いの話はさておき、
計算処理の実装については、PowerShell を利用すると簡単かと思います。

%PROGRAMFILES%\Reference Assemblies\Microsoft\WindowsPowerShell\
の下の、v1.0 とか v3.0 といったバージョン別フォルダにある
System.Management.Automation.dll
を参照設定したうえで:


public static dynamic Calculate(string expression)
{
 using (var invoker = new System.Management.Automation.RunspaceInvoke())
 {
  return invoker.Invoke(expression, new object[] { }).First().ImmediateBaseObject;
 }
}

とか。でもって使うときはこんな感じ。

textBox1.Text = "(12+34)/3";
var o = Calculate(textBox1.Text);
label1.Text = o.ToString(); // "15.3333333333333" になる
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←テキストボックス内で演算 /krh 返信無し
 
上記関連ツリー

テキストボックス内で演算 / krh (18/11/05(Mon) 13:39) #89184
テキストボックス内で演算 / 魔界の仮面弁士 (18/11/05(Mon) 14:36) #89187 ←Now
Re[1]: テキストボックス内で演算 / 774RR (18/11/05(Mon) 14:10) #89186
│└ Re[2]: テキストボックス内で演算 / PANG2 (18/11/05(Mon) 14:50) #89188
│  └ Re[3]: テキストボックス内で演算 / はまぐり (18/11/05(Mon) 15:42) #89189
Re[1]: テキストボックス内で演算 / shu (18/11/08(Thu) 17:07) #89220

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信