[原]动态创建Web控件制做计算器
最近参加了Web基础开发的培训,收获不少,做了一个练习,在后台动态创建控件制作了一个简单功能的计算器。程序中控件创建好以后,往往不能放在想要的位置,前台的布局非常麻烦,我用Table、TableRow、TableCell对象来帮助前台页面的布局。在创建控件前,将要创建的控件分类,按照分类,用重载的方法自己定义了CreateBtn函数。然后用循环调用的方法进行创建。整个程序的代码如下:
前台HTML代码(VS2005自动生成的,我没做任何修改);
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>网页动态生成计算器</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
后台Asp.net代码:
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
//定义两个操作数
static double Num1;
static double Num2;
//记录操作符
static string OperatorF;
//判断“=”是否被点击过,每次操作时清空上次操作的记录
static bool ReOperator = false;
TextBox txtShow = new TextBox();
/**//// <summary>
/// 在页面登录事件里面创建计算器的界面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
//定义表格用于容纳其它创建的控件
Table txtTB = new Table();
form1.Controls.Add(txtTB);
txtShow.Width = 110;
TableRow TR = new TableRow();
TableCell TC = new TableCell();
TC.Controls.Add(txtShow);
TR.Controls.Add(TC);
txtTB.Controls.Add(TR);
Table TB = new Table();
form1.Controls.Add(TB);
//循环创建有规律分布的数字控件,和操作符控件
for (int i = 0,I = 1; i < 3; i++)
{
//用两个数组记录操作符控件的Text和ID值
string[] Op = {"+","-","*"};
string[] CharOp = {"jia","jian","cheng"};
TableRow TRows = new TableRow();
TB.Controls.Add(TRows);
for (int j = 0; j < 3; j++)
{
TableCell Tcell = new TableCell();
Tcell.Controls.Add(CreateBtn(I.ToString()));
I++;
TRows.Controls.Add(Tcell);
}
TableCell TcellO = new TableCell();
Button OperBtn = new Button();
OperBtn.Text = Op[i];
OperBtn.ID = CharOp[i];
OperBtn.Width = 25;
OperBtn.Click += new EventHandler(Btn_Click);
TcellO.Controls.Add(OperBtn);
TRows.Controls.Add(TcellO);
}
TableRow TRow = new TableRow();
TB.Controls.Add(TRow);
TableCell Tc2 = new TableCell();
Tc2.Controls.Add(CreateBtn("Backspace","B"));
TRow.Controls.Add(Tc2);
TableCell Tc3 = new TableCell();
Tc3.Controls.Add(CreateBtn("Clear","C"));
TRow.Controls.Add(Tc3);
TableCell Tc1 = new TableCell();
Tc1.Controls.Add(CreateBtn("deng", "="));
TRow.Controls.Add(Tc1);
TableCell Tc = new TableCell();
Tc.Controls.Add(CreateBtn("chu", "/"));
TRow.Controls.Add(Tc);
}
/**//// <summary>
/// 创建操作数按钮的函数
/// </summary>
/// <param name="Num">操作数</param>
/// <returns>返回一个按钮</returns>
protected Button CreateBtn(string Num)
{
Button NumBtn = new Button();
NumBtn.Text = Num;
NumBtn.ID = "ID" + Num;
NumBtn.Width = 25;
NumBtn.Click += new EventHandler(Btn_Click);
return NumBtn;
}
/**//// <summary>
/// 创建操作符按钮的函数
/// </summary>
/// <param name="ID">按钮的ID号</param>
/// <param name="Operator">操作符</param>
/// <returns>返回一个按钮</returns>
private Button CreateBtn(string ID, string Operator)
{
Button OperBtn = new Button();
OperBtn.Text = Operator;
OperBtn.ID = ID;
OperBtn.Width = 25;
OperBtn.Click += new EventHandler(Btn_Click);
return OperBtn;
}
/**//// <summary>
/// 定义按钮响应的事件,所有按钮通用一个事件,用按钮的Text属性区分要执行的操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Click(object sender, EventArgs e)
{
string BtnText = ((Button)sender).Text;
switch(BtnText)
{
case "+":
Num1 = int.Parse(txtShow.Text);
OperatorF = BtnText;
txtShow.Text = "";
break;
case "-":
Num1 = int.Parse(txtShow.Text);
OperatorF = BtnText;
txtShow.Text = "";
break;
case "*":
Num1 = int.Parse(txtShow.Text);
OperatorF = BtnText;
txtShow.Text = "";
break;
case "/":
Num1 = int.Parse(txtShow.Text);
OperatorF = BtnText;
txtShow.Text = "";
break;
case "=":
if (OperatorF == "+")
{
Num2 = Num1 + double.Parse(txtShow.Text);
txtShow.Text = Num2.ToString();
}
else if (OperatorF == "-")
{
Num2 = Num1 - double.Parse(txtShow.Text);
txtShow.Text = Num2.ToString();
}
else if (OperatorF == "*")
{
Num2 = Num1 * double.Parse(txtShow.Text);
txtShow.Text = Num2.ToString();
}
else if (OperatorF == "/")
{
Num2 = Num1 / double.Parse(txtShow.Text);
txtShow.Text = Num2.ToString();
}
ReOperator = true;
break;
case "C":
txtShow.Text = "";
Num1 = Num2 = 0;
break;
case "B":
if (txtShow.Text.Length >=1)
{
txtShow.Text = txtShow.Text.Substring(0, txtShow.Text.Length - 1);
if (txtShow.Text != "")
Num1 = int.Parse(txtShow.Text);
else
Num1 = 0;
}
break;
default:
if (ReOperator)
{
txtShow.Text = "";
Num1 = Num2 = 0;
ReOperator = false;
}
txtShow.Text += BtnText;
break;
}
}
}
整个程序的运行结果如下:
可以将这个计算器做成一个自定义Web控件,代码的改动不大,以后有机会了再讲,程序中做的计算器的功能还不完整,有的地方控制还不够,广大网友有兴趣还可以自己完善扩展。
转载于:https://www.cnblogs.com/salonliudong/archive/2007/05/19/752322.html
[原]动态创建Web控件制做计算器相关推荐
- asp.net 动态创建TextBox控件 如何加载状态信息
接着上文Asp.net TextBox的TextChanged事件你真的清楚吗? 这里我们来说说状态数据时如何加载的. 虽然在Control中有调用状态转存的方法,但是这里有一个判断条件 if (_c ...
- FindChildControl与FindComponent(动态创建的控件要通过Owner.FindComponent去找该控件)
前两天编码遇到了要使用FindChildControl方法获取指定名称的TSpeedButton按钮,结果折腾了半天就是没得结果(基础不扎实,呵呵),于是赶紧搜索了下,补习关于这两个方法的用法. TW ...
- 【VS开发】动态创建ActiveX控件
bool CCollectDataDlgDlg::CreateMyCtrl(LPRECT lpRect, UINT nID, CWnd *pParent) { CLSID clsid; wstri ...
- js动态创建html控件,通过JS动态添加html控件后,添加样式以及OnClick
/** * 新增标签 * @param count */ function addLabel(count){ var image_id_obj = document.getElementById(&q ...
- [转]利用ASP.NET 2.0创建自定义Web控件(1)
原址:http://hi.baidu.com/sjbh/blog/item/cc58fd1bd35d3ad2ad6e7593.html 简介 从使用基本的文本编辑器到创作标记页面,Web 开发已经 ...
- asp.net panel 加html,ASP.NET 页面中动态增加的控件、添加事件
要求:页面上有一个Add按钮,每点击一次该按钮,页面上动态创建一个WebPartZone! 提醒:WebPartZone只能在OnInit或之前才能创建,否则报异常! 大家都知道,按钮的点击事件是在R ...
- 动态创建 Web 服务器控件模板
由于各种原因,直到运行时,您可能才会知道需要什么模板或模板中应包含哪些文本或控件.在这种情况下,您需要能够动态创建该模板(在代码中). 注意 您还可以将模板创建为 Web 窗体用户控件,并将其动态 ...
- Web控件文本框Reset的功能
在前一篇中<怎样实现Web控件文本框Reset的功能>http://www.cnblogs.com/insus/p/4120889.html Insus.NET只实现了文本框的功能.单个或 ...
- Html控件和Web控件(转)
作为一名ASP.NET的初学者,了解并且区别一些混淆概念是很必须的,今天这篇博文 就是主要向大家介绍一下Html控件和Web控件.在ASP.net中,用户界面控件主要就是 Html控件和Web控件,在 ...
最新文章
- 求解迷宫问题的所有路径及最短路径程序
- windows下,怎么轻易拷贝一个文件的完整路径?
- 六部工坊ros启智机器人定点导航技术_【展品抢鲜看】程天科技外骨骼机器人亮相峰会,让每个人享受机器人的服务!...
- 游戏开发中一些常用的数学知识
- 同人游戏开发工具巡礼——AVG(ADV)引擎篇
- 矩阵连乘问题算法思想_算法分析与设计——矩阵连乘问题
- vscode中出现 Statements must be separated by newlines or semicolons 问题的解决方法之一
- 个人博客logo如何设计?案例合集参考
- 模型包装,答辩吹牛方法论!
- Flutter开发之——getX-路由管理(04)
- Python-爬虫(爬虫练习 爬取古诗文网五言绝句)
- tableView的懒懒的跳转方式,加载数据源方式
- android仿抖音礼物列表实现,Android仿抖音列表效果
- 自注意力机制与注意力机制
- Google Android 开发者网站更新了
- PCB布局布线技巧总结
- 正则表达式30分钟入门
- HTML基础(P24-P44)
- 切绳子题解(博客搬家)
- 2019年秋季学期实验室安全考试2
热门文章
- 在cxf中使用配置避免增加字段导致客户端必须更新、同步实体属性的问题
- JavaScript核心语法学习部分(四)
- Unity3d5.0之后关于游戏音乐的管理
- 我也来搭android环境
- Java入门系列-16-继承
- 第一百一十四节,JavaScript文档对象,DOM进阶
- c primer plus(第五版)读书笔计 第四章(1)
- [转]免费邮件服务器hMailServer搭配SpamAssassin过滤垃圾邮件:安装和设置
- 设计模式总结——代理模式以及java的动态代理
- React源码分析与实现(一):组件的初始化与渲染