首先看下使用XML文件保存的电影信息,
<?xml version="1.0" encoding="utf-8" ?> <ShowList> <Movie> <Name>不二神探</Name> <Poster>不二神探.jpg</Poster> <Director>王子鸣</Director> <Actor>李连杰、文章、陈妍希</Actor> <Type>Action</Type> <Price>60</Price> <Schedule> <Item>9:00</Item> </Schedule> </Movie> <Movie> <Name>西游降魔篇</Name> <Poster>西游降魔篇.jpg</Poster> <Director>郭子健、周星驰</Director> <Actor>黄渤、舒淇、文章</Actor> <Type>Comedy</Type> <Price>60</Price> <Schedule> <Item>11:20</Item> <Item>15:45</Item> <Item>19:25</Item> </Schedule> </Movie> <Movie> <Name>中国合伙人</Name> <Poster>中国合伙人.jpg</Poster> <Director>陈可辛</Director> <Actor>黄晓明、邓超、佟大为</Actor> <Type>Comedy</Type> <Price>70</Price> <Schedule> <Item>21:00</Item> <Item>23:10</Item> </Schedule> </Movie> <Movie> <Name>钢铁侠3</Name> <Poster>钢铁侠3.jpg</Poster> <Director>沙恩布莱克</Director> <Actor>小罗伯特唐尼</Actor> <Type>Action</Type> <Price>70</Price> <Schedule> <Item>17:30</Item> </Schedule> </Movie> <Movie> <Name>不二神探</Name> <Poster>不二神探.jpg</Poster> <Director>王子鸣</Director> <Actor>李连杰、文章、陈妍希</Actor> <Type>Action</Type> <Price>60</Price> <Schedule> <Item>13:00</Item> </Schedule> </Movie> </ShowList>
解析后的使用TreeView控件展示的效果如下图,其中树的根节点表示电影名称,其子节点表示电影的播放场次。

从XML文件中的解析数据到动态加载到TreeView控件的关键代码如下:
/// <summary>
/// 初始化TreeView控件
/// </summary>
private void InitTreeView()
{
tvMovies.BeginUpdate();
tvMovies.Nodes.Clear();
bool bExistMovie = false;//是否存在电影名称树节点
TreeNode movieNode = null;
foreach (ScheduleItem item in cinema.Schedule.Items.Values)
{
bExistMovie = false;
foreach (TreeNode tn in tvMovies.Nodes)
{
if (tn.Text.Equals(item.Movie.MovieName))
{
bExistMovie = true;//存在电影名称树节点
movieNode = tn;
break;
}
}
if (!bExistMovie)
{
//不存在电影树节点时生成一个树根节点
movieNode = new TreeNode(item.Movie.MovieName);
tvMovies.Nodes.Add(movieNode);
}
TreeNode timeNode = new TreeNode(item.Time);
movieNode.Nodes.Add(timeNode);//把播放场次时间添加到电影子节点中
}
tvMovies.EndUpdate();
}动态生成5排7列的座位(使用Label控件描述)信息的关键代码如下:
/// <summary>
/// 初始化放映厅座位
/// </summary>
/// <param name="seatRow">行数</param>
/// <param name="seatColumn">列数</param>
/// <param name="tb"></param>
private void InitSeats(int seatRow,int seatColumn,TabPage tb)
{
Label label;
Seat seat;
for (int i = 0; i < seatRow; i++)
{
for (int j = 0; j < seatColumn; j++)
{
label = new Label();
//设置背景颜色
label.BackColor = Color.Yellow;
//设置字体
label.Font = new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,((byte)(134)));
//设置尺寸
label.AutoSize = false;
label.Size = new System.Drawing.Size(50, 25);
//设置座位号
label.Text = (i + 1).ToString() + "-" + (j + 1).ToString();
label.TextAlign = ContentAlignment.MiddleCenter;
//设置位置
label.Location = new Point(60 + (j * 90), 60 + (i * 60));
//所有的标签都绑定到同一事件
label.Click += new System.EventHandler(lblSeat_Click);
tb.Controls.Add(label);
labels.Add(label.Text, label);
//实例化一个座位
seat = new Seat((i + 1).ToString() + "-" + (j + 1).ToString(), Color.Yellow);
//保存的座位集合
cinema.Seats.Add(seat.SeatNum, seat);
}
}
}下面给出本文中用到的项目源代码如下: