这是“使用 C# 开发智能手机软件:推箱子” 系列文章的第二十篇。在这篇文章中,介绍 Window/DesignDlg.cs 源程序文件。这个源程序文件包含 DesignDlg 类,该类继承自 System.Windows.Forms.Form 类,表示推箱子的“设计”对话框。如下图所示:

我们先看看 DesignDlg.Designer.cs 的部分源程序代码吧:

 1 namespace Skyiv.Ben.PushBox.Window
 2 {
 3   partial class DesignDlg
 4   {
 5     private void InitializeComponent()
 6     {
 7         // 注意:省略了一些代码
 8         
 9       this.rbnCreate.CheckedChanged += new System.EventHandler(this.Action_CheckedChanged);
10       this.rbnEdit.CheckedChanged += new System.EventHandler(this.Action_CheckedChanged);
11       this.rbnDelete.CheckedChanged += new System.EventHandler(this.Action_CheckedChanged);
12       this.tbxDeleteLevel.TextChanged += new System.EventHandler(this.tbxDeleteLevel_TextChanged);
13     }
14 
15     private System.Windows.Forms.NumericUpDown nudWidth;
16     private System.Windows.Forms.NumericUpDown nudHeight;
17     private System.Windows.Forms.RadioButton rbnCreate;
18     private System.Windows.Forms.RadioButton rbnEdit;
19     private System.Windows.Forms.RadioButton rbnDelete;
20     private System.Windows.Forms.Button btnOk;
21     private System.Windows.Forms.Button btnCancel;
22     private System.Windows.Forms.CheckBox chkCopy;
23     private System.Windows.Forms.TextBox tbxDeleteLevel;
24     private System.Windows.Forms.TextBox tbxLevel;
25   }
26 }

下面来看看 DesignDlg.cs 的源程序代码吧:

 1 using System;
 2 using System.Drawing;
 3 using System.Windows.Forms;
 4 using Skyiv.Ben.PushBox.Common;
 5 
 6 namespace Skyiv.Ben.PushBox.Window
 7 {
 8   /// <summary>
 9   /// “设计”对话框
10   /// </summary>
11   public partial class DesignDlg : Form
12   {
13     Action active;
14     int level;
15     int maxLevel;
16     Size levelSize;
17 
18     public Action Active { get { return active; } }
19     public bool IsCopy { get { return chkCopy.Checked; } }
20     public int Level { set { level = value; } }
21     public int MaxLelvel { set { maxLevel = value; } }
22 
23     public DesignDlg(bool isTopMost)
24     {
25       InitializeComponent();
26       TopMost = isTopMost;
27     }
28 
29     protected override void OnLoad(EventArgs e)
30     {
31       base.OnLoad(e);
32       tbxLevel.Text = (level + 1).ToString() + "/" + maxLevel.ToString();
33       rbnDelete.Enabled = (level == maxLevel - 1 && maxLevel > 1);
34       Action_CheckedChanged(rbnCreate, null);
35     }
36 
37     public Size LevelSize
38     {
39       get
40       {
41         return (active == Action.Create) ? new Size((int)nudWidth.Value, (int)nudHeight.Value) : levelSize;
42       }
43       set
44       {
45         levelSize = value;
46         if (value.Width > nudWidth.Maximum) nudWidth.Maximum = value.Width;
47         if (value.Height > nudHeight.Maximum) nudHeight.Maximum = value.Height;
48         nudWidth.Value = value.Width;
49         nudHeight.Value = value.Height;
50       }
51     }
52 
53     public int MaxLevelSize
54     {
55       set
56       {
57         nudWidth.Maximum = (nudWidth.Value > value) ? nudWidth.Value : value;
58         nudHeight.Maximum = (nudHeight.Value > value) ? nudHeight.Value : value;
59       }
60     }
61 
62     private void Action_CheckedChanged(object sender, EventArgs e)
63     {
64       RadioButton s = (RadioButton)sender;
65       if (s == rbnCreate && s.Checked)
66       {
67         active = Action.Create;
68         chkCopy.Enabled = nudWidth.Enabled = nudHeight.Enabled = true;
69         tbxDeleteLevel.ReadOnly = true;
70         btnOk.Enabled = true;
71       }
72       if (s == rbnEdit && s.Checked)
73       {
74         active = Action.Edit;
75         chkCopy.Enabled = nudWidth.Enabled = nudHeight.Enabled = false;
76         tbxDeleteLevel.ReadOnly = true;
77         btnOk.Enabled = true;
78       }
79       else if (s == rbnDelete && s.Checked)
80       {
81         active = Action.Delete;
82         chkCopy.Enabled = nudWidth.Enabled = nudHeight.Enabled = false;
83         tbxDeleteLevel.ReadOnly = false;
84         tbxDeleteLevel.Text = string.Empty;
85         btnOk.Enabled = (level + 1).ToString() == tbxDeleteLevel.Text;
86       }
87     }
88 
89     private void tbxDeleteLevel_TextChanged(object sender, EventArgs e)
90     {
91       btnOk.Enabled = (level + 1).ToString() == tbxDeleteLevel.Text;
92     }
93   }
94 }

几点说明:

  • “设计”对话框用来选择“新建”、“编辑”、“删除”推箱子游戏的关卡。
  • 如果当前关不是最后一关,“删除”单选按钮将不可选(变灰),这是由该类的 OnLoad 方法中的以下语句实现的:
    rbnDelete.Enabled = (level == maxLevel - 1 && maxLevel > 1);
  • 如果选择“删除”的话,必须输入要删除的关数用以确认,否则“确定”按钮将无法点击(变灰),这是由该类的 tbxDeleteLevel_TextChanged 方法实现的,该方法只有一条语句:
    btnOk.Enabled = (level + 1).ToString() == tbxDeleteLevel.Text;
  • 如果不是选择“新建”的话,将无法输入“宽度”和“高度”,这是由该类的 Action_CheckedChanged 实现的。
  • 这个类只是一个用户界面,负责按受用户所选择的“设计”动作和相应的参数,实际进行设计工作的代码将在下篇文章中介绍。

上一篇:使用 C# 开发智能手机软件:推箱子(十九)
下一篇:使用 C# 开发智能手机软件:推箱子(二十一)
返回目录

使用 C# 开发智能手机软件:推箱子(二十)相关推荐

  1. 使用 C# 开发智能手机软件:推箱子(二十三)

    这是"使用 C# 开发智能手机软件:推箱子" 系列文章的第二十三篇.在这篇文章中,介绍 Window/MainForm.Common.cs 源程序文件.这个源程序文件是 MainF ...

  2. 使用 C# 开发智能手机软件:推箱子(十二)

    这是"使用 C# 开发智能手机软件:推箱子"系列文章的第十二篇.在这篇文章中,介绍 Window/AboutDlg.cs 源程序文件. 这个源程序文件包括 AboutDlg 类,该 ...

  3. 使用 C# 开发智能手机软件:推箱子(四)

    这是" 使用 C# 开发智能手机软件:推箱子 "系列文章的第四篇.在这篇文章中,介绍 Common/FindPath.cs 源程序文件. using System; using S ...

  4. 使用 C# 开发智能手机软件:推箱子(十一)

    这是" 使用 C# 开发智能手机软件:推箱子 "系列文章的第十一篇.在这篇文章中,介绍 Common/Env.cs 源程序文件.这个源程序文件中包含表示"工作环境&quo ...

  5. 【软件开发底层知识修炼】二十六 ABI-应用程序二进制接口 学习总结文章目录

    前面学习了ABI的知识,感觉受益良多.对底层与编译器有更加深刻的认识,为此这里将前面写过的关于ABI 的文章给列出来,方便学习与翻阅. [软件开发底层知识修炼]二十一 ABI-应用程序二进制接口一 [ ...

  6. 【软件开发底层知识修炼】二十五 ABI之函数调用约定二之函数返回值为结构体时的约定

    上一篇文章学习了几种函数调用约定的区别,点击链接查看上一篇文章:[软件开发底层知识修炼]二十四 ABI之函数调用约定 本篇文章继续学习函数调用约定中,关于函数返回值的问题.当函数返回值为结构体时,函数 ...

  7. JavaWeb开发与代码的编写(二十四)

    JavaWeb开发与代码的编写(二十四) JNDI数据源的配置 数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数 ...

  8. 一文教你使用java开发一款推箱子游戏

    导读:社会在进步,人们生活质量也在日益提高.高强度的压力也接踵而来.社会中急需出现新的有效方式来缓解人们的压力.此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣.具有操作 ...

  9. 一步一步教你开发《松鼠推箱子》手机游戏

    这类游戏大家肯定都玩过,一个很有趣味性的小游戏.操作简单,具有一定的逻辑性.很适合无聊的时候消遣时间.:) 首先简单介绍下手机游戏的一般性开发过程.首先需要策划出一个游戏方案,也就是要给出一个游戏的整 ...

最新文章

  1. 【深度学习】caffe 中的一些参数介绍
  2. Android SlidingMenu插件的使用
  3. jvm面试2 jvm如何加载java代码? JVM知识重点:内存模型和GC
  4. Linux软件 github,Linux下使用GitHub记
  5. mfc formview中的关闭视图函数_VC|API消息处理(回调函数+分支语句)与MFC中的消息映射函数...
  6. Apicloud_(问题)P54提示错误:Uncaught SyntaxError: Unexpected token ) at main.html : 117
  7. 如何把数据库从sql变成mysql_(转)如何将数据库从SQL Server迁移到MySQL
  8. Oracle odi 数据表导出到文件
  9. BERT-从业者的观点
  10. sap的工作日历_ABAP-有关日期的SAP函数使用(日历)
  11. 操作系统-课堂笔记-磁盘调度(南航)
  12. Python-argparse库基本使用方法和add_argument() 参数详解
  13. 机器认知、人机交互、边缘计算……在这里,他们谈论了关于AI的关键议题...
  14. 数据库sql课后总结
  15. 任天堂switch修改服务器,任天堂switch将退在线服务器 玩家似乎并不买账
  16. Leetcode算法题-解法转载
  17. python 银行_python 银行系统
  18. Ceva Dsp公司及产品介绍
  19. 不讲“日本汉语”就不能说话?
  20. 10GE---超长距离的万兆以太网

热门文章

  1. java创建医生的对象_基于安卓Android的作物医生App设计开发(MySQL)(含录像)
  2. linux mysql 知乎_在 Linux 上安装 MariaDB 或 MySQL | Linux 中国
  3. linux shell find depth,搞定 Linux Shell 文本处理工具,看完这篇集锦就够了
  4. linux环境c语言实现who,C语言编程实现Linux命令——who
  5. Zabbix添加客户端步骤
  6. 用c语言编写5颗骰子任意投掷总数为15 的概率,概率统计习题1period;2答案
  7. php 批量修改文件,php如何批量修改文件名
  8. win服务器数据丢失怎么办
  9. IIS6下PHP的ISAPI和FastCGI性能比较 期待ii7
  10. qt+vs2017环境下XIMEA相机库的配置