Winform入门见解

winform算是C#比较快速的入门的一个了,简单的控件拖拽然后写上每个控件对应的事件。然后就可以了。需要美观的点 可以用Skin皮肤就完成了。我们先不说复杂的,就来个普通的三层架构来增删改查 分页和导出。 
           环境 Vs2017+sql server2008r2 框架4.0

首先创建新的解决方案输入你的名字。然后在解决方案右键选择添加新项目,添加类库。这里就不用图示来演示如何创建了。先建立Model层。三层架构我也不用说了,不会的可以百度。Model层创建完后,新建类。类名和你的数据库表名一样。数据库字段对应的就是类的属性。

 1 using QX.DBHelpers.Attributes;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6
 7 namespace Qx_SmkjItem.Model
 8 {
 9     /// <summary>
10     /// 日志信息
11     /// </summary>
12     [TableInfo(Name = "log_Info")]
13     public class log_Info
14     {
15         /// <summary>
16         /// 主键ID
17         /// </summary>
18
19         private int _id;
20         [FieldInfo(CanInsert = false, CanUpdate = false)]
21         public int ID
22         {
23             get { return _id; }
24             set { _id = value; }
25         }
26
27         /// <summary>
28         /// 类别名
29         /// </summary>
30         private string _typename;
31
32         public string TypeName
33         {
34             get { return _typename; }
35             set { _typename = value; }
36         }
37
38         private string _ddate;
39
40         public string dDate
41         {
42             get { return _ddate; }
43             set { _ddate = value; }
44         }
45
46         private string _logcontent;
47
48         public string logContent
49         {
50             get { return _logcontent; }
51             set { _logcontent = value; }
52         }
53
54         private string _person;
55
56         public string Person
57         {
58             get { return _person; }
59             set { _person = value; }
60         }
61
62     }
63 }

如果直接复制上面代码到你类去会报错。找不到引用。QX.GYHelpers.dll 是我自己根据网上或项目中遇到整理出来封装的一个帮助类。

信心的会发现类名上面有[TableInfo="数据库表名"],这就是前面提到为什么类名要和数据库表名一样。[FieldInfo(CanInsert = false, CanUpdate = false)] 会出现在ID上面。意思是 ID将不参与新增ID或这修改ID.

下面新建项目。创建DAL层。在DAL层右键新建类Base.dal:

  1 using QX.DBHelpers;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Linq;
  5 using System.Text;
  6
  7 namespace Qx_SmkjItem.Dal
  8 {
  9     public class BaseDal<T> where T : class,new()
 10     {
 11         internal SqlServerDBHelper _dbh = null;
 12         public BaseDal()
 13         {
 14             string ConnStr = SystemConfig.GetConfigData("DataStr", string.Empty);
 15
 16             _dbh = new SqlServerDBHelper(ConnStr);
 17         }
 18
 19
 20         /// <summary>
 21         /// 新增一个对象到数据库
 22         /// </summary>
 23         /// <param name="model">对象</param>
 24         /// <returns></returns>
 25         public string GetTableCount(string TableName)
 26         {
 27             string sql = "Select Count(*) From " + TableName;
 28
 29             return _dbh.ExecuteScalar(sql).ToString();
 30         }
 31
 32         /// <summary>
 33         /// 新增一个对象到数据库
 34         /// </summary>
 35         /// <param name="model">对象</param>
 36         /// <returns></returns>
 37         public bool Add(T model)
 38         {
 39             return _dbh.Insert<T>(model);
 40         }
 41
 42         /// <summary>
 43         /// 根据主键值删除一条数据
 44         /// </summary>
 45         /// <param name="keyValue">主键值</param>
 46         /// <returns></returns>
 47         public virtual bool Delete(object keyValue)
 48         {
 49             return _dbh.Delete<T>(keyValue);
 50         }
 51
 52         /// <summary>
 53         /// 根据主键值集合删除多条数据
 54         /// </summary>
 55         /// <param name="keyValue">主键值集合</param>
 56         /// <returns></returns>
 57         public bool Deletes(List<string> keyValueList)
 58         {
 59             _dbh.TransactionBegin();
 60             try
 61             {
 62                 if (keyValueList.Count > 0)
 63                 {
 64                     foreach (var keyValue in keyValueList)
 65                     {
 66                         if (_dbh.Delete<T>(keyValue) == false)
 67                         {
 68                             _dbh.TransactionRollBack();
 69                             return false;
 70                         }
 71                     }
 72                 }
 73             }
 74             catch (Exception)
 75             {
 76                 _dbh.TransactionRollBack();
 77                 throw;
 78             }
 79             _dbh.TransactionCommit();
 80             return true;
 81         }
 82
 83         /// <summary>
 84         /// 更新一个实例数据
 85         /// </summary>
 86         /// <param name="model">实例</param>
 87         /// <returns></returns>
 88         public virtual bool Update(T model)
 89         {
 90             return _dbh.Update<T>(model);
 91         }
 92
 93         /// <summary>
 94         /// 更新多个实例数据
 95         /// </summary>
 96         /// <param name="keyValue">实例集合</param>
 97         /// <returns></returns>
 98         public virtual bool Updates(List<T> modelList)
 99         {
100             _dbh.TransactionBegin();
101             try
102             {
103                 if (modelList.Count > 0)
104                 {
105                     foreach (var model in modelList)
106                     {
107                         if (_dbh.Update<T>(model) == false)
108                         {
109                             _dbh.TransactionRollBack();
110                             return false;
111                         }
112                     }
113                 }
114             }
115             catch (Exception)
116             {
117                 _dbh.TransactionRollBack();
118                 throw;
119             }
120             _dbh.TransactionCommit();
121             return true;
122         }
123
124         /// <summary>
125         /// 获取所有数据
126         /// </summary>
127         /// <returns></returns>
128         public virtual List<T> GetAll()
129         {
130             return _dbh.GetBySQL<T>();
131         }
132
133         /// <summary>
134         /// 获取所有数据
135         /// </summary>
136         /// <returns></returns>
137         public virtual List<T> GetAll(bool childData)
138         {
139             return _dbh.GetBySQL<T>(childData);
140         }
141
142         /// <summary>
143         /// 根据where语句进行查询
144         /// </summary>
145         /// <param name="where">where条件</param>
146         /// <param name="parameters">parameter参数</param>
147         /// <returns></returns>
148         public List<T> GetBySQL(string where, params object[] parameters)
149         {
150             return _dbh.GetBySQL<T>(where, parameters);
151         }
152
153         /// <summary>
154         /// 根据where语句进行查询
155         /// </summary>
156         /// <param name="where">where条件</param>
157         /// <param name="childData">是否获取子数据</param>
158         /// <param name="parameters">parameter参数</param>
159         /// <returns></returns>
160         public List<T> GetBySQL(string where, bool childData, params object[] parameters)
161         {
162             return _dbh.GetBySQL<T>(where, childData, parameters);
163         }
164
165         /// <summary>
166         /// 分页查询方法
167         /// </summary>
168         /// <param name="pageSize">页大小</param>
169         /// <param name="pageIndex">页码</param>
170         /// <param name="rowCount">当前查询一共有多少数据</param>
171         /// <param name="sqlWhere">SQL WHERE 条件</param>
172         /// <returns></returns>
173         public List<T> GetPageBySQL(int pageSize, int pageIndex, out int rowCount, string sqlWhere)
174         {
175             return _dbh.GetPageBySQL<T>(pageSize, pageIndex, out rowCount, sqlWhere);
176         }
177     }
178 }

Base.dal里面包含增删改查的dal。这里就不解释Base.dal的具体信息。代码有注释。 然后新建对应的Dal层。新建的dal层要继承base.dal,同时引用项目model层

using Qx_SmkjItem.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Qx_SmkjItem.Dal
{
  /// <summary>
 /// 日志信息DAL
 /// </summary>
  public  class log_InfoDal: BaseDal<log_Info>
    {
    }
}

继承玩之后。新建项目,创建BLL层。在BLL层右键新建项目,创建对应的BLL层。引用Model DAL层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Qx_SmkjItem.Dal;
using Qx_SmkjItem.Model;

namespace Qx_SmkjItem.BLL
{
 public   class log_InfoBll
    {
        log_InfoDal dal = new log_InfoDal();
        /// <summary>
        ///  所有数据条目数
        /// </summary>
        public string GetZJTypeCount()
        {
            return dal.GetTableCount("log_Info");

        }

        /// <summary>
        ///  新增条目
        /// </summary>
        public string Add(string lgoinfo)
        {
            log_Info Object = JsonConvert.DeserializeObject<log_Info>(lgoinfo);

            return JsonConvert.SerializeObject(dal.Add(Object));
        }

        /// <summary>
        ///  修改一条数据
        /// </summary>
        public string Update(string lgoinfo)
        {
            return JsonConvert.SerializeObject(dal.Update(JsonConvert.DeserializeObject<log_Info>(lgoinfo)));
        }

        /// <summary>
        ///  修改多条数据
        /// </summary>
        public string Updates(string lgoinfoList)
        {
            return JsonConvert.SerializeObject(dal.Updates(JsonConvert.DeserializeObject<List<log_Info>>(lgoinfoList)));
        }

        /// <summary>
        ///  删除一条数据
        /// </summary>
        public string Delete(string code)
        {
            return JsonConvert.SerializeObject(dal.Delete(code));
        }

        /// <summary>
        ///  删除多条数据
        /// </summary>
        public string Deletes(string codeList)
        {
            return JsonConvert.SerializeObject(dal.Deletes(JsonConvert.DeserializeObject<List<string>>(codeList)));
        }

        /// <summary>
        ///  获取所有数据(不包含子集数据)
        /// </summary>
        public string GetAll()
        {
            return JsonConvert.SerializeObject(dal.GetAll());
        }

        /// <summary>
        ///  获取所有数据(包含子集数据)
        /// </summary>
        public string GetAllAndChild(string getChild)
        {
            return JsonConvert.SerializeObject(dal.GetAll(Convert.ToBoolean(getChild)));
        }

        /// <summary>
        ///  根据SqlWhere条件获取数据(不包含子集数据)
        /// </summary>
        public string GetBySql(string sqlWhere)
        {
            return JsonConvert.SerializeObject(dal.GetBySQL(sqlWhere));
        }

        /// <summary>
        ///  根据SqlWhere条件获取数据(包含子集数据)
        /// </summary>
        public string GetBySqlAndChild(string sqlWhere, string getChild)
        {
            return JsonConvert.SerializeObject(dal.GetBySQL(sqlWhere, Convert.ToBoolean(getChild)));
        }

        /// <summary>
        ///  根据SqlWhere条件分页 获取数据(不包含子集数据)
        /// </summary>
        public string GetPageBySql(string pageSize, string pageIndex, string sqlWhere)
        {
            int outCount = 0;
            return JsonConvert.SerializeObject(dal.GetPageBySQL(Convert.ToInt32(pageSize), Convert.ToInt32(pageIndex), out outCount, sqlWhere));
        }
    }
}

看完上面代码 你会大概知道这是在做什么。其中需要特别注意的是 BLL层的对象也就是model层对应model一定要正确。如果出现sql之类的错误提示。那么就要仔细检查三个层的对象是否对应。

接下来就是用到实际的项目中,继续创建项目,创建windows窗体,设为启动项目。然后新建窗口。。

上面用的是Cskin 控件布局。在官网下载最新版的控件库 :http://www.cskin.net/  下载下来后 会有文档提示你如何用。一样的拖控件。窗体一般的继承的Form.

那么F7 进入代码 把Form 替换为 CCSkinMain

using System;
using CCWin;
using Newtonsoft.Json;
using Qx_SmkjItem.BLL;
using Qx_SmkjItem.Model;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test
{
    public partial class FrmLogInfo : CCSkinMain
    {
        public FrmLogInfo()
        {
            InitializeComponent();
        }
        log_typeBll sbll = new log_typeBll();
        log_Info st = new log_Info();
        log_InfoBll stb = new log_InfoBll();
        /// <summary>
        /// 获取类型数据绑定到下拉框
        /// </summary>
        private void GetTypes()
        {
            cmbtype.DisplayMember = "TypeName";
            cmbtype.ValueMember = "ID";
            cmbtype.DataSource = JsonConvert.DeserializeObject<List<log_type>>(sbll.GetAll());
        }

        #region 分页
        int rowcount = 0;
        int pagecount = 0;
        public int Inum = 1;
        public int pagesize = 10;
        #endregion
        /// <summary>
        /// 根据条件查询数据(除内容外)
        /// </summary>
        private void GetTypeInfo()
        {

            StringBuilder strSwhere = new StringBuilder();
            if (!string.IsNullOrEmpty(cmbtype.Text.Trim()))
            {
                strSwhere.Append("and TypeName =‘" + cmbtype.Text.Trim() + "‘");
            }
            if (!string.IsNullOrEmpty(dtdate.Text.Trim()))
            {
                strSwhere.Append("and dDate like ‘%" + dtdate.Text.Trim() + "%‘");
            }
            if (!string.IsNullOrEmpty(txtbz.Text.Trim()))
            {
                strSwhere.Append("and Person like ‘%" + txtbz.Text.Trim() + "%‘");
            }
            if (strSwhere.Length>0)
            {
                strSwhere.Remove(0, 3);
            }
            List<log_Info> loglist = JsonConvert.DeserializeObject<List<log_Info>>(stb.GetBySql(strSwhere.ToString()));
            rowcount = loglist.Count;
            pagecount = rowcount % pagesize;

            if (pagecount == 0)
            {
                pagecount = rowcount / pagesize;
            }
            else
            {
                pagecount = rowcount / pagesize + 1;
            }
            this.lblzys.Text = "共" + pagecount.ToString() + "页";
            this.lbldqys.Text = "当前" + Inum.ToString() + "页";

            dgvdata.DataSource = JsonConvert.DeserializeObject<List<log_Info>>(stb.GetPageBySql(pagesize.ToString(), Inum.ToString()
                , strSwhere.ToString()));
        }
        /// <summary>
        /// 清空文本框数据
        /// </summary>
        private void Qktxt()
        {
            rbcontent.Text = string.Empty; txtbz.Text = string.Empty;
        }

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btncx_Click(object sender, EventArgs e)
        {
            GetTypeInfo();
        }
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmdelete_Click(object sender, EventArgs e)
        {
            int delecount = 0;
            for (int i = 0; i < dgvdata.SelectedRows.Count; i++)
            {
                if (Convert.ToBoolean(dgvdata.SelectedRows[i].Cells[0].Value) == true)
                {
                    int id = Convert.ToInt32(dgvdata.SelectedRows[i].Cells[0].Value);
                    string ss = stb.Delete(id.ToString());
                    if (ss == "true")
                    {
                        delecount++;
                    }
                }
            }
            MessageBox.Show("已删除成功当前信息" + delecount + "条", "提示");
            GetTypeInfo();
        }
        /// <summary>
        /// 获取选中行数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvdata_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                for (int i = 0; i < dgvdata.SelectedRows.Count; i++)
                {
                    cmbtype.Text = dgvdata.SelectedRows[i].Cells["TypeName"].Value.ToString();
                    rbcontent.Text = dgvdata.SelectedRows[i].Cells["logContent"].Value.ToString();
                    dtdate.Text = dgvdata.SelectedRows[i].Cells["dDate"].Value.ToString();
                    txtbz.Text = dgvdata.SelectedRows[i].Cells["Person"].Value.ToString();
                }
            }
            catch (Exception ex) { }
        }

        /// <summary>
        /// 首页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lkSy_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Inum = 1;
            GetTypeInfo();
        }

        /// <summary>
        /// 上一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lkSyy_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (Inum < 0 || Inum == 1)
            {
                MessageBox.Show("已是首页", "提示");
            }
            else
            {
                Inum--;
                GetTypeInfo();
            }
        }

        /// <summary>
        /// 下一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lkxyy_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Inum++;
            if (Inum > pagecount)
            {
                MessageBox.Show("已是最后一页", "提示");
            }
            else
            {
                GetTypeInfo();
            }
        }

        /// <summary>
        /// 尾页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lkwy_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Inum = pagecount;
            GetTypeInfo();
        }

        private void FrmLogInfo_Load(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// 导出Excel方法
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="myDGV"></param>
        private void ExportExcel(string fileName, DataGridView myDGV)
        {
            string saveFileName = "";
            SaveFileDialog saveDialog = new SaveFileDialog();
            saveDialog.DefaultExt = "xls";
            saveDialog.Filter = "Excel文件|*.xls";
            saveDialog.FileName = fileName;
            saveDialog.ShowDialog();
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0)
                return; //被点了取消
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
            Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
            Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
            string[] array = new string[myDGV.Columns.Count];
            //获取Visble =true 的列
            foreach (DataGridViewColumn column in myDGV.Columns)
            {
                if (column.Visible == true)
                {
                    array[column.DisplayIndex] = column.HeaderText + ‘|‘ + column.Name; ;
                }
            }
            int RowsCount = myDGV.Rows.Count;
            int ColumnsCount = array.Length;
            int mm = 1;
            for (int i = 0; i < ColumnsCount; i++)
            {
                string[] str = new string[2];
                string ColumnName;
                try
                {
                    str = array.GetValue(i).ToString().Split(‘|‘);
                    ColumnName = str[0];
                }
                catch
                {
                    continue;
                }
                //导出列名
                worksheet.Cells[1, mm] = ColumnName;
                //导出列内容
                for (int m = 0; m < RowsCount; m++)
                {
                    try
                    {
                        worksheet.Cells[m + 2, mm] = "‘" + myDGV.Rows[m].Cells[str[1]].FormattedValue.ToString();
                    }
                    catch
                    { }
                }
                //执行完一列 mm++
                mm++;
            }
            worksheet.Columns.EntireColumn.AutoFit();

            if (saveFileName != "")
            {
                try
                {
                    workbook.Saved = true;
                    workbook.SaveCopyAs(saveFileName);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
            xlApp.Quit();
            GC.Collect();//强行销毁
            MessageBox.Show(fileName + "的表格资料保存成功", "提示");
        }
        /// <summary>
        /// 导出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDc_Click(object sender, EventArgs e)
        {
            if (dgvdata.Rows.Count > 0)
            {
                ExportExcel(DateTime.Now.ToShortDateString() + "日志报告", dgvdata);

            }
            else
            {

                MessageBox.Show("没有数据可导出,请先查询数据!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
    }
}

上面代码个人觉得已经很详细了。查询 删除 分页 导出都有。只是缺少新增和修改。由于我列出的是操作日志信息。所以就没有修改和新增。不过下面代码会给出

 /// <summary>
        /// 添加
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAdd_Click(object sender, EventArgs e)
        {
            sy.TypeName = txttype.Text.Trim();
            string iss = sbll.Add(JsonConvert.SerializeObject(sy));
            if (iss == "true")
            {
            }
            GetsmTypeInfo();
        }
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnupdate_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dgvdata.SelectedRows.Count; i++)
            {
                sy.ID = Convert.ToInt32(dgvdata.SelectedRows[i].Cells["ID"].Value);
                sy.TypeName = txttype.Text.Trim();
                string iss = sbll.Update(JsonConvert.SerializeObject(sy));
                if (iss == "true")
                {
                }
            }
            GetsmTypeInfo();
            txttype.Text = string.Empty;
        }

以上就是 winform的三层架构的简单增删改查。 由于代码简单。所以这是给才开始学的一个参考。有些代码没有优化 和存在一些bug。但不影响正常使用。老手们看到给出你们的意见。便于小弟及时修正。。。请赐教。

时间: 2024-10-13 16:06:39

Winform入门见解的相关文章

8、面向对象以及winform的简单运用(事件与winform入门)

事件 Visual studio中对可视化窗体控件的事件处理机理: 所有的.NET Framework可视化窗体控件的预定义事件,都会某一对应的“事件名+Handler”委托类型的变量.与此事件相关的信息都封装在“事件名+Args”类型的事件参数中,此事件参数有一个基类EventArgs,它是所有事件参数的基类. winform入门 掌握winform要从三个方面入手:1.form,即窗体 2.控件 3.事件的触发. 1.form: 窗体是winform必不可少的元素,在应用程序的主入口点Pro

apache Solr 入门见解

最近项目中使用到了solr,记录一下solr的一些东西 下载solr,地址 http://mirror.bit.edu.cn/apache/lucene/solr/5.3.0/ 在linux目录下创建solr_home 和solr_tomcat 文件夹 其中,solr_home目录下的文件如下: 如果要配置多核的话,需配置core0和core1文件夹里面的文件,单核只 需 配置 collection1 bin目录里面无内容,可以忽略 因为项目用到多核,所以配置core0 和core1,由于配置c

16Aspx.com源码2014年7月详细

        Web电子商务网(三层)V2.0源码 2014-07-31   [VS2010] 源码介绍: Web电子商务网(三层)V2.0源码 源码描述: 一.源码特点     采用三层架构开发,购物车功能 二.功能介绍     前台集成了产品在线展示,用户注册.在线调查.在线投稿     后台有类别管理\图书管理\订单管理\会员管理\配送范围管理\邮件列表\广告管理\友情链接管理等     后台添加图书时自动生成缩略图和文字水印     主要参考了petshop的设计架构.使用了Asp.n

桌面程序开发入门(WinForm with C#)

1.使用Visual Studio 2013创建新项目 2.创建一个主窗体和4个子窗体 3.创建一个数据库.一个表.一个存储过程 4.在配置文件里添加数据库连接字符串 5.真正的编码工作. 第一步:创建新项目,一张图片抵一万字!看图说话,呵呵.. 第二步:创建4个子窗体,名称分别是formCommandProc.cs.formDataAdapterProc.cs.formXMLCreate.cs.formXMLRead.cs. 三.创建一个数据库.一个表.一个存储过程.打开MS SQL Serv

winform制作自定义控件(入门)

原文链接:http://blog.csdn.net/bychentufeiyang/article/details/7081402   与原文基本一致,只是例子变成VS2012环境,语言采用博主常用的VB.NET 一 .概述Windows 窗体控件是可再次使用的组件,它们封装了用户界面功能,并且可以用于客户端 Windows 应用程序.“Windows 窗体”不仅提供了许多现成控件,还提供了自行开发控件的基础结构.可以组合现有控件.扩展现有控件或创作自己的自定义控件.Windows 窗体控件是从

Winform &amp; Devexpress Chart使用入门

一.Chart(Winform) 使用图表控件(chart)首先要理解图表区域(ChartArea).XY轴(AxisX.AxisY).数据点(Series).标题(Title).图例(Legend)这几个之间的层次关系. 图1:柱形图 从图1可以中内容,可以对Chart控件的组成有了一个简单的了解. 1.图表区域(ChartArea) 从图1中可以看出数据点.XY轴都是属于ChartArea的,这里是主要数据展示的区域. 2.XY轴(AxisX.AxisY) XY轴的作用不用多说,具体的设置可

Winform 控件的入门级使用(一)

开始总结一下控件的基本用法,方便以后查阅. 一.Label Label 的使用频率很高,基本上也没有什么难度. 1 #region Winform 2 //label 3 label.Text = "这是一个Label"; 4 label.Font = new Font("微软雅黑", 14, FontStyle.Regular, GraphicsUnit.Pixel); 5 label.ForeColor = Color.Red; 6 //labelNoAutoS

c# Winform Control 快速入门基本事件

对于桌面应用,归类总结一下最常用的事件 一 鼠标移动事件 用户行为:鼠标移入控件又移出控件 鼠标在控件外侧,准备移入控件,无事件 移入控件边界,接受到 MouseEnter 事件 移入之后,接收到 MouseMove 事件,事件不停的发送,一旦cursor变换,发送 MouseHover 事件 鼠标在控件内部移动,不停的发送 MouseMove 事件 鼠标移出到控件边界,发送 MouseLeave 事件 移出后无事件 二 鼠标点击事件 用户行为:在控件内部,点击一下 在控件内部按下鼠标左键,Mo

WPF入门教程系列(一) 创建你的第一个WPF项目

WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知识(或者其他.NET支持的语言):这个是当然的了,虽然WPF是XAML配置的,但是总还是要写代码的,相信各位读者应该也都有这个基础了. 2) HTML语言:虽然WPF是窗体程序但是由于使用的XAML语言,如果以前接触过HTML.XHTML.ASP.NET之路的东西的话会,接受这些标签会很有帮助的,如