一起谈.NET技术,C#编程笔记(一)

简介: 前段时间,帮朋友用C#做了一个小玩意儿,在开发过程中,发现很多用的着的东西,在网上都没有很好的解决方案,前前后后折腾了近一个月,总算是基本上完成了,在此整理下,权作以后再用到时复习之用。      这个东西有点像星座性格测试那种的,只不过是要C/S的,安装到客户端上,所以做起来限制比较多。

      前段时间,帮朋友用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( 57 97 );
5               this .button1.Name  =   " button1 " ;
6               this .button1.Size  =   new  System.Drawing.Size( 75 23 );
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( 57 97 );
 7               this .button1.Name  =   " button1 " ;
 8               this .button1.Size  =   new  System.Drawing.Size( 75 23 );
 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( 6 20 );
            
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  -   12 66 );

            
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( 47 19 );
            
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( 47 38 );
            
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( 47 38 );
            
this ._lb3.Text  =   " Suggestion " ;

            
this ._tb1  =   new  TextBox();
            
this ._tb1.Anchor  =  ((System.Windows.Forms.AnchorStyles)((( System.Windows.Forms.AnchorStyles.Left)
            
|  System.Windows.Forms.AnchorStyles.Right)));
            
this ._tlp.SetColumnSpan( this ._tb1,  2 );
            
this ._tb1.Font  =   new  System.Drawing.Font( " 仿宋 " 10.5F , System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (( byte )( 134 )));
            
this ._tb1.Location  =   new  System.Drawing.Point(( int )(( this ._weight  -   12 *   61   /   741 ),  3 );
            
this ._tb1.Name  =   " _tb1 " ;
            
this ._tb1.Size  =   new  System.Drawing.Size( 52 29 );

            
this ._tb2  =   new  TextBox();
            
this ._tb2.Anchor  =  ((System.Windows.Forms.AnchorStyles)((( System.Windows.Forms.AnchorStyles.Left)
                        
|  System.Windows.Forms.AnchorStyles.Right)));
            
this ._tlp.SetColumnSpan( this ._tb2,  11 );
            
this ._tb2.Font  =   new  System.Drawing.Font( " 仿宋 " 10.5F , System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (( byte )( 134 )));
            
this ._tb2.Location  =   new  System.Drawing.Point(( int )(( this ._weight  -   12 *   177   /   741 ),  3 );
            
this ._tb2.Multiline  =   true ;
            
this ._tb2.Name  =   " _tb2 " ;
            
this ._tb2.ScrollBars  =  System.Windows.Forms.ScrollBars.Vertical;
            
this ._tb2.Size  =   new  System.Drawing.Size( 313 48 );

            
this ._tb3  =   new  TextBox();
            
this ._tb3.Anchor  =  ((System.Windows.Forms.AnchorStyles)((( System.Windows.Forms.AnchorStyles.Left)
                        
|  System.Windows.Forms.AnchorStyles.Right)));
            
this ._tlp.SetColumnSpan( this ._tb3,  6 );
            
this ._tb3.Font  =   new  System.Drawing.Font( " 仿宋 " 10.5F , System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (( byte )( 134 )));
            
this ._tb3.Location  =   new  System.Drawing.Point(( int )(( this ._weight  -   12 *   554   /   741 ),  3 );
            
this ._tb3.Multiline  =   true ;
            
this ._tb3.Name  =   " _tb3 " ;
            
this ._tb3.ScrollBars  =  System.Windows.Forms.ScrollBars.Vertical;
            
this ._tb3.Size  =   new  System.Drawing.Size( 184 48 );

            
this ._tlp.Controls.Add( this ._lb1,  0 0 );
            
this ._tlp.Controls.Add( this ._tb1,  2 0 );
            
this ._tlp.Controls.Add( this ._lb2,  4 0 );
            
this ._tlp.Controls.Add( this ._lb3,  17 0 );
            
this ._tlp.Controls.Add( this ._tb3,  19 0 );
            
this ._tlp.Controls.Add( this ._tb2,  6 0 );
            
this ._gb.Controls.Add( this ._tlp);

        }

        
public   void  addToPanel( ref  Panel pnl)
        {
            pnl.Controls.Add(
this ._gb);
        }

        
public   void  Clear()
        {
            
this ._tb1.Clear();
            
this ._tb2.Clear();
            
this ._tb3.Clear();
        }

        
public   string  getID()
        {
            
return   this ._tb1.Text.Trim();
        }

        
public   string  getContent()
        {
            
return   this ._tb2.Text.Trim();
        }

        
public   string  getSuggestion()
        {
            
return   this ._tb3.Text.Trim();
        }

        
public   bool  Check()
        {
            
if  ( string .IsNullOrEmpty( this ._tb1.Text.Trim())  ==   false   ||
                
string .IsNullOrEmpty( this ._tb2.Text.Trim())  ==   false   ||
                
string .IsNullOrEmpty( this ._tb3.Text.Trim())  ==   false
              &nbs
目录
相关文章
|
22天前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
22天前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
24天前
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
|
30天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
93 12
|
2月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
49 3
|
2月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
48 3
|
2月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
43 3
|
Android开发
.Net 转战 Android 4.4 日常笔记目录
原文:.Net 转战 Android 4.4 日常笔记目录 .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建 .Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序 .
836 0
|
22天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
56 7

热门文章

最新文章