• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#编程笔记(一)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

      前段时间,帮朋友用C#做了一个小玩意儿,在开发过程中,发现很多用的着的东西,在网上都没有很好的解决方案,前前后后折腾了近一个月,总算是基本上完成了,在此整理下,权作以后再用到时复习之用。

      这个东西有点像星座性格测试那种的,只不过是要C/S的,安装到客户端上,所以做起来限制比较多。首先要有数据录入的功能,提供界面,用户要能向其中录入数据,比如星座测试一条一条的题目;然后要对每个题目,提出相应的反馈、建议;最后,录入完成了,用户还要能够有个界面对指定的数据库进行增删改查:前面是录入的功能。在用户性格测试的时候,要有窗口完成答题,并在提交后,查看测试的结果,有打分,有整体评价,并且对于那些答得不合适的,还有一些建议。

      接下来,我会按不同的模块,说一说我是怎么做的。

      (1)数据的存储

      由于没有数据库管理系统的支持,我选择XML来保存数据。所以,这一模块就是基本的XML的创建、添加、删除。

      (1.1)XML文件的新建

      我做的这个玩意儿,用的XML的数据格式比较固定,所以,新建XML文件的时候,大的结构就写死了,不希望,也不会发生改变:

 

EmptyXmlDocumentCreate
 1                 this._fileName = fileName;
 2                 this._xDoc = new XmlDocument();
 3                 this._xDoc.LoadXml(
 4                     "<?xml version=\"1.0\" encoding=\"gb2312\" ?>" +
 5                         "<root>"+
 6                             "<Principles>" +
 7                             "</Principles>"+
 8                             "<Results>"+
 9                             "</Results>"+
10                         "</root>"
11                     );
12                 try
13                 {
14                     this._xDoc.Save(fileName);
15                 }
16                 catch (Exception ex)
17                 {
18                     MessageBox.Show(ex.Message);
19                 }

      (1.2)向XML文件中的指定位置添加节点

      这里要说的是,我要添加的节点的数据结构是<ID,Content,Suggestion>。再者,添加节点的时候,用在树上直接找的办法,比较笨,用xPath会好很多,可惜时间紧没学明白……

 

addToXMLDocument
 1         public void addToXMLDocument(string id, string content, string suggestion)
 2         {
 3             XmlNode Term = this._xDoc.CreateNode(XmlNodeType.Element, "Term""");
 4 
 5             XmlElement ID = this._xDoc.CreateElement("ID");
 6             ID.InnerText = id;
 7             Term.AppendChild(ID);
 8 
 9             XmlElement Content = this._xDoc.CreateElement("Content");
10             Content.InnerText = content;
11             Term.AppendChild(Content);
12 
13             XmlElement Suggestion = this._xDoc.CreateElement("Suggestion");
14             Suggestion.InnerText = suggestion;
15             Term.AppendChild(Suggestion);
16 
17             this._xDoc.ChildNodes.Item(1).ChildNodes.Item(0).AppendChild(Term);
18 
19             try
20             {
21                 this._xDoc.Save(this._fileName);
22             }
23             catch (Exception ex)
24             {
25                 MessageBox.Show(ex.Message);
26             }
27         }

      (1.3)从XML文件中删除指定的节点

      在应用中,我是在ListView中把XML的数据打出来,通过勾选CheckBox选定删除的对象。

 

DeleteNodeFromXmlDocument
 1         private void button4_Click(object sender, EventArgs e)
 2         {
 3             XmlDocument xDoc = new XmlDocument();
 4             xDoc.Load(this._fileName);
 5             foreach (ListViewItem lItem in Listview1.Items)
 6             {
 7                 if (lItem.Checked == true)
 8                 {
 9                     //int index = Convert.ToInt32(lItem.SubItems[1].Text, 10);
10                     foreach (XmlNode xNode in xDoc.ChildNodes.Item(1).ChildNodes.Item(0).ChildNodes)
11                     {
12                         if (String.Compare(xNode.ChildNodes[0].InnerText, lItem.SubItems[1].Text) == 0)
13                         {
14                             xDoc.ChildNodes.Item(1).ChildNodes.Item(0).RemoveChild(xNode);
15                         }
16                     }
17                     Listview1.Items.Remove(lItem);
18                 }
19             }
20             xDoc.Save(this._fileName);
21             Re_Load();
22         }

      (2)动态界面生成

       这个算是我在第一阶段遇到的最大的一个问题。作为一个C#的菜鸟,习惯了拖拖拽拽弄出一个窗口界面,当被要求根据用户输入,动态生成界面的时候,直接歇菜了……

       在网上找了很多,可惜很多都不适用,忘记后来是在哪里找到的答案,向那位记不起名儿的童鞋致敬了。

       是这样的,所谓的动态生成,就是把原来在Form.Designer.cs中代码,搬到你自己的代码中去。比如,你原来在Form.Designer.cs中有这样的代码

 

Example: Form.Designer.cs
1             // 
2             // button1
3             // 
4             this.button1.Location = new System.Drawing.Point(5797);
5             this.button1.Name = "button1";
6             this.button1.Size = new System.Drawing.Size(7523);
7             this.button1.TabIndex = 0;
8             this.button1.Text = "button1";
9             this.button1.UseVisualStyleBackColor = true;

 

       你可以写到你自定义的Button2的Click事件中,这样,在你点击Button2后,就会在窗口上新加一个Button1出来

 

Example: ButtonClick
 1         private void button2_Click(object sender, EventArgs e)
 2         {
 3             // 
 4             // button1
 5             // 
 6             this.button1.Location = new System.Drawing.Point(5797);
 7             this.button1.Name = "button1";
 8             this.button1.Size = new System.Drawing.Size(7523);
 9             this.button1.TabIndex = 0;
10             this.button1.Text = "button1";
11             this.button1.UseVisualStyleBackColor = true;
12             this.Controls.Add(this.button1);
13             this.ResumeLayout(false);
14         }

       (2.1)说一说我自己做的那个东西,我设计如下:在Form中先放好一个大Panel,然后,根据用户输入,动态加入指定个数的组件Component。在每个Component里面,包含一个GroupBox,三个Label,三个TextBox,还有一些坐标的参数。

        要说一下,窃以为,动态加入组件,最麻烦的就是算坐标。那么多的东西,你需要事先把每个组件的坐标位置和大小都算好了,然后,你才可以保证你按下“添加”之后,你的组件能按照你想要的方式,呈现在窗口上。所以我对应每一条要添加的数据项,构造了上面的一个Component,然后给每个Component设置索引值,只要得到索引值,那么,这个Component的位置也就确定了。

        比较欣慰的是,这个组件的坐标是按相对位置计算的:你设置GroupBox的坐标时,你只要算好你在Panel中的位置就可以了,你不用管Panel在Form的哪里。同样,你的Label,TextBox只要算好在一个200*50的GroupBox中的位置就可以了,剩下的你就不用管了。或许是以前没有注意过这个问题,反正我觉得这一性质在我做的过程中,省了不少的事儿。

        这就完了么?No,还有一个我开始都没注意到的问题:最大化。对,你算的坐标是死的,当用户点击“最大化”按钮后,你的界面就会面目全非,所以,这里又要加入一个新的东西:TableLayoutPanel。Yes,需要把前面的那些写死的坐标,都放到这个TableLayoutPanel里面来,设置好每个组件的位置,这样,在“最大化”之后,依然能够保持良好的布局。

 

 

Component
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace app01_Generate
{
    
class Component
    {
        
#region 成员变量定义

        
public static int OFFSET = 3;
        
public static int HEIGHT = 98;
        
private int _weight;
        
private int _index;
        
private GroupBox _gb;
        
private Label _lb1, _lb2, _lb3;
        
private TextBox _tb1, _tb2, _tb3;
        
private TableLayoutPanel _tlp;

        
#endregion

        
public Component(int index,int weight)
        {
            
this._index = index;
            
this._weight = weight;

            
this._gb = new GroupBox();
            
this._gb.Location = new Point(3, OFFSET + this._index * HEIGHT);
            
this._gb.Size = new System.Drawing.Size(this._weight, 92);
            
this._gb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        
| System.Windows.Forms.AnchorStyles.Right)));
            
            
this._tlp = new TableLayoutPanel();
            
this._tlp.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        
| System.Windows.Forms.AnchorStyles.Left)
                        
| System.Windows.Forms.AnchorStyles.Right)));
            
this._tlp.ColumnCount = 25;
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F));
            
this._tlp.Location = new System.Drawing.Point(620);
            
this._tlp.Name = "_tlp";
            
this._tlp.RowCount = 1;
            
this._tlp.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            
this._tlp.Size = new System.Drawing.Size(this._weight - 1266);

            
this._lb1 = new Label();
            
this._lb1.Anchor = ((System.Windows.Forms.AnchorStyles)(( System.Windows.Forms.AnchorStyles.Right)));
            
this._lb1.AutoSize = true;
            
this._tlp.SetColumnSpan(this._lb1, 2);
            
this._lb1.Font = new System.Drawing.Font("微软雅黑"10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            
this._lb1.Location = new System.Drawing.Point((int)((this._weight - 12* 8 / 741), 0);
            
this._lb1.Name = "_lb1";
            
this._lb1.Size = new System.Drawing.Size(4719);
            
this._lb1.Text = "ID";


            
this._lb2 = new Label();
            
this._lb2.Anchor = ((System.Windows.Forms.AnchorStyles)(( System.Windows.Forms.AnchorStyles.Right)));
            
this._lb2.AutoSize = true;
            
this._tlp.SetColumnSpan(this._lb2, 2);
            
this._lb2.Font = new System.Drawing.Font("微软雅黑"10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            
this._lb2.Location = new System.Drawing.Point((int)((this._weight - 12* 124 / 741), 0);
            
this._lb2.Name = "_lb2";
            
this._lb2.Size = new System.Drawing.Size(4738);
            
this._lb2.Text = "Content";

            
this._lb3 = new Label();
            
this._lb3.Anchor = ((System.Windows.Forms.AnchorStyles)(( System.Windows.Forms.AnchorStyles.Right)));
            
this._lb3.AutoSize = true;
            
this._tlp.SetColumnSpan(this._lb3, 2);
            
this._lb3.Font = new System.Drawing.Font("微软雅黑"10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            
this._lb3.Location = new System.Drawing.Point((int)((this._weight - 12* 501 / 741), 0);
            
this._lb3.Name = "_lb3";
            
this._lb3.Size = new System.Drawing.Size(4738);
            
this._lb3.Text 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
?c++重定义默认参数的问题发布时间:2022-07-14
下一篇:
C#WebAPI中中log4net的配置步骤发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap