簡易電卓について

タグの編集
投稿者 ya-to  () 投稿日時 2008/1/26 18:57:00
FormにTextBox とLabelとButtonをそれぞれ一個ずつ配置して、TextBoxに例えば、10+20 と入力し 
Enterを押すことにより、その和(=30)をLabelに表示するということはできないでしょうか。 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
        Label1.Text = TextBox1.Text 
    End Sub 
 
と組みましたが、Labelには10+20としか表示されません。Val関数を使ってもうまく行きません。 
 
TextBox.Textは文字型なのでLabelには10+20としか表示されないのだと思いますが、例えば 
プログラム上で、 
 
   TextBox1.Text=10+20 
 
と記述すれば、左辺は文字型で右辺は数値型なのに、何か自動的に変換されてTextBox1には30が 
代入されます。何かこのようなことを応用して和を表示させる方法がないでしょうか。 
よろしくお願いします。
投稿者 neptune  () 投稿日時 2008/1/27 02:56:00
こんにちは 
 
バージョンはvb6以降ですよね? 
 
「電卓 VB 作成」でググッたら沢山ヒットしましたよ。 
VB6ですが、一番上のサイトが講座みたいでわかりやすいのでは? 
 
考え方は同じなはずですから充分参考になると思います。 
・・と偉そうに書いてますが私は作ったことありません。^ ^;;
投稿者 名鉄2000系  () 投稿日時 2008/1/27 11:40:00
あまりよいプログラムとはいえないと思いますがぱっと浮かんだ例を紹介します。 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
        Select Case 0 
            Case Is <> InStrRev(TextBox1.Text, "+") 'Textbox1にもしも"+"が含まれいるか 
                Dim int1 As Integer = InStrRev(TextBox1.Text, "+") '"+"の位置の取得 
                Dim int2 As Integer = Mid(TextBox1.Text, 1, int1 - 1) '"+"より前の数字を取得 
                Dim int3 As Integer = Mid(TextBox1.Text, int1 + 1) '"+"より後の数字を取得 
                Label1.Text = int2 + int3 '+より前と後の数字を足す 
                'コメント以下省略 
            Case Is <> InStrRev(TextBox1.Text, "-") 
                Dim int1 As Integer = InStrRev(TextBox1.Text, "-") 
                Dim int2 As Integer = Mid(TextBox1.Text, 1, int1 - 1) 
                Dim int3 As Integer = Mid(TextBox1.Text, int1 + 1) 
                Label1.Text = int2 - int3 
            Case Is <> InStrRev(TextBox1.Text, "*") 
                Dim int1 As Integer = InStrRev(TextBox1.Text, "*") 
                Dim int2 As Integer = Mid(TextBox1.Text, 1, int1 - 1) 
                Dim int3 As Integer = Mid(TextBox1.Text, int1 + 1) 
                Label1.Text = int2 * int3 
            Case Is <> InStrRev(TextBox1.Text, "/") 
                Dim int1 As Integer = InStrRev(TextBox1.Text, "/") 
                Dim int2 As Integer = Mid(TextBox1.Text, 1, int1 - 1) 
                Dim int3 As Integer = Mid(TextBox1.Text, int1 + 1) 
                Label1.Text = int2 / int3 
        End Select 
    End Sub 
 
2つの数字を計算することは出来ますが、 
3つになるとエラーになってしまいます。 
あと+,-,*,/のみ対応です。
投稿者 るしぇ  () 投稿日時 2008/1/28 19:28:00
    Label1.Text = CStr(CInt(TextBox1.Text) + CInt(TextBox2.Text)) 
 
…でいいんじゃない?
投稿者 ya-to  () 投稿日時 2008/1/28 23:00:00
>>4 
 3件もアドバイスありがとうございます。 
VerはVB2008でした。たいへん失礼しました。 
 
 早速勉強させていただきます。 
これまでは、いちいちミニ電卓で和を出し、それを入力していたのですが 
これからは仕事のスピードアップが出来ます。 
 VB幼稚園みたいな私に貴重なアドバイスありがとうございました。
投稿者 temp  () 投稿日時 2008/2/3 20:21:00
Dim temp1 As String = "(1+9)*3/(5-2)"  
 
Dim temp2 As Microsoft.JScript.Vsa.VsaEngine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine()  
Dim result As Double = CDbl(Microsoft.JScript.Eval.JScriptEvaluate(temp1, temp2))  
 
Console.WriteLine(result)
投稿者 平松澄親  () 投稿日時 2008/2/10 23:20:00
>>6  久々に掲示板を見てみました。 
>>6 
 tempさん(ハンドルネーム?)のコードを拝見しました。 
こんなハイレベルなコードは私など一生かかっても発見できないでしょう。 
 早速使わせていただきました。なんと一発で答えが表示されました。しかも+ - * / の全てが自在に使用できるのは驚きです。 
 
  あきらめかけていた時だけにほんとうにうれしいです。 
ほんとうにありがとうございました。
投稿者 ya-to  () 投稿日時 2008/2/10 23:29:00
 平松澄親 = ya-toのことです。 
 失礼しました。