WPF简单的口算案例
前几天在博客园,看到有博友利用Winform做了一个口算案例,于是我想把它移植在WPF程序中。Winform程序:http://www.cnblogs.com/ImYZF/p/3345452.html

WPF中:

个人感觉在WPF中动态创建完控件之后,无法有像Winform中FindName()这样的方法来对控件进行搜寻,因此我采用的方法是在布局控件中动态创建控件后,用for循环遍历布局中的控件,然后利用
布局控件的Children属性进行对控件的定位。
上代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace 口算训练
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} private void btnAdd_Click(object sender, RoutedEventArgs e)
{
if (txtNum.Text == "")
{
MessageBox.Show("请输入数目!");
return;
}
//清空布局控件中的控件
grid2.Children.Clear();
int totalNumber = int.Parse(txtNum.Text);
Random random = new Random();
TextBox tb = new TextBox();
Label l = new Label();
for (int i = ; i < totalNumber; i++)
{
//根据问题的数量设置row的个数
grid2.RowDefinitions.Add(new RowDefinition() { Height=new GridLength()});
for (int j = ; j <=; j++)
{
//设置文本框的一些属性
tb = new TextBox();
tb.Width = ;
tb.Height = ;
tb.Name = "txt" + Convert.ToString(i)+Convert.ToString(j);
//附加属性
tb.SetValue(Grid.RowProperty, i);
tb.SetValue(Grid.ColumnProperty,(j-)*); if (j <= )
{
//产生随机数,作为加数
tb.Text = Convert.ToString(random.Next());
tb.IsReadOnly = true;
}
//添加子控件
grid2.Children.Add(tb);
l = new Label(); //创建Label
switch (j) {
case : l.Width = ; l.Height = ; l.Content = "+"; l.SetValue(Grid.RowProperty, i); l.SetValue(Grid.ColumnProperty, j);
break;
case : l.Width = ; l.Height = ; l.Content = "="; l.SetValue(Grid.RowProperty, i); l.SetValue(Grid.ColumnProperty, j + );
break;
case : l.Width = ; l.Height = ; ; l.Name = "labelresult" + Convert.ToString(i); ; l.SetValue(Grid.RowProperty, i); l.SetValue(Grid.ColumnProperty, j + );
break; }
grid2.Children.Add(l); } }
} private void btnResult_Click(object sender, RoutedEventArgs e)
{
int totalNumber=int.Parse(txtNum.Text);
TextBox[] tbs;
for (int i = ; i <=totalNumber; i++)
{ tbs = new TextBox[];
//获取有关TextBox控件
tbs[] = grid2.Children[ * (i-)] as TextBox;
tbs[] = grid2.Children[ * (i-) + ] as TextBox;
tbs[] = grid2.Children[ * (i-) + ] as TextBox; Label labelresult = grid2.Children[ * (i-) + ] as Label;
//如果未填答案,按错误处理
if (tbs[].Text == "")
{
labelresult.Content = "X";
continue;
}
int add = Convert.ToInt32(tbs[].Text) + Convert.ToInt32(tbs[].Text);
if (add == Convert.ToInt32(tbs[].Text))
{
labelresult.Content = "right!";
}
else
{
labelresult.Content = "X";
}
}
}
}
}
WPF简单的口算案例的更多相关文章
- 洛谷 P1957 口算练习题
洛谷 P1957 口算练习题 题目描述 王老师正在教简单算术运算.细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习. 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效 ...
- 【转载】Ssh整合开发介绍和简单的登入案例实现
Ssh整合开发介绍和简单的登入案例实现 Ssh整合开发介绍和简单的登入案例实现 一 介绍: Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开 ...
- WPF简单入门总结
WPF简单总结 最近看了点关于WPF的东西,总结了点点入门的东西. XAML语法基础 1. 定义样式 <Window.Resources><!--窗体资源的定义--> < ...
- C# WinForm动态控件实例:口算训练
昨天晚上回寝室看到室友正在被一个C#课的作业苦恼,作业的内容是编写一个口算训练程序,能够实现随意添加题目数量.于是,喜欢写C#的我就决定解救一下他们. 创建动态控件 既然要动态添加,那就必须使用动态控 ...
- 用Python开发小学二年级口算自动出题程序
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 武汉光谷一小二年级要求家长每天要给小孩出口算题目,让孩子练习. 根据老师出题要求编写了Python程序 ...
- hdu 6287 口算训练
题意: 小Q非常喜欢数学,但是他的口算能力非常弱.因此他找到了小T,给了小T一个长度为nn的正整数序列a1,a2,...,ana1,a2,...,an,要求小T抛出mm个问题以训练他的口算能力. 每个 ...
- 《口算大作战 2》DLC:算法真奇妙
211614331 王诚荣 211614354 陈斌 --第一次结对作业 DLC DLC:三年级混合运算模块现已更新!现在您可以愉快的使用三年级题库啦.同时您必须拥有本体才能使用此DLC 单击此处查看 ...
- [BZOJ5358]/[HDU6287]口算训练
[BZOJ5358]/[HDU6287]口算训练 题目大意: 给定一个长度为\(n(n\le10^5)\)的正整数序列\(a_{1\sim n}\),\(m(m\le10^5)\)次询问.每次询问给出 ...
- [Bzoj5358][Lydsy1805月赛]口算训练(预处理+动态开点线段树)
5358: [Lydsy1805月赛]口算训练 Time Limit: 5 Sec Memory Limit: 512 MBSubmit: 318 Solved: 105[Submit][Stat ...
随机推荐
- 实用JS大全
****************************************************************(一)常用元素,对象,事件,技巧 事件源对象 event.srcElem ...
- ganglia监控hadoop2.0配置方法
ganglia监控hadoop2.0配置方法前提:hadoop2.0集群已安装ganglia监控工具第一步:Hadoop用户登录集群每一个节点,修改文件:vi /opt/hadoop-2.0.0-cd ...
- autoscan; aclocal; autoconf; automake --add-missing; ./configure; make
1.autoscan 在源码目录下执行autoscan,生成configure.scan,重命名为configure.in或者configure.ac,然后编辑文件内容: ============== ...
- Groovy选型
Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代 ...
- 20个2014年最优秀的PHP框架
http://www.php100.com/html/it/mobile/2014/0813/7198.htmlhttp://medoo.in/api/select
- HTML5와 CSS3 적용기
HTML5의 DTD 선언 <!DOCTYPE html> HTML5의 인코딩 선언 <meta charset="utf-8"> 그리고나서는 새로 ...
- 谈谈JavaScript事件
众所周知,web前端包含三个基本技术:html.css和javascript.三者融合,才让网页变得精彩纷呈!如今,web上的操作越来越趋于复杂,JavaScript事件在网页中也遍地开花,有时候也是 ...
- hdoj1423 最长上升公共子序列
hdoj1423 题目分析: 两个数组a[n1] , b[n2], 求最长上升公共子序列. 我们可用一维存储 f[i] 表示 b 数组以 j 结尾, 与 a[] 数组构成的最长公共上升子序列. 对数组 ...
- 转 DevExpress-ASPxPageControl 动态添加 TabPage 内容
话不多说想看代码,在细说. 前台,很简单.主要看后台 </dx:ASPxPageControl> 后台,注意注释说明. private void GetUserAttendCellsNew ...
- Swift静态方法
与静态属性类似,Swift中还定义了静态方法,也称为类型方法,所谓“类型”是指枚举.结构体和类.静态方法定义的方法也是与静态属性类似的,枚举和结构体的静态方法使用的关键字是static,类的静态方法使 ...