http://www.vstoo.com/flyshufeman/calculator/Calculator.aspx
Bug to fix
理想状态:
1、如果操作输入数字指令时 前一次按下的是"等于"
则再按下数字时理应应该清空tbNumber(相当于btClear_Click事件)
2、如果输入等于时 前一次也是等于 则理应再进行前一次运算
这2条已经写进代码,自己设计的语句前也加进这2条注释,但是运行仍旧原样。
源码打包下载:http://www.vstoo.com/flyshufeman/calculator/calculator.rar
源程序 calculator.aspx.vb
Partial Class Calculator
Inherits System.Web.UI.Page
Private answer As Double
Dim blEqualTriggered As Boolean
Sub btOperator_Click(ByVal obj As Object, ByVal e As EventArgs)
If (hiddenvalue.value <> "" And hiddenvalue.value <> "0") Then
tbNumber.Text = OperateFunction(obj.Text, hiddenvalue.Value, tbNumber.Text)
hiddenvalue.value = ""
hiddenoperator.value = ""
Else
'save old number as hidden input field
' and clear text box
hiddenvalue.value = tbNumber.Text
hiddenoperator.value = obj.Text
tbNumber.Text = "0"
End If
End Sub
Sub btSpecOperator_Click(ByVal obj As Object, ByVal e As EventArgs) Handles btNegate.Click
tbNumber.Text = OperateFunction(obj.Text, hiddenvalue.Value, tbNumber.Text)
hiddenvalue.Value = ""
hiddenoperator.Value = ""
End Sub
Sub btNumber_Click(ByVal obj As Object, ByVal e As EventArgs)
'如果操作输入数字指令时 前一次按下的是"等于"
'则再按下数字时清空tbNumber(相当于btClear_Click事件)
If blEqualTriggered = True Then
tbNumber.Text = "0"
hiddenoperator.Value = ""
hiddenvalue.Value = ""
End If
If tbNumber.Text <> "0" And blEqualTriggered = False Then
tbNumber.Text = tbNumber.Text & obj.Text
Else
tbNumber.Text = obj.Text
answer = Nothing
End If
blEqualTriggered = False
Label1.Text = blEqualTriggered.ToString
End Sub
Sub btClear_Click(ByVal obj As Object, ByVal e As EventArgs)
tbNumber.Text = "0"
hiddenoperator.value = ""
hiddenvalue.value = ""
End Sub
Sub btBS_Click(ByVal obj As Object, ByVal e As EventArgs)
If tbNumber.Text <> "0" Then
tbNumber.Text = Left(tbNumber.Text, len(tbNumber.Text) - 1)
End If
End Sub
Sub btMemory_Click(ByVal obj As Object, ByVal e As EventArgs)
Select Case obj.text
Case "MC"
Session("memory") = ""
Indicator.Text = ""
Case "MS"
Session("memory") = tbNumber.Text
Indicator.Text = "M"
Case "MR"
tbNumber.Text = Session("Memory")
Case "M+"
End Select
End Sub
Sub btEqual_Click(ByVal obj As Object, ByVal e As EventArgs)
'如果输入等于时 前一次也是等于 则再进行前一次运算
If blEqualTriggered = True Then
tbNumber.Text = OperateFunction(hiddenoperator.Value, hiddenvalue.Value, tbNumber.Text)
End If
If hiddenvalue.Value <> "" Then
If hiddenoperator.Value <> "" Then
'operate numbers
tbNumber.Text = OperateFunction(hiddenoperator.Value, hiddenvalue.Value, tbNumber.Text)
hiddenvalue.Value = ""
hiddenoperator.Value = ""
answer = tbNumber.Text
Else
'do nothing
End If
Else
'do nothing
End If
blEqualTriggered = True '表明"等于号"触发过
Label1.Text = blEqualTriggered.ToString
End Sub
Private Function OperateFunction(ByVal operate As String, ByVal number1 As String, Optional ByVal number2 As String = "1") As Double
Select Case operate
Case "+"
operate = CDbl(number1) + CDbl(number2)
Case "-"
operate = CDbl(number1) - CDbl(number2)
Case "*"
operate = CDbl(number1) * CDbl(number2)
Case "/"
operate = CDbl(number1) / CDbl(number2)
Case "sqrt"
operate = CDbl(Math.Sqrt(number2))
Case "1/x"
operate = CDbl(1 / CDbl(number2))
Case "+/-"
operate = CDbl((-1) * CDbl(number2))
End Select
Return operate.ToString
End Function
Protected Sub tbNumber_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbNumber.TextChanged
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = blEqualTriggered.ToString
End Sub
End Class
calculator.aspx 这个没什么 组建如何填到网页里的而已 关键是哪个键对应触发哪个事件
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Calculator.aspx.vb" Inherits="Calculator" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>简易网页计算器</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel id="Frame" runat="server">
<table width="250">
<tr>
<td width="100%" colspan="7">
<asp:textbox id="tbNumber" runat="server"
text="0"
enabled="false"
width="100%" />
</td>
</tr>
<tr>
<td align="right" width="100%" colspan="7">
<asp:Label id="Indicator" text="" runat="server" />
<asp:button id="btBS" Text="Backspace"
OnClick="btBS_Click" runat="server" width="75"/>
<asp:button id="btClear" Text="C"
OnClick="btClear_Click" runat="server" width="35"/>
</td>
</tr>
<tr>
<td width="32" valign="top">
<asp:button id="btMC" Text="MC"
OnClick="btMemory_Click" runat="server"
width="35"/>
</td>
<td width="58"></td>
<td width="32">
<asp:button id="bt7" Text="7"
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="bt8" Text="8"
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="bt9" Text="9"
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="btDivide" Text="/"
OnClick="btOperator_Click" runat="server"
width="35"/><p>
</td>
<td style="width: 32px">
<asp:button id="btSqrt" Text="sqrt"
OnClick="btSpecOperator_Click" runat="server"
width="35"/><p>
</td>
</tr>
<tr>
<td width="32" valign="top">
<asp:button id="btMR" Text="MR"
OnClick="btMemory_Click" runat="server"
width="35"/>
</td>
<td width="8"></td>
<td width="32">
<asp:button id="bt4" Text="4"
OnClick="btNumber_Click"
runat="server" width="35"/><p>
</td>
<td width="32">
<asp:button id="bt5" Text="5"
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="bt6" Text="6"
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="btMultiply" Text="*"
OnClick="btOperator_Click" runat="server"
width="35"/><p>
</td>
<td style="width: 32px">
<asp:button id="btPercent" Text="%"
OnClick="btOperator_Click" runat="server"
width="35"/><p>
</td>
</tr>
<tr>
<td width="32" valign="top">
<asp:button id="btMS" Text="MS"
OnClick="btMemory_Click" runat="server"
width="35"/>
</td>
<td width="8"></td>
<td width="32">
<asp:button id="bt1" Text="1"
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="bt2" Text="2"
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="bt3" Text="3"
OnClick="btNumber_Click" runat="server"
width="35" /><p>
</td>
<td width="32">
<asp:button id="btSubtract" Text="-"
OnClick="btOperator_Click" runat="server"
width="35"/><p>
</td>
<td style="width: 32px">
<asp:button id="btOneOver" Text="1/x"
OnClick="btSpecOperator_Click" runat="server"
width="35"/><p>
</td>
</tr>
<tr>
<td width="32" valign="top">
<asp:button id="btMP" Text="M+"
OnClick="btMemory_Click" runat="server"
width="35"/>
</td>
<td width="8"></td>
<td width="32">
<asp:button id="bt0" Text="0"
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="btNegate" Text="+/-"
OnClick="btSpecOperator_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="btDot" Text="."
OnClick="btNumber_Click" runat="server"
width="35"/><p>
</td>
<td width="32">
<asp:button id="btAdd" Text="+"
OnClick="btOperator_Click" runat="server"
width="35"/><p>
</td>
<td style="width: 32px">
<asp:button id="btEqual" Text="="
OnClick="btEqual_Click" runat="server"
width="35"/><p>
</td>
</tr>
</table>
</asp:Panel>
<input type="hidden" id="hiddenvalue" value=""
runat="server" />
<input type="hidden" id="hiddenoperator" value=""
runat="server" />
<br />
前一次操作是否为“=”?<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
<br />
Bug to fix<br />
理想状态:<br />
1、如果操作输入数字指令时 前一次按下的是"等于"
<br />
则再按下数字时理应应该清空tbNumber(相当于btClear_Click事件)<br />
2、如果输入等于时 前一次也是等于 则理应再进行前一次运算<br />
<br />
这2条已经写进代码,自己设计的语句前也加进这2条注释,但是运行仍旧原样。<br />
<br />
源码打包下载:<a href="calculator.rar">calculator.aspx _fcksavedurl=""calculator.rar">calculator.aspx " calculator.aspx.vb</a></div>
</form>
</body>
</html>