[学习笔记 Day03]C#基础:可视化程序设计

[学习笔记 Day03]C#基础:可视化程序设计

类和对象:

  • 抽象是对具体问题进行概括
  • 类是对事物的一种抽象定义,在C#中类可以定义字段、属性和方法等成员。
  • 在C#中实例化对象后,可以通过对象名.方法名进行调用成员方法
  • 在C#中,定义命名空间的关键字是namespace,使用命名空间的关键字是using。
  • 属性:是对字段的封装,能够阻止非法数据的输入,从而保护内部数据的安全。

ADO.NET基础:

  • ADO.NET是微软公司提供的一款全新的数据库访问技术,客户端应用程序可以使用ADO.NET来连接数据源,并查询、添加、删除和更新所包含的数据。
  • ADO.NET最大的优势在于可以在数据源完全断开连接的情况下,对数据进行更新修改,在将数据的更新情况返回至数据源。
  • ADO.NET的解决方案是以XML格式表示内存数据(数据集),然后将数据以XML格式进行发送。

.NET Framework数据提供程序:

.NET Framework数据提供程序说明
SQL Server .NET Framework数据提供程序提供对Microsoft SQL Server中数据的访问,使用System.Data.SqlClient命名空间
OLE DB .NET Framework数据提供程序

提供对使用OLE DB公开的数据源(如Access、Excel等)中数据的访问,使用System.Data.oleDb命名空间

ODBC .NET Framework数据提供程序提供对使用ODBC公开的数据源中数据的访问,使用System.Data.Odbc命名空间

.NET Framework数据提供程序核心对象:

对象说明
Connection建立与特定数据源的连接
Command对数据源执行命令
DataReader从数据源中读取只进只读的数据流
DataAdapter使用数据源填充DataSet并支持更新

DataSet数据集:

DataSet数据集是数据驻留在内存中的表现形式。

ADO.NET操作数据库的方式步骤:

使用Connection对象、Command对象和DataReader对象实现非断开式访问数据库:

  1. 创建数据库连接对象Connection,并进行连接
  2. 创建命令对象Command
  3. 执行相应的SQL命令
  4. 关闭数据库连接

SQL Server身份验证连接字符串:

server=服务器名;database=数据库名;uid=用户名;pwd=密码;

Windows身份验证连接字符串:

server=服务器名;database=数据库名;Intergrated Security=true;

Command对象:

Command对象用于执行SQL命令,对数据库中的数据进行增删改查和执行聚合函数。

Command对象的常见属性:

  1. CommandText:获取或是设置对数据库执行的T-SQL命令
  2. Connection:获取或设置连接上数据库的Connection对象

Command对象的常用方法:

  1. ExecuteNonQuery:执行T-SQL语句,并返回受影响的行数
  2. ExecuteReader:执行查询命令,并返回DataReader对象
  3. ExecuteScalar:执行查询命令,返回结果集中首行首列的值

执行聚合函数语法:

Object  结果集中首行首列的值  =  命令对象.ExecuteScalar();

注意:ExecuteScalar方法返回的是Object对象,需要对其进行类型转换。

DataReader对象:

它提供了一个只读只进的数据读取器,用于从查询结果中读取数据,他每次只能读取一行数据,并且在读取过程中,必须保持连接处于打开的状态。

DataReader对象常用属性:

  1. FieldCount:获取每行数据的列数
  2. HasRows:指示查询结果中是否还存在未读取的数据,bool类型

DataReader对象常用的方法:

  1. Read:使DataReader前进到下一条记录,如果下一条有记录。则返回true。否则返回false
  2. Close:关闭DataReader对象
  3. GetName:获取指定列的名称
SqlDataReader  数据库读取对象  =  命令对象.ExecuteReader();

异常处理类与DBHelper类:

  • 类的静态成员包括静态字段、静态方法和静态属性。
  • 被关键字static修饰的方法被称为静态方法,没有被static修饰的方法称为实例方法。
  • 程序中的错误可以分为三类,即编译错误、逻辑错误和异常。
  • 在C#中,提供了3种常见的异常处理结构,分别是try…catch、try…catch…finally和try…finally

字符串的处理方法:

C#中有一个String类,他是.NET Framework类库中的内置类,它位于System命名空间中并且它包含很多对字符串处理的方法。

常用字符串处理的方法:

  1. int IndexOf(string value):获取指定的value字符串在当前字符串中第一个匹配项的索引,如果找到了value,就返回他的索引,如果没有找到,就返回-1
  2. int LastIndexOf(string value):获取指定的字符串value在当前字符串中最后一个匹配项的索引,如果找到了value,就返回他的索引,如果没有找到,就返回-1
  3. string Join(string separator,string[] value):在字符串数组value中的每个字符串用指定的分隔符sparator连接,返回连接后的字符串
  4. string[] Split(char separator):用指定的分隔符separator分隔字符串,返回分割后的字符串组成的数组
  5. string SubString(int startIndex,int length):从指定的位置stratIndex开始检索长度为length的子字符串
  6. string ToLower():获取字符串的小写形式
  7. string ToUpper():获得字符串的大写形式
  8. string Trim():去掉字符串中两端的空格
  9. string Format(string str,params object obj):将参数列表中的参数数据按照顺序根字符串进行拼接。

静态方法与实例方法的区别:

静态方法实例方法
需要static关键字修饰不需要static关键字修饰
只能使用类名进行调用只能使用对象进行调用
只能访问静态成员可以访问静态成员也可以访问实例成员
加载类时初始化创建对象时初始化

DBHelper类:

/// <summary>
    /// 数据库操作类
    /// </summary>
    class DBHelper
    {
        // 构造函数
        /// <summary>
        /// 数据库操作对象
        /// </summary>
        public DataBase() { }
        /// <summary>
        /// 数据库操作对象
        /// </summary>
        /// <param name="serverLocalHost">服务器地址</param>
        /// <param name="serverTableName">数据库名</param>
        /// <param name="serverUserName">数据库用户名</param>
        /// <param name="serverPassword">数据库密码</param>
        public DataBase(string serverLocalHost, string serverTableName, string serverUserName, string serverPassword)
        {
            this.ServerLocalHost = serverLocalHost;
            this.ServerTableName = serverTableName;
            this.ServerUserName = serverUserName;
            this.ServerPassword = serverPassword;
        }
        #region 数据库连接变量
        /// <summary>
        /// 服务器地址
        /// </summary>
        private static string serverLocalHost = Database_Info.serverLocalHost;
        public string ServerLocalHost { set => serverLocalHost = value; }
        /// <summary>
        /// 数据库名
        /// </summary>
        private static string serverTableName = Database_Info.serverTableName;
        public string ServerTableName { set => serverTableName = value; }
        /// <summary>
        /// 数据库用户名
        /// </summary>
        private static string serverUserName = Database_Info.serverUserName;
        public string ServerUserName { set => serverUserName = value; }
        /// <summary>
        /// 数据库密码
        /// </summary>
        private static string serverPassword = Database_Info.serverPassword;
        public string ServerPassword { set => serverPassword = value; }
        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        private static string DataCodeKey = "server=" + serverLocalHost + ";database=" + serverTableName + ";uid=" + serverUserName + ";pwd=" + serverPassword + ";";
        #endregion
        #region 数据连接和查询对象
        /// <summary>
        /// SqlConnection对象
        /// </summary>
        private SqlConnection conn = null;
        /// <summary>
        /// SqlCommand对象
        /// </summary>
        private SqlCommand comm = null;
        /// <summary>
        /// SqlDataReader对象
        /// </summary>
        private SqlDataReader sdr = null;
        /// <summary>
        /// SqlDataAdapter对象
        /// </summary>
        private SqlDataAdapter sda = null;
        #endregion
        /// <summary>
        /// 连接数据库方法
        /// </summary>
        /// <param name="commState">是否实例化SqlCommand对象</param>
        /// <param name="sql">用于SqlCommand对象中参数的SQL执行语句</param>
        /// <param name="resderState">是否启用实例化SqlDataReader对象</param>
        public void ConnectToDatabase(bool commState, string sql = "", bool readerState = false)
        {
            //尝试连接数据库
            try
            {
                //实例化SqlConnection对象
                conn = new SqlConnection(DataCodeKey);
                //判断是否已打开数据库连接
                if (conn.State == ConnectionState.Closed)
                {
                    //数据库关闭,执行该代码块,打开数据库
                    conn.Open();
                }
                else if (conn.State == ConnectionState.Broken)
                {
                    //数据库断开连接,执行改代码块,先关闭数据库连接,再重新打开该连接
                    conn.Close();
                    ConnectToDatabase(commState, sql, readerState);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("连接错误!", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //是否需要实例化SqlCommand对象
            if (commState)
            {
                comm = new SqlCommand(sql, conn);
                //是否需要实例化SqlDataReader对象
                if (readerState)
                {
                    sdr = comm.ExecuteReader();
                }
            }
            //如果不需要实例化SqlCommand或SqlDataReader,则实例化SqlDataAdapter对象
            else if (!readerState && sql != "")
            {
                sda = new SqlDataAdapter(sql, conn);
            }
        }
        /// <summary>
        /// 数据库数据增删改
        /// </summary>
        /// <param name="sql">数据库执行语句</param>
        /// <returns>返回执行结果(true或false)</returns>
        public bool IUDSQL(string sql)
        {
            //实例化数据库对象并打开数据库连接
            ConnectToDatabase(true, sql, false);
            //获取数据库执行成功的数据条
            int result = comm.ExecuteNonQuery();
            //关闭数据库连接,释放资源
            conn.Close();
            comm.Dispose();
            //判断数据库执行语句的执行结果
            if (result > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 数据库数据查询(Adapter对象)
        /// </summary>
        /// <param name="sql">数据库执行语句</param>
        /// <returns>以DataSet数据格式返回数据</returns>
        public DataSet QueryDataSQLUseAdapter(string sql)
        {
            //实例化DataSet对象
            DataSet ds = new DataSet();
            //实例化数据库对象并打开数据库连接
            ConnectToDatabase(false, sql, false);
            //将数据传输至DataSet中
            sda.Fill(ds);
            //关闭数据库连接,释放资源
            conn.Close();
            sda.Dispose();
            //返回数据
            return ds;
        }
        /// <summary>
        /// 数据库数据查询(Reader对象)
        /// </summary>
        /// <param name="sql">SQL执行语句</param>
        /// <returns>返回数据库中的指定数据</returns>
        public List<Dictionary<string, object>> QueryDataSQLUseReader(string sql)
        {
            //实例化Dictionary和List集合对象
            List<Dictionary<string, object>> results = new List<Dictionary<string, object>>();
            ConnectToDatabase(true, sql, true);
            //循环读取数据
            while (sdr.Read())
            {
                var rowData = new Dictionary<string, object>();
                for (int i = 0; i < sdr.FieldCount; i++)
                {
                    rowData[sdr.GetName(i)] = sdr.GetValue(i);
                }
                results.Add(rowData);
            }
            // 关闭并清理对象
            sdr.Close();
            sdr.Dispose();
            comm.Dispose();
            conn.Close();
            //返回数据
            return results;
        }
        /// <summary>
        /// 数据库存储过程数据查询(单字符串查询)
        /// </summary>
        /// <param name="sql">SQL执行语句</param>
        /// <returns>返回数据库中的指定数据</returns>
        public string ExecuteStoredProcedure(string sql)
        {
            string res = "";
            ConnectToDatabase(true, sql);
            // 注册SqlInfoMessage事件来捕获PRINT语句输出的消息
            conn.InfoMessage += (sender, e) => res = e.Message;
            // 执行查询
            comm.ExecuteNonQuery();
            //关闭连接释放资源
            comm.Dispose();
            conn.Close();
            //返回数据
            return res;
        }
    }

Windows窗体运用:

C#关键字:

  • partial:表示“部分的”,这是一个新的特性——分布类,使用该关键字可以将同一个类的代码分开放在多个文件中。

使用Form窗体:

窗体的常用属性:

  1. Name:窗体对象的名字,可以用在代码中进行标识
  2. BackColor:窗体的背景色
  3. Icon:只是窗体的图标。这在窗体的系统菜单框中显示,以及当前窗体最小化是显示
  4. BackgroundImage:窗体的背景图像
  5. FormBorderStyle:窗体显示的边框样式,有7个可选的值,默认是Sizable
  6. MaximizeBox:确定窗体标题右上角释放有最大化框,默认为True
  7. ShowInTaskbar:确定窗体是否出现在Windows任务栏中,默认为True
  8. StratPosition:确定窗体第一次显示时的位置
  9. Text:窗体标题栏中显示的文本
  10. TopMost:指示窗体是否始终希纳是在此属性未设置为True的所有窗体之上,默认为False
  11. WindowState:确定窗体的初始可是状态,默认为Normal

FormBorderStyle的属性值及说明:

  1. Fixed3D:固定的三维边框
  2. FixedDialog:固定的对话框样式的粗边框
  3. FixedSingle:固定的单行边框
  4. FixedToolWindow:不可调整大小的工具窗体边框
  5. None:无边框
  6. Sizable:可调整大小的边框
  7. SizableToolWindow:可调整大小的工具窗体边框

StratPosition的属性及说明:

  1. Manual:窗体的位置由Location属性决定
  2. CenterScreen:窗体在当前屏幕内居中,较为常用
  3. WindowDefaultLocation:窗体定位在Windows默认位置,其尺寸由Size属性决定
  4. WindowDefaultBounds:窗体定位在Windows默认位置,其边界也由Windows默认决定
  5. CenterParent:窗体在其父窗体中居中

WindowState的属性值及说明:

  1. Normal:窗体加载后的初始尺寸由Size属性决定
  2. Minimized:窗体加载后直接最小化到任务栏
  3. Maximized:窗体加载后直接最大化

窗体中的常用事件:

  1. Load:窗体加载事件,窗体加载时发生
  2. Click:窗体点击事件,单击窗体时发生
  3. DoubleClick:窗体双击事件,双击窗体时发生
  4. MouseMove:鼠标移动事件,鼠标移动窗体时发生
  5. KeyDown:键盘按下事件,在首次按下某个键时发生
  6. KeyUp:键盘释放事件,在释放某个键时发生

显示消息框:

简单的消息框:

MessageBox.Show("要显示的字符串")

带标题的消息框:

MessageBox.Show("要显示的字符串","消息框标题")

带标题、按钮的消息框:

MessageBox.Show("要显示的字符串","消息框标题",消息框按钮)

带标题、按钮和图标的消息框:

MessageBox.Show("要显示的字符串","消息框标题",消息框按钮,消息框图标)

提醒:每个消息框都有一个返回值,是一种DislogResult(对话框返回值)类型,可以通过点击运算符“.”来获取其中的一种返回值,如DialogResult.OK是指用户点击了“确定”按钮返回的值

Windows基础控件:

常用组件分类: 

组件分类作用
文本类组件可以在控件上显示文本,如TextBox、Label等
选择类组件主要为用户提供选择的项目,如RadioButton、CheckBox等
分组组件可以将窗体中的其他控件进行分组处理,如GroupBox、Panel等
菜单组件为系统制作功能菜单,如菜单栏、右键快捷菜单等
工具栏组件提供组菜单中常用的相关工具
状态栏组件显示应用程序的相关信息

大部分控件都具有Anchor(锚定)和Duck(停靠)属性来方便布局。

  • Anchor属性:它的作用就是设置控件相对与窗体的某个边缘的距离保持不变
  • Dock属性:停靠的意思
  • 锁定控件:将其属性值设置为True来将其控件进行锁定

文本类控件:

  1. Label控件:用于显示用户不能编辑的文本
  2. TextBox控件:通常用于对文本进行编辑
  3. 按钮控件(Button):允许用户通过单击来执行操作

菜单、工具栏和状态栏:

  1. 下拉式菜单(MenuStrip):通常出现在应用程序的顶部
  2. 弹出式菜单(ContextMenuStrip):又称为右键快捷菜单
  3. 工具栏(ToolStrip):他给用户提供了应用程序中常用的菜单命令的快速访问速度

选择类控件:

  1. 下拉组合框控件(ComboBox):为用户提供选择列表
  2. 复选框控件(CheckBox):只有两种状态(选中和取消)
  3. 单选按钮控件(RadioButton):多个选项中只允许选择一个

下拉组合框控件(ComboBox)中的属性DropDownStyle的属性值:

  1. Simple:使ComboBox列表部分总是可见的
  2. DropDown:使用户可以编辑控件的文本框部分,单击箭头才会显示列表
  3. DropDownList:用户不可以编辑控件的文本框部分,只能点击箭头选择一项

Windows控件应用:

Windows应用程序分为单文档界面应用程序(SDI)和多文档界面应用程序(MDI)两种形式

多文档界面应用程序:

MDI主要由两种窗体组成:父窗体和子窗体

设置步骤:

  1. 创建一个Windows应用程序
  2. 创建多个Form窗体
  3. 设置MDI窗体。在该窗体的属性面板中,将IsMdiContainer属性设置为True即可
  4. 设置并显示子窗体。通过设置某个子窗体的MdiParent属性,来显示该子窗体显示在那个MDI父窗体中

注意:每个应用程序中只能设置一个MDI窗体

MDI窗体的常用操作:

对当前活动的子窗体可以使用父窗体的ActiveMdiChild属性来获取。子窗体可以调用LayoutMdi()方法来调整排列方式。

注意:LayoutMdi()方法把MdiLayout枚举值作为参数

MdiLayout枚举值:

  1. ArrangeIcons:排列所有MDI子窗体图标
  2. Cascade:所有MDI子窗口层叠排列
  3. TileHorizontal:所有MDI子窗口水平平铺
  4. TileVertical:所有MDI子窗口垂直平铺

图片框(PictureBox):

PictureBox的常用属性:

  1. Image:用于设置显示在图片框控件上的图像
  2. ImageLocation:用于设置显示在图片框控件上的图像路径
  3. SizeMode:用于控制调整控件或图片的大小及放置位置

SizeMode的属性值:

  1. Normal:图象被放置于PictureBox的左上角。如果图像比包含他的PictureBox大,则该图像将被拆剪掉
  2. StretchImage:PictureBox中的图像被拉伸或收缩,以适应PictureBox的大小
  3. AutoSize:调整PictureBox的大小,使其等于所包含的图像大小
  4. CenterImage:如果PictureBox比图像大,则图像将居中显示。如果PictureBox比图像小,则图像将居中显示并裁剪掉超出的部分
  5. Zoom:图像大小按其原有的长宽比例被等比例放大或是缩小

计时器(Timer):

常用属性:

  1. Interval:事件发送的间隔(频率),以毫秒为单位
  2. Enable:设置计时器是否启用,布尔类型

常用方法:

  1. Start():启动计时器
  2. Stop():停止计时器

常用事件:

  1. Tick:定时间隔到自动引发的事件

图片集(ImageList):

常用属性:

  1. Images:存储在控件中的图像集合
  2. ImageSize:图像集中图像的大小,最大值为256 * 256
  3. ColorDepth:图像集中图像的颜色深度

Windows数据显示控件:

DataSet数据集:

  • DataSet用于缓存从数据源检索的数据,它具有两个重要的特征:编程模型与数据源独立和支持离线访问
  • DataSet类位于System.Data命名空间中

创建DataSet对象:

DataSet 数据集对象 = new DataSet("数据集名称")

常用属性:

  1. Tables:获取包含在DataSet中的表的集合

常用方法:

  1. Clear:清除DataSet中的数据

数据适配器DataAdapter:

DataAdapter对象用于填充数据集DataSet和更新数据库。

常用属性:

  1. SelectCommand:用于从数据源中查询记录的Command对象

常用方法:

  1. Fill():向DataSet的数据表中填充数据
dataAdapter对象.Fill(数据集对象,需要填充的数据表的名称)

DataGridView控件:

DataGridView控件提供了一种强大且灵活并以表格形式显示数据的方法

常用属性:

  1. Name:获取或设置DataGridView控件的名称
  2. DataSource:获取或设置DataGridView控件所显示数据的数据源
  3. Rows:获取DataGridView控件中所有行的集合
  4. Columns:获取DataGridView控件中所有列的集合
  5. SelectionMode:指示选中单元格的模式,选中一个单元格还是选中整行
  6. SelectedCells:获取用户选中的单元格的集合
  7. SelectedRows:获取用户选中的行的集合
  8. SelectedColumns:获取用户选中的列的集合
  9. MultiSelect:指示是否允许选择多个单元格、行或列
  10. AllowUserToAddRows:指示是否允许用户在DataGridView中添加行
  11. AllowUserToDeleteRows:指示是否允许用户在DataGridView中删除行
  12. ReadOnly:指示是否允许用户编辑DataGridView的单元格
  13. AllowGenerateColumns:指示在设置DataGridView时是否自动创建列
  14. ColumnHeadersVisible:指示是否显示列标题列
  15. RowHeaderVisible:指示是否显示包含标题的行
  16. CurrentCell:获取或设置当前处于活动状态的单元格
  17. CurrentRow:获取包含当前单元格的行
  18. AutoSizeColumnMode:可见列自动调整大小的模式,Fill:所有列自动填充DataGridView

DataView对象筛选和排序数据:

DataView是一张DataTable的虚拟表,主要用于显示数据,其数据的更改都是发生在DataTable中

常用属性:

  1. RowFilter:获取或是设置用于筛选DataView中查看那些行的表达式
  2. Sort:获取或设置DataView的一个或多个排序列以及排序顺序

创建DataView对象:

DataView 对象名 = DataTable.DefaultView;
//或者
DataView 对象名 = DataView(DataTable对象名);

Windows高级控件:

树形控件(TreeView):

TreeView控件用于显示具有层次结构的数据,他由层叠的节点Node构成。

常用属性:

  1. Name:获取或设置控件的名称
  2. Nodes:TreeView控件根节点集合
  3. SelectedNode:获取或设置当前TreeView控件中选定的树节点
  4. ImageList:设置或设置TreeView中所使用的图像集,关联ImageList控件
  5. ImageIndex:获取或设置树节点显示的图像,在ImageList图像中的索引
  6. SelectedImageindex:获取或设置节点被选中时显示的图像,在ImageList图像集中的索引

常见事件:

  1. AfterCollapse:在折叠树节点后触发
  2. AfterExpand:在展开树节点后触发
  3. AfterSelect:在更改选中节点后触发
  4. Click:在点击TreeView控件时触发

常见方法:

  1. ExpandAll:展开TreeView上的所有节点点

Nodes常见方法:

  1. Remove:删除指定节点
  2. Add:添加指定节点

列表视图控件ListView:

ListView控件可以显示带有图标的项列表,且具有多种显示模式。

常用属性:

  1. Name:控件的名称
  2. Items:包含控件中所有项的集合
  3. Columns:控件中显示的所有列标题的集合
  4. View:控件的显示视图
  5. LargeImageList:当控件以大图标视图显示时使用的ImageList
  6. SmallImageList:当控件以小图标视图显示时使用的ImageList
  7. GridLines:在包含控件中的行和列之间是否显示网络线
  8. MultiSelect:是否可以选择多项
  9. SelectedItems:获取在控件中选定的项
  10. FullRowSelect:单击某项是否选择其所有子项

常用方法:

  1. Clear():从控件中移除所有项和列,清空ListView

常用事件:

  1. Click:在单击ListView控件时触发
  2. SelectedIndexChanged:在选定项发生更改时触发

View属性的值:

  1. Details:详细视图,标准的二维表格,第一行为表头
  2. LargeIcon:大图标,每一项显示为一个大图标
  3. SmallIcon:小图标,每一项显示为一个小图标
  4. List:列表,每一项显示一行
  5. Tile:平铺,显示大图标,并在右侧显示详细信息

 

 

 

 

 

 

 

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容