07.6.7
1. 判断题
(1) 从HTML代码来看,所有的Web服务器控件都有“runat="server"”标记。( )
(2) LinkButton控件与Hyperlink控件的用法和功能完全相同。( )
(3) CheckBoxList控件中的选项不能同时选中多个。( )
(4) 若要将Web服务器控件的实例作为Table服务器控件某单元格的内容,则只能使用其Controls属性以编程方式在代码设置。( )
(5) 所有的数据显示控件都可以利用数据源控件的操作命令来编辑数据。( )
(6) 在DataList控件中,当单击某个已设置CommandName属性值,但在代码中没有对应事件的按钮控件,都将会触发ItemCommand事件。( )
(7) 验证控件与被验证的输入控件是一一对应的。( )
(8) RangeValidator控件对空输入也能验证。( )
(9) 使用Menu服务器控件可以生成静态菜单、动态菜单以及部分动态菜单三种类型。( )
2. 填空题
(1) 若希望每次修改TextBox服务器控件文本内容后都能立刻被服务器处理,则应将( )属性值更改为true。
(2) 若不采用任何容器控件,要将页面中的若干个RadioButton服务器控件分为两组进行单选,则应该设置的属性是( )。
(3) SqlDataSource组件的数据操作命令可以是单条SQL语句,也可以是( )。
(4) SqlDataSource组件的DataSourceMode属性值为( )时,才可以使用筛选功能。
(5) 若要在GridView控件中添加编辑命令按钮,则需添加( )类型的列字段,或将属性( )的属性值设置为true。
(6) ( )控件用于验证用户是否进行了有效的输入。
(7) CompareValidator控件经常用于( )、验证一个控件输入值与某个常数值的大小关系和( )。
(8) 站点地图就是一个用于描述站点逻辑结构的( ),一般以Web.sitemap文件的形式保存在Web应用程序的根目录下,以辅助导航控件完成站点导航。
3. 母版页的作用是什么?
4. 网页制作中有哪几种样式设置方法?各有何特点?
5. 采用GridView控件、DataList控件、DetailsView控件来显示数据各有何特点?
6. 在画线处填上合适的内容,使程序变得正确完整。
//这是一个用户窗体的代码,用户控件名为WebUserControl1.ascx
public DateTime newdate=DateTime.Now;
private bool Tag=true;
protected void Page_Load(object sender, System.EventArgs e)
{
if ((!Page.IsPostBack) && Tag)
{
//初始化表示年月日的三个下拉框列表
DropDownListYear.SelectedValue=newdate.Year.ToString();
DropDownListMonth.SelectedValue=newdate.Month.ToString() ;
DropDownListDay.SelectedValue=newdate.Day.ToString() ;
}
}
public void init(DateTime DT)
{
//将下拉框列表表示为初始化的时间
DropDownListYear.SelectedValue=DT.Year.ToString();
DropDownListMonth.SelectedValue=DT.Month.ToString();
DropDownListDay.SelectedValue=DT.Day.ToString();
Tag=false;
}
//这是一个页面的代码,页面名字为WebForm1.aspx
protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("将一个日期值输入文本框中");
}
protected void Button1_Click(object sender, System.EventArgs e)
{
try
{
DateTime dt =DateTime.Parse(TextBox1.Text);
Response.Redirect(string.Format("WebForm2.aspx?time={0}&timetext={1}",
dt,this.TextBox1.Text));
Session["datetime"]= TextBox1.Text;
}
catch
{
Response.Write("<script>alert('"+ "输入了无效的日期,请重新输
入!"+"');</script>");
}
}
//这是另一个页面的代码,页面名字为WebForm2.aspx
protected WebUserControl1 WebUserControl11;
protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("通过在Url后直接加入参数的方法传递的用户输入的时间为:<br>");
Response.Write( _____________________________________ );
Response.Write("通过Session对象传递的方法传递的用户输入的时间为:<br>");
Response.Write( _____________________________________ );
Response.Write("WebUserControl11接收到的用户输入的时间为:<br>");
//在用户控件中显示时间
____________________________________________ ;
}
7. 编写一个ASP.NET Web应用程序来模拟聊天室程序,使用Application与Session对象来保存用户的发言,登录名,使用定时刷新页面的方法来定时刷新,从Application对象读取所有用户的发言。
答案:
1. 判断题
(1) 从HTML代码来看,所有的Web服务器控件都有“runat="server"”标记。( 对 )
(2) LinkButton控件与Hyperlink控件的用法和功能完全相同。( 错 )
(3) CheckBoxList控件中的选项不能同时选中多个。( 错 )
(4) 若要将Web服务器控件的实例作为Table服务器控件某单元格的内容,则只能使用其Controls属性以编程方式在代码设置。( 对 )
(5) 所有的数据显示控件都可以利用数据源控件的操作命令来编辑数据。( 错 )
(6) 在DataList控件中,当单击某个已设置CommandName属性值,但在代码中没有对应事件的按钮控件,都将会触发ItemCommand事件。( 对 )
(7) 验证控件与被验证的输入控件是一一对应的。( 错 )
(8) RangeValidator控件对空输入也能验证。( 对 )
(9) 使用Menu服务器控件可以生成静态菜单、动态菜单以及部分动态菜单三种类型。( 错 )
2. 填空题
(1) 若希望每次修改TextBox服务器控件文本内容后都能立刻被服务器处理,则应将(AutoPostBack)属性值更改为true。
(2) 若不采用任何容器控件,要将页面中的若干个RadioButton服务器控件分为两组进行单选,则应该设置的属性是(GroupName)。
(3) SqlDataSource组件的数据操作命令可以是单条SQL语句,也可以是(存储过程 )。
(4) SqlDataSource组件的DataSourceMode属性值为(DataSet)时,才可以使用筛选功能。
(5) 若要在GridView控件中添加编辑命令按钮,则需添加(CommandField)类型的列字段,或将属性(AutoGenerateEditButton)的属性值设置为true。
(6) (RequiredFieldValidator)控件用于验证用户是否进行了有效的输入。
(7) CompareValidator控件经常用于(验证两个控件输入值的大小关系)、验证一个控件输入值与某个常数值的大小关系和(确定一个控件中的输入值是否可以转换到特定的数据类型)。
(8) 站点地图就是一个用于描述站点逻辑结构的(XML文件),一般以Web.sitemap文件的形式保存在Web应用程序的根目录下,以辅助导航控件完成站点导航。
3. 母版页的作用是什么?
【解答】
母版页(Master Page)的扩展名为“.master”,它相当于网页的模板。在其他网页中,只要引用了母版页,母版页的页面就可以自动显示出来,设计者可以修改引用的母版页中预留的部分,其它部分保持不变,这样就可以使多个页面的风格保持一致,给网页设计带来了很大的方便。
4. 网页制作中有哪几种样式设置方法?各有何特点?
【解答】
网页制作中有:内联式样式设置、直接嵌入式样式设置和外部链接式样式设置三种方式。
1) 内联式样式设置:
设置方法:直接在要设置样式的各标记元素中修改style属性;
优点:直观、方便;
缺点:不易于维护和修改;
适用于:网页中个别需要修改的元素的样式定义;
2) 直接嵌入式样式设置:
设置方法:在HTML文档的<head></head>之间添加<style></style>定义,<style></style>部分是所有需要设置样式的元素的属性定义。
优点:对当前页面内的所有元素的样式修改、维护比较方便;
缺点:对于网站建设,要采用相同的样式设置则比较麻烦;
适用于:单独网页的样式定义;
3) 外部链接式样式设置:
设置方法:把所有样式定义放在一个独立的文件中,凡是需要使用该文件中规定样式的网页,只要在其<head>与</head>之间添加一个对该样式文件的链接:<link type="text/css" href="MyStyle1.css" rel="Stylesheet" />即可;
适用于:需要统一显示样式的网站建设。
5. 采用GridView控件、DataList控件、DetailsView控件来显示数据各有何特点?
【解答】GridView控件、DataList控件、DetailsView控件都可以利用SqlDataSource控件绑定SQL数据源自动显示数据。就显示数据的能力来说,GridView控件、DataList控件一次可以显示数据表中的多条记录,而DetailsView控件每次只能显示数据表中的一条记录;就操作数据的能力来说,GridView控件、DetailsView控件都可以自动利用SqlDataSource控件的数据操作命令来编辑所显示的数据,而DataList控件则需要编写自身的相应事件才可以完成编辑数据的操作。
6. 在画线处填上合适的内容,使程序变得正确完整。
//这是一个用户窗体的代码,用户控件名为WebUserControl1.ascx
public DateTime newdate=DateTime.Now;
private bool Tag=true;
protected void Page_Load(object sender, System.EventArgs e)
{
if ((!Page.IsPostBack) && Tag)
{
//初始化表示年月日的三个下拉框列表
DropDownListYear.SelectedValue=newdate.Year.ToString();
DropDownListMonth.SelectedValue=newdate.Month.ToString() ;
DropDownListDay.SelectedValue=newdate.Day.ToString() ;
}
}
public void init(DateTime DT)
{
//将下拉框列表表示为初始化的时间
DropDownListYear.SelectedValue=DT.Year.ToString();
DropDownListMonth.SelectedValue=DT.Month.ToString();
DropDownListDay.SelectedValue=DT.Day.ToString();
Tag=false;
}
//这是一个页面的代码,页面名字为WebForm1.aspx
protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("将一个日期值输入文本框中");
}
protected void Button1_Click(object sender, System.EventArgs e)
{
try
{
DateTime dt =DateTime.Parse(TextBox1.Text);
Response.Redirect(string.Format("WebForm2.aspx?time={0}&timetext={1}",
dt,this.TextBox1.Text));
Session["datetime"]= TextBox1.Text;
}
catch
{
Response.Write("<script>alert('"+ "输入了无效的日期,请重新输入!"+"');</script>");
}
}
//这是另一个页面的代码,页面名字为WebForm2.aspx
protected WebUserControl1 WebUserControl11;
protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("通过在Url后直接加入参数的方法传递的用户输入的时间为:<br>");
Response.Write( _____________________________________ );
Response.Write("通过Session对象传递的方法传递的用户输入的时间为:<br>");
Response.Write( _____________________________________ );
Response.Write("WebUserControl11接收到的用户输入的时间为:<br>");
//在用户控件中显示时间
____________________________________________ ;
}
【解答】
Request.QueryString["timetext"]
Session["datetime"].ToString()
WebUserControl11.init(DateTime.Parse(Request.QueryString["time"].ToString()))
7. 编写一个ASP.NET Web应用程序来模拟聊天室程序,使用Application与Session对象来保存用户的发言,登录名,使用定时刷新页面的方法来定时刷新,从Application对象读取所有用户的发言。
【解答】
1) 创建一个名为Chat的ASP.NET Web应用程序,修改Default.aspx页面的名字为Chat.aspx。
2) 打开Global.asax,在下列事件中加入代码:
protected void Application_Start(Object sender, EventArgs e)
{
Application["Msg1"]="";
Application["Msg2"]="";
Application["Msg3"]="";
Application["Msg4"]="";
Application["Msg5"]="";
//保存聊天人数
Application["UserNo"]=0;
}
//有新用户登录,聊天人数加一
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["UserNo"]=(int)Application["UserNo"]+1;
Application.UnLock();
}
//每个用户离开时,使聊天人数减一
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["UserNo"]=(int)Application["UserNo"]-1;
Application.UnLock();
}
3) 打开Chat.aspx,添加三个文本框和一个按钮,一个Label标签,分别命名为TextBoxUser,TextBoxChat,TextBoxmsg,ButtonSend,LabelUserNo。把TextBoxmsg的属性改为多行显示。
4) 在Chat.aspx中添加如下代码。
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (TextBoxUser.Text!="")
{
Session["name"]=TextBoxUser.Text ;
}
else
{
Session["name"]="陌生人" ;
}
if (TextBoxChat.Text!="")
{
Application["Msg5"]=Application["Msg4"];
Application["Msg4"]=Application["Msg3"];
Application["Msg3"]=Application["Msg2"];
Application["Msg2"]=Application["Msg1"];
Application["Msg1"]=Session["name"]+":"+ TextBoxChat.Text;
}
LabelUserNo.Text="现在共有"+Application["UserNo"].ToString()+"人聊天";
TextBoxmsg.Text=Application["Msg1"].ToString()+"/n";
TextBoxmsg.Text+=Application["Msg2"].ToString()+"/n";
TextBoxmsg.Text+=Application["Msg3"].ToString()+"/n";
TextBoxmsg.Text+=Application["Msg4"].ToString()+"/n";
TextBoxmsg.Text+=Application["Msg5"].ToString()+"/n";
}
07.6.6
1. 写出符合下列要求的正则表达式:
1) 要求4-8个英文字母。
2) 不能包含字母,至少1个字符。
3) 至少3个数字。
4) 至少3个字符。
5) 至少3个英文字母。
6) 任意字符。
7) 3个字母或数字,如123,r3a等。
8) 3个点。
9) @前至少有1个字符,@后至少有3个字符。
10) 必须输入左括号。
2. 使用保持连接的方式编写程序,计算各年级平均成绩(年级取自学号字段的前两个字符),并显示结果。
3. 使用保持连接的方式编写程序,查询MyTable2中不及格学生的学号,姓名,性别,成绩。并将结果在ListBox中显示出来。
4. 在画线处填上合适的内容,使程序变得正确完整。
string connString="server=localhost;Integrated Security=SSPI;database=pubs";
SqlConnection conn=____________________________
string strsql="select * from MyTable2";
SqlDataAdapter adapter=new SqlDataAdapter(_____________);
dataset=new DataSet();
adapter.Fill(________________,"MyTable2");
this.dataGridView1.DataSource=dataset.Tables["MyTable2"];
5. 已知数据库中定义了一张person表,表的数据结构如下:
字段名称 字段类型 字段含义
id 数字 编号
xm 文本 姓名
xb 文本 性别
nl 数字 年龄
zip 文本 邮政编码
用编写代码的方法在DataGridView中显示该数据表中年龄大于18的所有纪录,显示时以编号的升序排序,要求禁止用户编辑数据。
答案:
1. 写出符合下列要求的正则表达式:
1) 要求4-8个英文字母。
2) 不能包含字母,至少1个字符。
3) 至少3个数字。
4) 至少3个字符。
5) 至少3个英文字母。
6) 任意字符。
7) 3个字母或数字,如123,r3a等。
8) 3个点。
9) @前至少有1个字符,@后至少有3个字符。
10) 必须输入左括号。
【解答】
1) [a-zA-Z]{4,8}
2) [^a-zA-Z]{1,}
3) [0-9]{3,}
4) {3,}
5) [a-zA-Z]{3,}
6) .{0,}
7) [A-Za-z0-9]{3}
8) /.{3}
9) .{1,}@ .{3,}
10) /(
2. 使用保持连接的方式编写程序,计算各年级平均成绩(年级取自学号字段的前两个字符),并显示结果。
【解答】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 习题8_6_1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//添加Button按钮在ListBox中显示结果
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Add("年级 平均成绩");
string connectionString = Properties.Settings.Default.MyDatabaseConnectionString;
//根据连接字符串创建SqlConnection实例
SqlConnection conn = new SqlConnection(connectionString);
//创建SqlCommand实例,并设置SQL语句和使用的连接实例
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select substring(学号,1,2) as 年级,avg(成绩) as 平均成绩 from MyTable2 group by substring(学号,1,2)";
cmd.Connection = conn;
try
{
conn.Open();
SqlDataReader r = cmd.ExecuteReader();
while (r.Read() == true)
{
listBox1.Items.Add(string.Format("{0}级 {1}", r[0], r[1]));
}
r.Close();
}
catch (Exception err)
{
MessageBox.Show(err.Message, "计算成绩失败");
}
finally
{
conn.Close();
}
}
}
}
3. 使用保持连接的方式编写程序,查询MyTable2中不及格学生的学号,姓名,性别,成绩。并将结果在ListBox中显示出来。
【解答】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 习题8_6_2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Add(" 学号 姓名 性别 成绩");
string connectionString = Properties.Settings.Default.MyDatabaseConnectionString;
//根据连接字符串创建SqlConnection实例
SqlConnection conn = new SqlConnection(connectionString);
//创建SqlCommand实例,并设置SQL语句和使用的连接实例
SqlCommand cmd = new SqlCommand();
cmd.CommandText =
"Select 学号,姓名,性别, 成绩 From MyTable2 Where (成绩<60)";
cmd.Connection = conn;
try
{
conn.Open();
SqlDataReader r = cmd.ExecuteReader();
while (r.Read() == true)
{
listBox1.Items.Add( string.Format("{0} {1} {2} {3}", r[0], r[1], r[2], r[3]));
}
r.Close();
}
catch (Exception err)
{
MessageBox.Show(err.Message, "查询成绩失败");
}
finally
{
conn.Close();
}
}
}
}
4. 在画线处填上合适的内容,使程序变得正确完整。
string connString="server=localhost;Integrated Security=SSPI;database=pubs";
SqlConnection conn=____________________________
string strsql="select * from MyTable2";
SqlDataAdapter adapter=new SqlDataAdapter(_____________);
dataset=new DataSet();
adapter.Fill(________________,"MyTable2");
this.dataGridView1.DataSource=dataset.Tables["MyTable2"];
【解答】
string connString="server=localhost;Integrated Security=SSPI;database=pubs";
SqlConnection conn= new SqlConnection(Properties.Settings.Default.MyDatabaseConnectionString);
string strsql="select * from MyTable2";
SqlDataAdapter adapter=new SqlDataAdapter(conn);
dataset=new DataSet();
adapter.Fill(dataset,"MyTable2");
this.dataGridView1.DataSource=dataset.Tables["MyTable2"];
5. 已知数据库中定义了一张person表,表的数据结构如下:
字段名称 字段类型 字段含义
id 数字 编号
xm 文本 姓名
xb 文本 性别
nl 数字 年龄
zip 文本 邮政编码
用编写代码的方法在DataGridView中显示该数据表中年龄大于18的所有纪录,显示时以编号的升序排序,要求禁止用户编辑数据。
【解答】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 习题8_6_5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string connectionstring = Properties.Settings.Default.MyDatabaseConnectionString ;
SqlConnection conn = new SqlConnection(connectionstring);
try
{
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(
"select id,xm,xb,nl from person where nl > 18 order by id", conn);
DataSet dataset = new DataSet();
//如果不指定表名,则系统自动生成一个默认的表名
adapter.Fill(dataset, "person");
//可以使用索引引用生成的表
dataGridView1.DataSource = dataset.Tables["person"];
adapter.Dispose();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
finally
{
conn.Close();
}
}
private void Form1_Load(object sender, EventArgs e)
{
//不允许用户直接在最下面的行添加新行
dataGridView1.AllowUserToAddRows = false;
//不允许用户直接按Delete键删除行
dataGridView1.AllowUserToDeleteRows = false;
}
}
}
07.4.27
1. 填空题
1) 使控件是否可以对用户交互作出响应的属性是__________。
2) 控制控件是否显示的属性是____________。
3) 若要在文本框中输入密码,常指定___________属性。
4) 若某复选框某时刻CheckState属性的值为Indeterminate,则其属性Checked的值为__________。
5) 使用_____________控件可以将多个RadioButton控件分为两个单选组。
6) 若不希望用户在ComboBox控件中编辑文本,则应将属性_______________的属性值设置为DropDownList。
7) 用于设置MenuStrip控件中某菜单项快捷键的属性是_________________。
8) 用于控制ListView控件中的各项显示方式的属性是________________。
2. 判断题
1) 控件就是属性、方法和事件的集合封装体。 ( )
2) TextBox控件只能用于单行文本的输入。 ( )
3) 通过RichTextBox控件只能够与RTF文件进行交互操作。 ( )
4) CheckBox控件的Checked属性与CheckState属性的值始终是相同的。 ( )
5) ToolTip组件用于显示某指定控件的自定义提示信息的。 ( )
3. 区别TextBox控件、MaskedTextBox控件、RichTextBox控件的使用场合。
4. 简要说明CheckBox控件和RadioButton控件的区别。
5. 设计一个Windows应用程序,窗体上有一个TextBox控件、一个Button控件。要求,每当用户单击按钮时,文本框都会增加一行文字来反映单击的次数,例如“第3次单击按钮”。
6. 编写一段程序,向ListBox控件listBox1中,自动添加10个数,每个数占一项。
7. 参照Windows系统“附件”中的“计算器”,自行编写一个简易的计算器。要求:可以实现由0~4构成的整数的加减运算。
答案:
1. 填空题
1) 使控件是否可以对用户交互作出响应的属性是 Enabled 。
2) 控制控件是否显示的属性是 Visible 。
3) 若要在文本框中输入密码,常指定 PasswordChar 属性。
4) 若某复选框某时刻CheckState属性的值为Indeterminate,则其属性Checked的值为 Unchecked 。
5) 使用 Panel 或 GroupBox 控件可以将多个RadioButton控件分为两个单选组。
6) 若不希望用户在ComboBox控件中编辑文本,则应将属性 DropDownStyle 的属性值设置为DropDownList。
7) 用于设置MenuStrip控件中某菜单项快捷键的属性是 ShortcutKeys 。
8) 用于控制ListView控件中的各项显示方式的属性是 View 。
2. 判断题
1) 控件就是属性、方法和事件的集合封装体。 ( 对 )
2) TextBox控件只能用于单行文本的输入。 ( 错 )
3) 通过RichTextBox控件只能够与RTF文件进行交互操作。 ( 错 )
4) CheckBox控件的Checked属性与CheckState属性的值始终是相同的。 ( 错 )
5) ToolTip组件用于显示某指定控件的自定义提示信息的。 ( 对 )
3. 区别TextBox控件、MaskedTextBox控件、RichTextBox控件的使用场合。
【解答】
TextBox控件一般用于单段文本的编辑,可以设置为单行或多行的输入模式,也可以用作密码的输入;MaskedTextBox控件主要用于特定格式的单段文本编辑,在输入文本不符合格式要求的将会触发其MaskInputRejected事件;RichTextBox控件除了具有TextBox的一般文本编辑功能外,还可以进行多段文本的高级编辑功能,如改变文本、段落的显示格式、在文本中查找特定字符和字符串以及与Rtf文件的交互等。
4. 简要说明CheckBox控件和RadioButton控件的区别。
【解答】
CheckBox控件可为用户提供选择功能,常用的是二选一的选择,如“真/假”或“是/否”;但该控件也可以通过属性的设置作三选一的选择。每一个CheckBox所代表的选择都是独立的,若有多个CheckBox控件构成一组选项时,则可以多个同时被选中,相互之间不影响,即复选。RadioButton控件,它与CheckBox控件功能类似,也是用于接收用户的选择,但它是以单项选择的形式出现,即一组RadioButton按钮中只能有一个处于选中状态。一旦某一项被选中,则同组中其他RadioButton按钮的选中状态自动清除。
5. 设计一个Windows应用程序,窗体上有一个TextBox控件、一个Button控件。要求,每当用户单击按钮时,文本框都会增加一行文字来反映单击的次数,例如“第3次单击按钮”。
【解答】
1) 窗体界面如图所示;
2) 窗体中主要控件属性设置如表Ex5-5-1;
表Ex5-5-1
窗体中的主要控件属性
控件 Name属性 功能 其它属性
TextBox控件 textBox1 显示信息 ScrollBars=Vertical; Multiline=True
Button控件 Button1 触发添加信息事件
Button2 触发结束添加事件
3) 主要事件代码。
……
int i = 1;
bool Add = true;
……private void button1_Click(object sender, EventArgs e)
{
if(Add) textBox1.Text += "第" + i + "次单击按钮/r/n";
i++;
}
private void button2_Click(object sender, EventArgs e)
{
Add = false;
}
6. 编写一段程序,向ListBox控件listBox1中,自动添加10个数,每个数占一项。
【解答】
主要代码如下。
public partial class Form1 : Form
{
int m = 1;
……
private void button1_Click(object sender, EventArgs e)
{
for (int i = m ; i < m+10; i++)
{
listBox1.Items.Add(i);
}
m = m + 10;
}
}
7. 参照Windows系统“附件”中的“计算器”,自行编写一个简易的计算器。要求:可以实现由0~4构成的整数的加减运算。
【解答】
1) 窗体界面如图所示;
2) 将InputNumber事件作为button0、button1、button2、button3、button4的Click事件。
完整代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Exer2
{
public partial class FormCalculator : Form
{
enum calculateType { none, add, sub };
calculateType myCal = calculateType.none;
int x, y;
bool isY = false;
public FormCalculator()
{
InitializeComponent();
textBox.TextAlign = HorizontalAlignment.Right;
}
private void InputNumber(object sender, EventArgs e)
{
Button num = (Button)sender;
if (isY)
{
textBox.Clear();
isY = false;
}
textBox.Text += num.Text;
}
private void buttonEqual_Click(object sender, EventArgs e)
{
y = Convert.ToInt32(textBox.Text);
if (myCal == calculateType.add)
{
textBox.Text = Convert.ToString(x + y);
myCal = calculateType.none;
}
if (myCal == calculateType.sub)
{
textBox.Text = Convert.ToString(x - y);
myCal = calculateType.none;
}
isY = true;
}
private void addButton_Click(object sender, EventArgs e)
{
myCal = calculateType.add;
x = Convert.ToInt32(textBox.Text);
isY = true;
}
private void buttonSub_Click(object sender, EventArgs e)
{
myCal = calculateType.sub;
x = Convert.ToInt32(textBox.Text);
isY = true;
}
private void buttonClear_Click(object sender, EventArgs e)
{
textBox.Text = "";
myCal = calculateType.none;
isY = false;
}
}
}
07.3.29
1. 分别写出下列语句执行的结果。
1) Console.WriteLine("{0}--{0:p}good",12.34F);
2) Console.WriteLine("{0}--{0:####}good",0);
3) Console.WriteLine("{0}--{0:00000}good",456);
2. 编写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能
1) 输出字符串的长度。
2) 输出字符串中第一个出现字母a的位置。
3) 在字符串的第3个字符后面插入子串“hello”,输出新字符串。
4) 将字符串“hello”替换为“me”,输出新字符串。
5) 以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。
3. 使用委托的优点是什么?委托和事件有什么区别和联系?
答案:
1. 分别写出下列语句执行的结果。
1) Console.WriteLine("{0}--{0:p}good",12.34F);
2) Console.WriteLine("{0}--{0:####}good",0);
3) Console.WriteLine("{0}--{0:00000}good",456);
12.34--1,234.00%good
0--good
456--00456good
2. 编写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能
1) 输出字符串的长度。
2) 输出字符串中第一个出现字母a的位置。
3) 在字符串的第3个字符后面插入子串“hello”,输出新字符串。
4) 将字符串“hello”替换为“me”,输出新字符串。
5) 以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。
using System;
class Test6
{
public static void Main()
{
string str = "";
while (str.Length <= 3)
{
Console.Write("请输入一个长度大于3的字符串:");
str = Console.ReadLine();
}
//(1)
Console.WriteLine("字符串的长度为:{0}", str.Length);
//(2)
int i = str.IndexOf('a');
if (i > -1)
{
Console.WriteLine("第一个出现字母a的位置是:{0}", i);
}
else
{
Console.WriteLine("字符串中不包含字母a。");
}
//(3)
string str1 = str.Insert(3, "hello"); //在第3个(初始序号为)字符前插入hello
Console.WriteLine("插入hello后的结果为:{0}", str1);
//(4)
string str2 = str1.Replace("hello", "me");
Console.WriteLine("将hello替换为me后的结果为:{0}", str2);
//(5)
string[] arr = str2.Split('m');
Console.WriteLine("以m为分隔符分离后的字符串有:");
for (int j = 0; j < arr.Length; j++)
{
Console.WriteLine(arr[j]);
}
}
}
3. 使用委托的优点是什么?委托和事件有什么区别和联系?
C#中的委托类似于C或C++中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
C#中的“事件”是当对象发生某些事情时,类向该类的客户提供通知的一种方法。事件最常见的用途是用于图形用户界面;通常,表示界面中的控件的类具有一些事件,当用户对控件进行某些操作(如单击某个按钮)时,将通知这些事件。
使用委托来声明事件。委托对象封装一个方法,以便可以匿名调用该方法。事件是类允许客户为其提供方法(事件发生时应调用这些方法)的委托的一种方法。事件发生时,将调用其客户提供给它的委托。
07.3.15
1. 什么是命名空间?命名空间和类库的关系是什么?
2. C#语言中,值类型和引用类型有何不同?
3. 结构和类的区别是什么?
4. C#中的数组类型有何特点?
5. 下列写法哪些是错误的?为什么?
1) if (nMyValue1=5) i=1;
2) if(nMyValue2==1)i=1;
3) int[] myInt={1,2,3};
foreach(int test in myInt)
{
test++;
Console.WriteLine(temp);
}
4) int[] myInt1={1,2,3};
foreach(int test in myInt1)
{
Console>WriteLine(test);
}
6. 编写一个控制台应用程序,要求用户输入5个大写字母,如果用户输入的信息不满足要求,提示帮助信息并要求重新输入。
答案:
1. 什么是命名空间?命名空间和类库的关系是什么?
1) 名称空间是对类的一种逻辑上的分组,即将类按照某种关系或联系划分到不同的名称空间下。
2) 名称空间又可以包含其它的名称空间,例如System.Windows.Forms,是指System名称空间下有Windows名称空间,Windows名称空间下有Forms名称空间。
3) 所有类库都在规定的名称空间下。
2. C#语言中,值类型和引用类型有何不同?
值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。
3. 结构和类的区别是什么?
1) 结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。
2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。
3) 一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。
4. C#中的数组类型有何特点?
1) 数组一般用于存储同一种类型的数据,包括Object类型。
2) 数组是一种引用类型,而不是值类型。
3) C#中除了可以有一维数组、多维数组外,还有交错型数组。
5. 下列写法哪些是错误的?为什么?
1) if (nMyValue1=5) i=1;
2) if(nMyValue2==1)i=1;
3) int[] myInt={1,2,3};
foreach(int test in myInt)
{
test++;
Console.WriteLine(temp);
}
4) int[] myInt1={1,2,3};
foreach(int test in myInt1)
{
Console>WriteLine(test);
}
【解答】
1) 错误。if中的条件表达式结果不是布尔型。
2) 正确。
3) 错误一:temp没有定义。
错误二:在foreach块内,test作为枚举成员是只读的,不能使用test++修改其值。
4) 错误。Console后应该是点,而不应该是大于号。
6. 编写一个控制台应用程序,要求用户输入5个大写字母,如果用户输入的信息不满足要求,提示帮助信息并要求重新输入。
using System;
using System.Collections.Generic;
using System.Text;
namespace inputCapitalLetter
{
class Program
{
static void Main()
{
bool ok = false;
while (ok == false)
{
Console.Write("请输入5个大写字母:");
string str = Console.ReadLine();
if (str.Length != 5)
{
Console.WriteLine("你输入的字符个数不是5个,请重新输入。");
}
else
{
ok = true;
for (int i = 0; i < 5; i++)
{
char c = str[i];
if (c < 'A' || c > 'Z')
{
Console.WriteLine("第{0}个字符“{1}”不是大写字母,请重新输入。", i + 1, c);
ok = false;
break;
}
}
}
}
}
}
}