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

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

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

VB.NETでの電卓作成


(過去ログ 4 を表示中)

[トピック内 20 記事 (1 - 20 表示)]  << 0 >>

■4547 / inTopicNo.1)  VB.NETでの電卓作成
  
□投稿者/ さえ 二等兵(1回)-(2006/06/27(Tue) 15:19:26)

分類:[VB.NET] 


分類:[VB.NET] 

2006/06/27(Tue) 15:21:25 編集(投稿者)

学校の授業でVB.NETで電卓を作成したのですが、
例えば1+2+3=5のようになってしまい、3つ以上の数字
の計算ができないものができあがってしまいました。
どのようにしたら、3つ以上の数字の計算ができるようにで
きるのでしょうか?

0
引用返信 編集キー/
■4547 / inTopicNo.2)  VB.NETでの電卓作成
□投稿者/ さえ 二等兵(1回)-(2006/06/27(Tue) 15:19:26)

分類:[VB.NET] 


分類:[VB.NET] 

2006/06/27(Tue) 15:21:25 編集(投稿者)

学校の授業でVB.NETで電卓を作成したのですが、
例えば1+2+3=5のようになってしまい、3つ以上の数字
の計算ができないものができあがってしまいました。
どのようにしたら、3つ以上の数字の計算ができるようにで
きるのでしょうか?

0
引用返信 編集キー/
■4548 / inTopicNo.3)  Re[1]: VB.NETでの電卓作成
□投稿者/ 純2259 二等兵(1回)-(2006/06/27(Tue) 15:42:58)

分類:[VB.NET] 

考えられる理由としては
1+2を計算した後に2+3の結果で上書きされているかと思います。

加算している部分のソースを見せていただいていいですか?

0
引用返信 編集キー/
■4548 / inTopicNo.4)  Re[1]: VB.NETでの電卓作成
□投稿者/ 純2259 二等兵(1回)-(2006/06/27(Tue) 15:42:58)

分類:[VB.NET] 

考えられる理由としては
1+2を計算した後に2+3の結果で上書きされているかと思います。

加算している部分のソースを見せていただいていいですか?

0
引用返信 編集キー/
■4551 / inTopicNo.5)  Re[2]: VB.NETでの電卓作成
□投稿者/ さえ 二等兵(2回)-(2006/06/27(Tue) 16:21:03)

分類:[VB.NET] 

プログラミングについてよくわからないで授業を取って本当に困ってました…
みなさんすごいですね。
Private Sub 演算キー(ByVal o As Integer)
R2 = R1
Op = o
CL = True
End Sub
Private Sub 計算()
Select Case Op
Case 1
R1 = R2 + R1
Case 2
R1 = R2 - R1
Case 3
R1 = R2 * R1
Case 4
R1 = R2 \ R1

End Select
TextR.Text = R1

End Sub
この部分で大丈夫でしょうか?

0
引用返信 編集キー/
■4551 / inTopicNo.6)  Re[2]: VB.NETでの電卓作成
□投稿者/ さえ 二等兵(2回)-(2006/06/27(Tue) 16:21:03)

分類:[VB.NET] 

プログラミングについてよくわからないで授業を取って本当に困ってました…
みなさんすごいですね。
Private Sub 演算キー(ByVal o As Integer)
R2 = R1
Op = o
CL = True
End Sub
Private Sub 計算()
Select Case Op
Case 1
R1 = R2 + R1
Case 2
R1 = R2 - R1
Case 3
R1 = R2 * R1
Case 4
R1 = R2 \ R1

End Select
TextR.Text = R1

End Sub
この部分で大丈夫でしょうか?

0
引用返信 編集キー/
■4552 / inTopicNo.7)  Re[3]: 早い返信ありがとうございます。
□投稿者/ 純2259 二等兵(3回)-(2006/06/27(Tue) 16:42:13)

分類:[VB.NET] 

上書きというより…なんか説明が下手でスイマセン。
私から見たところこの各処理は1回しか行われて無いように見えます。
だから1回処理を行ったらR1 , R2ともに初期化されている感じもします。
なんとなく分かりましたがで念のため確認します。
R1は合計
R2はその合計に足されるものと判断してもよろしいでしょうか?


0
引用返信 編集キー/
■4552 / inTopicNo.8)  Re[3]: 早い返信ありがとうございます。
□投稿者/ 純2259 二等兵(3回)-(2006/06/27(Tue) 16:42:13)

分類:[VB.NET] 

上書きというより…なんか説明が下手でスイマセン。
私から見たところこの各処理は1回しか行われて無いように見えます。
だから1回処理を行ったらR1 , R2ともに初期化されている感じもします。
なんとなく分かりましたがで念のため確認します。
R1は合計
R2はその合計に足されるものと判断してもよろしいでしょうか?


0
引用返信 編集キー/
■4553 / inTopicNo.9)  Re[3]: 早い返信ありがとうございます。
□投稿者/ まどか 中尉(151回)-(2006/06/27(Tue) 16:43:02)

分類:[VB.NET] 

動きについても書いてもらえると良いです。

「1」をクリックしたら何をしてる?
「+」をクリックしたら何をしてる?
提示したSubはどんなタイミングで呼ばれる?
1+2+3+4+5は9になる?

#それとも「1+2+3」をTextBoxに入力するやり方ですか?

#的確な題名であれば、あまり題名を変えないほうが良いです。
#有用なものが検索で引っかからなくなったりする可能性がありますので。


0
引用返信 編集キー/
■4553 / inTopicNo.10)  Re[3]: 早い返信ありがとうございます。
□投稿者/ まどか 中尉(151回)-(2006/06/27(Tue) 16:43:02)

分類:[VB.NET] 

動きについても書いてもらえると良いです。

「1」をクリックしたら何をしてる?
「+」をクリックしたら何をしてる?
提示したSubはどんなタイミングで呼ばれる?
1+2+3+4+5は9になる?

#それとも「1+2+3」をTextBoxに入力するやり方ですか?

#的確な題名であれば、あまり題名を変えないほうが良いです。
#有用なものが検索で引っかからなくなったりする可能性がありますので。


0
引用返信 編集キー/
■4554 / inTopicNo.11)  Re[4]: 早い返信ありがとうございます。
□投稿者/ 純2259 二等兵(4回)-(2006/06/27(Tue) 17:01:02)

分類:[VB.NET] 

2006/06/27(Tue) 17:08:53 編集(投稿者)

もし私の考えが正しければ下記の方法で解決できるような気もしますが。
順番にミスがあったので編集しました。

Private Sub 演算キー(ByVal o As Integer)
'R1 を初期化される恐れがあるR1では無くR3で上書きする R3は編集して下さい'
R1 = R3
Op = o
CL = True
End Sub
Private Sub 計算()
Select Case Op
Case 1
'R3(現在合計値)を代入したR1に足されるR2を足す'
R1 = R2 + R1
Case 2
R1 = R2 - R1
Case 3
R1 = R2 * R1
Case 4
R1 = R2 \ R1

End Select
R3 = R1
'R3は初期化されることが無いので序盤でR1,R2が変っても影響ない'
TextR.Text = R3 'ここはR1でもOK'

End Sub


0
引用返信 編集キー/
■4554 / inTopicNo.12)  Re[4]: 早い返信ありがとうございます。
□投稿者/ 純2259 二等兵(4回)-(2006/06/27(Tue) 17:01:02)

分類:[VB.NET] 

2006/06/27(Tue) 17:08:53 編集(投稿者)

もし私の考えが正しければ下記の方法で解決できるような気もしますが。
順番にミスがあったので編集しました。

Private Sub 演算キー(ByVal o As Integer)
'R1 を初期化される恐れがあるR1では無くR3で上書きする R3は編集して下さい'
R1 = R3
Op = o
CL = True
End Sub
Private Sub 計算()
Select Case Op
Case 1
'R3(現在合計値)を代入したR1に足されるR2を足す'
R1 = R2 + R1
Case 2
R1 = R2 - R1
Case 3
R1 = R2 * R1
Case 4
R1 = R2 \ R1

End Select
R3 = R1
'R3は初期化されることが無いので序盤でR1,R2が変っても影響ない'
TextR.Text = R3 'ここはR1でもOK'

End Sub


0
引用返信 編集キー/
■4559 / inTopicNo.13)  Re[5]: 早い返信ありがとうございます。
□投稿者/ さえ 二等兵(3回)-(2006/06/27(Tue) 19:50:00)

分類:[VB.NET] 

純2259さんに教えていただいた通りやってみましたが、やはりだめでした…
どこかに少し手を加えればよいと思うのですが。
Public Class Form電卓
Inherits System.Windows.Forms.Form

Dim R1 As Integer
Dim R2 As Integer
Dim Op As Integer
Dim CL As Integer
Private Sub Button終了_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button終了.Click
End
End Sub

Private Sub Form電卓_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextR.Text = ""
R1 = 0
R2 = 0
Op = 1
CL = True
End Sub

Private Sub 数字キー(ByVal n As Integer)
If CL Then
R1 = 0
CL = False
End If
R1 = R1 * 10 + n
TextR.Text = R1
End Sub
Private Sub 演算キー(ByVal o As Integer)
R2 = R1
Op = o
CL = True
End Sub
Private Sub 計算()
Select Case Op
Case 1
R1 = R2 + R1
Case 2
R1 = R2 - R1
Case 3
R1 = R2 * R1
Case 4
R1 = R2 \ R1

End Select
TextR.Text = R1

End Sub

Private Sub KeyN0_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN0.Click
数字キー(0)
End Sub

Private Sub KeyN1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN1.Click
数字キー(1)
End Sub
Private Sub KeyN2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN2.Click
数字キー(2)
End Sub

Private Sub KetN3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KetN3.Click
数字キー(3)
End Sub

Private Sub KeyN4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN4.Click
数字キー(4)
End Sub

Private Sub KeyN5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN5.Click
数字キー(5)
End Sub

Private Sub KeyN6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN6.Click
数字キー(6)
End Sub

Private Sub KeyN7_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN7.Click
数字キー(7)
End Sub

Private Sub KeyN8_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN8.Click
数字キー(8)
End Sub

Private Sub KeyN9_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN9.Click
数字キー(9)
End Sub

Private Sub KeyOA_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOA.Click
演算キー(1)
End Sub

Private Sub KeyOS_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOS.Click
演算キー(2)
End Sub

Private Sub KeyOM_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOM.Click
演算キー(3)
End Sub

Private Sub KeyOD_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOD.Click
演算キー(4)
End Sub

Private Sub KeyEQ_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyEQ.Click
計算()
CL = True
End Sub

Private Sub KeyCL_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyCL.Click
TextR.Text = ""
R1 = 0
R2 = 0
Op = 1
CL = True
End Sub
End Class



0
引用返信 編集キー/
■4559 / inTopicNo.14)  Re[5]: 早い返信ありがとうございます。
□投稿者/ さえ 二等兵(3回)-(2006/06/27(Tue) 19:50:00)

分類:[VB.NET] 

純2259さんに教えていただいた通りやってみましたが、やはりだめでした…
どこかに少し手を加えればよいと思うのですが。
Public Class Form電卓
Inherits System.Windows.Forms.Form

Dim R1 As Integer
Dim R2 As Integer
Dim Op As Integer
Dim CL As Integer
Private Sub Button終了_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button終了.Click
End
End Sub

Private Sub Form電卓_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextR.Text = ""
R1 = 0
R2 = 0
Op = 1
CL = True
End Sub

Private Sub 数字キー(ByVal n As Integer)
If CL Then
R1 = 0
CL = False
End If
R1 = R1 * 10 + n
TextR.Text = R1
End Sub
Private Sub 演算キー(ByVal o As Integer)
R2 = R1
Op = o
CL = True
End Sub
Private Sub 計算()
Select Case Op
Case 1
R1 = R2 + R1
Case 2
R1 = R2 - R1
Case 3
R1 = R2 * R1
Case 4
R1 = R2 \ R1

End Select
TextR.Text = R1

End Sub

Private Sub KeyN0_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN0.Click
数字キー(0)
End Sub

Private Sub KeyN1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN1.Click
数字キー(1)
End Sub
Private Sub KeyN2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN2.Click
数字キー(2)
End Sub

Private Sub KetN3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KetN3.Click
数字キー(3)
End Sub

Private Sub KeyN4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN4.Click
数字キー(4)
End Sub

Private Sub KeyN5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN5.Click
数字キー(5)
End Sub

Private Sub KeyN6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN6.Click
数字キー(6)
End Sub

Private Sub KeyN7_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN7.Click
数字キー(7)
End Sub

Private Sub KeyN8_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN8.Click
数字キー(8)
End Sub

Private Sub KeyN9_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN9.Click
数字キー(9)
End Sub

Private Sub KeyOA_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOA.Click
演算キー(1)
End Sub

Private Sub KeyOS_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOS.Click
演算キー(2)
End Sub

Private Sub KeyOM_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOM.Click
演算キー(3)
End Sub

Private Sub KeyOD_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOD.Click
演算キー(4)
End Sub

Private Sub KeyEQ_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyEQ.Click
計算()
CL = True
End Sub

Private Sub KeyCL_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyCL.Click
TextR.Text = ""
R1 = 0
R2 = 0
Op = 1
CL = True
End Sub
End Class



0
引用返信 編集キー/
■4563 / inTopicNo.15)  Re[6]: 早い返信ありがとうございます。
□投稿者/ Jitta 曹長(95回)-(2006/06/27(Tue) 22:57:03)

分類:[VB.NET] 

class 電卓
 private 現在値 as decimal = 0d
 private 入力値 as decimal = 0d
' 途中省略
 public sub new()
  Initialize()
  キー1.tag = 1d
  キー2.tag = 2d
  ...
  和キー.tag = "+"
  ...
 end sub

 protected sub 数字キー_Click() handles キー1.onclick, キー2.onclick...
  dim val as decimal = cdec(directcast(sender, button).tag)
  入力値 = 入力値 * 10 + val; ' 小数点を扱うなら、それなりに
 end sub

 protected sub 演算キー_Click() handles 和キー.onclick...
  select case cstr(directcast(sender, button).tag)
  case "+"
   現在値 += 入力値
  case "*"
   現在値 *= 入力値
  ...
  end select
  入力値 = 0d
 end sub
' その他省略
end class

こんな感じ?

0
引用返信 編集キー/
■4563 / inTopicNo.16)  Re[6]: 早い返信ありがとうございます。
□投稿者/ Jitta 曹長(95回)-(2006/06/27(Tue) 22:57:03)

分類:[VB.NET] 

class 電卓
 private 現在値 as decimal = 0d
 private 入力値 as decimal = 0d
' 途中省略
 public sub new()
  Initialize()
  キー1.tag = 1d
  キー2.tag = 2d
  ...
  和キー.tag = "+"
  ...
 end sub

 protected sub 数字キー_Click() handles キー1.onclick, キー2.onclick...
  dim val as decimal = cdec(directcast(sender, button).tag)
  入力値 = 入力値 * 10 + val; ' 小数点を扱うなら、それなりに
 end sub

 protected sub 演算キー_Click() handles 和キー.onclick...
  select case cstr(directcast(sender, button).tag)
  case "+"
   現在値 += 入力値
  case "*"
   現在値 *= 入力値
  ...
  end select
  入力値 = 0d
 end sub
' その他省略
end class

こんな感じ?

0
引用返信 編集キー/
■4575 / inTopicNo.17)  Re[7]: 早い返信ありがとうございます。
□投稿者/ kei 二等兵(1回)-(2006/06/28(Wed) 13:10:31)

分類:[VB.NET] 

見た感じここが原因かと…
> End Sub Private Sub 演算キー(ByVal o As Integer)
> R2 = R1 ←押された演算キーが反映されていない
> Op = o
> CL = True
> End Sub

1+ おす
. Private Sub 数字キー(ByVal n As Integer)
. If CL Then
. R1 = 1
. CL = False
. End If
. R1 = R1 * 10 + n
. End Sub
. End Sub Private Sub 演算キー(ByVal o As Integer)
. R2 = 1
. Op = +
. CL = True
. End Sub


2+ おす
. Private Sub 数字キー(ByVal n As Integer)
. If CL Then
. R1 = 2
. CL = False
. End If
. R1 = R1 * 10 + n
. End Sub
. End Sub Private Sub 演算キー(ByVal o As Integer)
. R2(1が入ってる) = 2 ← そのまま1といれかわっちゃう
. Op = +
. CL = True
. End Sub

がんばってね^^

0
引用返信 編集キー/
■4575 / inTopicNo.18)  Re[7]: 早い返信ありがとうございます。
□投稿者/ kei 二等兵(1回)-(2006/06/28(Wed) 13:10:31)

分類:[VB.NET] 

見た感じここが原因かと…
> End Sub Private Sub 演算キー(ByVal o As Integer)
> R2 = R1 ←押された演算キーが反映されていない
> Op = o
> CL = True
> End Sub

1+ おす
. Private Sub 数字キー(ByVal n As Integer)
. If CL Then
. R1 = 1
. CL = False
. End If
. R1 = R1 * 10 + n
. End Sub
. End Sub Private Sub 演算キー(ByVal o As Integer)
. R2 = 1
. Op = +
. CL = True
. End Sub


2+ おす
. Private Sub 数字キー(ByVal n As Integer)
. If CL Then
. R1 = 2
. CL = False
. End If
. R1 = R1 * 10 + n
. End Sub
. End Sub Private Sub 演算キー(ByVal o As Integer)
. R2(1が入ってる) = 2 ← そのまま1といれかわっちゃう
. Op = +
. CL = True
. End Sub

がんばってね^^

0
引用返信 編集キー/
■4577 / inTopicNo.19)  Re[8]: 早い返信ありがとうございます。
□投稿者/ まじん 伍長(47回)-(2006/06/28(Wed) 14:35:29)

分類:[VB.NET] 

2006/06/28(Wed) 14:41:14 編集(投稿者)
2006/06/28(Wed) 14:40:50 編集(投稿者)
2006/06/28(Wed) 14:36:58 編集(投稿者)

 さえさん こんにちは

 私も勉強中ですので いっしょに作ってみました
なるべく 変更箇所が少ないようにしてみました 
 あと、このままでは Jittaさんが書かれてるように小数が使えませんので その辺は勉強してみてください

Dim R1 As Integer
Dim R2 As Integer
Dim Op As Integer
Dim CL As Integer

'変数追加
Dim st As Boolean = True

Private Sub Form電卓_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  TextR.Text = ""
  R1 = 0
  R2 = 0
  Op = 1
  CL = True
End Sub

Private Sub 数字キー(ByVal n As Integer)
  If CL Then
   R1 = 0
   CL = False
  End If
  R1 = R1 * 10 + n
  TextR.Text = R1
End Sub

'演算キーをリセットに変えました
Private Sub リセット()
  CL = True
End Sub

Private Sub 計算()
  Select Case Op
'R1=R2+R1をR2=Val(R2)+Val(R1)に替えました
   Case 1
    R2 = Val(R2) + Val(R1)
   Case 2
    R2 = Val(R2) - Val(R1)
   Case 3
    R2 = Val(R2) * Val(R1)
   Case 4
    R2 = Val(R2) \ Val(R1)
  End Select
  TextR.Text = R2
End Sub

'Handles句の後にkeyN1.Click, keyN2.Clickと数字キーのクリック動作を続けて入れるとコードがまとめて1ヶ所で済みます
Private Sub Key_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles keyN1.Click, keyN2.Click, keyN3.Click, keyN4.Click, keyN5.Click, keyN6.Click, keyN7.Click, keyN8.Click, keyN9.Click, keyN0.Click
'演算キーを押した直後だけ TextRのデータがクリアされる
  If st Then
   TextR.Text = ""
   st = False
  End If

'sender.textを利用して 何番のキーが押されたか判断する
  Dim int As Integer = sender.text

'2桁以上の数字でも計算できるように
  If TextR.Text <> "0" Then
   TextR.Text = TextR.Text & int
  Else
   TextR.Text = int
  End If

End Sub

Private Sub KeyEQ_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KeyEQ.Click
  R1 = TextR.Text
  計算()
  TextR.Text = R2
  リセット()

End Sub

Private Sub 演算key_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KeyOA.Click, KeyOS.Click, KeyOD.Click, KeyOM.Click

'今入力した値をR1に代入してから TextRをクリア
  R1 = TextR.Text
  TextR.Text = ""

  計算()

'ここもsender.textを利用して どの演算キーの種類を判断する
  Dim ENZ As String = sender.text
   Select Case ENZ
    Case Is = "+"
     Op = 1
    Case Is = "−"
     Op = 2
    Case Is = "×"
     Op = 3
    Case Is = "÷"
     Op = 4
   End Select
  st = True
End Sub



0
引用返信 編集キー/
■4577 / inTopicNo.20)  Re[8]: 早い返信ありがとうございます。
 
□投稿者/ まじん 伍長(47回)-(2006/06/28(Wed) 14:35:29)

分類:[VB.NET] 

2006/06/28(Wed) 14:41:14 編集(投稿者)
2006/06/28(Wed) 14:40:50 編集(投稿者)
2006/06/28(Wed) 14:36:58 編集(投稿者)

 さえさん こんにちは

 私も勉強中ですので いっしょに作ってみました
なるべく 変更箇所が少ないようにしてみました 
 あと、このままでは Jittaさんが書かれてるように小数が使えませんので その辺は勉強してみてください

Dim R1 As Integer
Dim R2 As Integer
Dim Op As Integer
Dim CL As Integer

'変数追加
Dim st As Boolean = True

Private Sub Form電卓_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  TextR.Text = ""
  R1 = 0
  R2 = 0
  Op = 1
  CL = True
End Sub

Private Sub 数字キー(ByVal n As Integer)
  If CL Then
   R1 = 0
   CL = False
  End If
  R1 = R1 * 10 + n
  TextR.Text = R1
End Sub

'演算キーをリセットに変えました
Private Sub リセット()
  CL = True
End Sub

Private Sub 計算()
  Select Case Op
'R1=R2+R1をR2=Val(R2)+Val(R1)に替えました
   Case 1
    R2 = Val(R2) + Val(R1)
   Case 2
    R2 = Val(R2) - Val(R1)
   Case 3
    R2 = Val(R2) * Val(R1)
   Case 4
    R2 = Val(R2) \ Val(R1)
  End Select
  TextR.Text = R2
End Sub

'Handles句の後にkeyN1.Click, keyN2.Clickと数字キーのクリック動作を続けて入れるとコードがまとめて1ヶ所で済みます
Private Sub Key_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles keyN1.Click, keyN2.Click, keyN3.Click, keyN4.Click, keyN5.Click, keyN6.Click, keyN7.Click, keyN8.Click, keyN9.Click, keyN0.Click
'演算キーを押した直後だけ TextRのデータがクリアされる
  If st Then
   TextR.Text = ""
   st = False
  End If

'sender.textを利用して 何番のキーが押されたか判断する
  Dim int As Integer = sender.text

'2桁以上の数字でも計算できるように
  If TextR.Text <> "0" Then
   TextR.Text = TextR.Text & int
  Else
   TextR.Text = int
  End If

End Sub

Private Sub KeyEQ_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KeyEQ.Click
  R1 = TextR.Text
  計算()
  TextR.Text = R2
  リセット()

End Sub

Private Sub 演算key_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KeyOA.Click, KeyOS.Click, KeyOD.Click, KeyOM.Click

'今入力した値をR1に代入してから TextRをクリア
  R1 = TextR.Text
  TextR.Text = ""

  計算()

'ここもsender.textを利用して どの演算キーの種類を判断する
  Dim ENZ As String = sender.text
   Select Case ENZ
    Case Is = "+"
     Op = 1
    Case Is = "−"
     Op = 2
    Case Is = "×"
     Op = 3
    Case Is = "÷"
     Op = 4
   End Select
  st = True
End Sub



0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -