首页 > 代码库 > C# Winform flag寄存器的状态由字母表示转换为01表示的小程序(有大提升)

C# Winform flag寄存器的状态由字母表示转换为01表示的小程序(有大提升)

镇场诗:
———大梦谁觉,水月中建博客。百千磨难,才知世事无常。
———今持佛语,技术无量愿学。愿尽所学,铸一良心博客。
——————————————————————————————————————————

 

起因,上汇编语言的课,老师让我们判断各个指令运行后flag标志寄存器各个位的状态。这我就不乐意了,第一点,我成了人型编译器,我的创造力呢?

第二点,dos在那里把指令输入,一个-t不都解决了吗?为啥要浪费时间在这里呢?

第三点,我又发现了,老师留的作业,让我们写的是各个位是0是1,而dos出来的字符表示的状态,我又尴尬了,我不想背,用的时候一查表,不就解决了吗,

我不是永动机,就那么点时间与精力,都浪费在背没用的东西上,这可不行。

自己做一个程序出来。把字母的转为01.

 

1 UI

技术分享

 

 

 

2 code

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10 
 11 namespace WindowsFormsApplication6
 12 {
 13     
 14     public partial class Form1 : Form
 15     {
 16 
 17         public Form1()
 18         {
 19             InitializeComponent();
 20         }
 21         /// <summary>
 22         /// 用来画出图片,然后在picturebox中显示图片的
 23         /// </summary>
 24         /// <param name="pBox">哪个picturebox显示画出来的图片呀</param>
 25         /// <param name="content">将哪个字符串画进图片呢</param>
 26         private void pbShow(PictureBox pBox,string content)
 27         {
 28             //创建图片对象,一会要给picturebox的
 29             //这个图片,宽32,高31,刚好是picturebox的宽与高
 30             Bitmap bm = new Bitmap(32, 31);
 31             //从指定的Image对象创建新的Grapics画板  
 32             Graphics g = Graphics.FromImage(bm);
 33             //字体是宋体
 34             string font = "宋体";
 35             //字体的颜色是白色
 36             Color fontColor = Color.White;
 37             //创建一个点,这个点就是用来指定被画对象的初始位置
 38             Point p = new Point(10, 5);
 39             //画字符串 画的内容是content   宋体,12号,粗体               字体的颜色:白色     字体的位置
 40             g.DrawString(content, new Font(font, 12, FontStyle.Bold), new SolidBrush(fontColor), p);
 41             
 42             //把画出来的图片交给picturebox吧
 43             pBox.Image = bm;
 44         }
 45 
 46         //定义一个枚举后,配合bool数组,程序的可读性就会大大提高
 47         enum flag:Int16
 48         {
 49             OF,
 50             DF,
 51             IF,
 52             SF,
 53             ZF,
 54             AF,
 55             PF,
 56             CF
 57         }
 58 
 59         //flag寄存器的每一位的状态,true对应1,false对应0
 60         bool[] eachFlag = new bool[] { true, true, true, true, true, true, true, true };
 61 
 62         private void Form1_Load(object sender, EventArgs e)
 63         {
 64             
 65         }
 66 
 67         #region 16个按钮被点击后的代码
 68         /// <summary>
 69         /// 按钮被单击,pbOF这个picturebox显示OV字样,然后OF标志位对应在bool数组的内容变为ture
 70         /// </summary>
 71         /// <param name="sender"></param>
 72         /// <param name="e"></param>
 73         private void btnOV_Click(object sender, EventArgs e)
 74         {
 75             pbShow(pbOF,"OV");
 76             eachFlag[(int)flag.OF] = true;
 77         }
 78 
 79         private void btnNV_Click(object sender, EventArgs e)
 80         {
 81             pbShow(pbOF, "NV");
 82             eachFlag[(int)flag.OF] = false;
 83         }
 84 
 85         private void btnDN_Click(object sender, EventArgs e)
 86         {
 87             pbShow(pbDF,"DN");
 88             eachFlag[(int)flag.DF] = true;
 89         }
 90 
 91         private void btnUP_Click(object sender, EventArgs e)
 92         {
 93             pbShow(pbDF, "UP");
 94             eachFlag[(int)flag.DF] = false;
 95         }
 96 
 97         private void btnEI_Click(object sender, EventArgs e)
 98         {
 99             pbShow(pbIF, "EI");
100             eachFlag[(int)flag.IF] = true;
101         }
102 
103         private void btnDI_Click(object sender, EventArgs e)
104         {
105             pbShow(pbIF, "DI");
106             eachFlag[(int)flag.IF] = false;
107         }
108 
109         private void btnNG_Click(object sender, EventArgs e)
110         {
111             pbShow(pbSF, "NG");
112             eachFlag[(int)flag.SF] = true;
113         }
114 
115         private void btnPL_Click(object sender, EventArgs e)
116         {
117             pbShow(pbSF, "PL");
118             eachFlag[(int)flag.SF] = false;
119         }
120 
121         private void btnZR_Click(object sender, EventArgs e)
122         {
123             pbShow(pbZF, "ZR");
124             eachFlag[(int)flag.ZF] = true;
125         }
126 
127         private void btnNZ_Click(object sender, EventArgs e)
128         {
129             pbShow(pbZF, "NZ");
130             eachFlag[(int)flag.ZF] = false;
131         }
132 
133         private void btnAC_Click(object sender, EventArgs e)
134         {
135             pbShow(pbAF, "AC");
136             eachFlag[(int)flag.AF] = true;
137         }
138 
139         private void btnNA_Click(object sender, EventArgs e)
140         {
141             pbShow(pbAF, "NA");
142             eachFlag[(int)flag.AF] = false;
143         }
144 
145         private void btnPE_Click(object sender, EventArgs e)
146         {
147             pbShow(pbPF, "PE");
148             eachFlag[(int)flag.PF] = true;
149         }
150 
151         private void btnPO_Click(object sender, EventArgs e)
152         {
153             pbShow(pbPF, "PO");
154             eachFlag[(int)flag.PF] = false;
155         }
156 
157         private void btnCY_Click(object sender, EventArgs e)
158         {
159             pbShow(pbCF, "CY");
160             eachFlag[(int)flag.CF] = true;
161         }
162 
163         private void btnNC_Click(object sender, EventArgs e)
164         {
165             pbShow(pbCF, "NC");
166             eachFlag[(int)flag.CF] = false;
167         }
168         #endregion
169 
170         /// <summary>
171         /// 显式最终结果,字母对应01的转换
172         /// </summary>
173         /// <param name="sender"></param>
174         /// <param name="e"></param>
175         private void button1_Click(object sender, EventArgs e)
176         {
177             //用一个数组的话,就很好遍历了。
178             PictureBox[] pb = new PictureBox[] { pbOF, pbDF, pbIF, pbSF, pbZF, pbAF, pbPF, pbCF };
179             //因为要对字符串反复的增添,修改,覆盖。所以我选择了stringbuilder
180             StringBuilder sb = new StringBuilder();
181             foreach (var item in eachFlag)
182             {
183                 if(item)
184                 {
185                     sb.Append("1");
186                 }
187                 else
188                 {
189                     sb.Append("0");
190                 }
191             }
192             textBox1.Text = sb.ToString();
193         }
194 
195     }
196 }

 

 

 

 

3 show1

技术分享

 程序说明:

我点一下显示着OV的按钮,下面的picturebox就出现OV字样,为啥要这样做呢?万一我按钮点错了,我作业不就写错了吗。

来个与dos相近的,我一比较,哪里有问题不就出来了吗。

8个按钮都点完后,再点一下,看01按钮。textbox.text中的内容就出来。

 

show2

技术分享

 

感悟:

1 备份!

程序最好的版本是这样的,我增加8个groupbox与16个label标签与8个右键菜单,这样做的意义就是,程序让我看哪几个标志位,我就把剩下的隐藏就OK了。

然而。。。小白没经验,给搞的乱七八糟。最后,bug一堆。。。放弃了。。。

技术分享

所以,以后项目每完成一定功能,调试好后,将解决方法进行备份。在往下增加功能。

备份!!!!!!!!!!!!!!!!!!!!!!!!!

 

2 独具匠心。找个安静的环境,开开心心的写程序。

 

3 我这个小白,算是见识到了,就这么点功能的程序,我写了几个小时。代码消耗时间,界面的设计更消耗时间。

 

4 见多识广 多参加项目,多见识控件与类。

 

5 控件的名字,要起得有意义。就算只用一次的控件的名字也要有意义。

 

6 多写博客!多些优质博客。这个程序的画图函数,就是我参考一篇博客写出来的,知识点有印象,用的时候 一查,就出来了。照着写。VS的提示也足够强大。

参考链接:   http://blog.csdn.net/zhangquanok/article/details/9675259

 

——————————————————————————————————————————
博文的精髓,在技术部分,更在镇场一诗。
C#是优秀的语言,值得努力学习。
如果博文的内容有可以改进的地方,甚至有错误的地方,请留下评论,我一定努力改正,争取铸成一个良心博客。
注:此文仅作为科研学习,如果我无意中侵犯了您的权益,请务必及时告知,我会做出改正。

C# Winform flag寄存器的状态由字母表示转换为01表示的小程序(有大提升)