C# 教程
文章平均质量分 88
.Net学习
.net开发爱好者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
教程阅读器
为了配合《Vb.net循序渐进(第二版)》和《C#循序渐进》,发布新版教程阅读器。教程阅读器、《Vb.net循序渐进(第二版)》和《C#循序渐进》教程下载地址(百度网盘):提取码:csdn。原创 2025-10-16 13:37:31 · 453 阅读 · 0 评论 -
C# 综合示例 库存管理系统21 关于(FormAbout)、 输入对话框(InputBox)、 总结
如前言所述,《库存管理系统》主要是为了弥补教程中缺少综合示例。由于设计时间较短,可能会有些遗漏或者Bug。可以在此基础上增加:1、操作日志:记录管理员、操作员对数据库操作时间和操作动作。2、对数据库增加密码。access2010中,请以独占方式打开数据库,在【文件】|【信息】,按下【用密码进行加密】对数据库增加密码。在程序代码中,64位程序使用以下连接语句:Data Source=数据库路径;jet oledb:database password=密码;原创 2025-05-05 00:27:04 · 1465 阅读 · 0 评论 -
C# 综合示例 库存管理系统20 操作员管理(FormAdmin)
command.CommandText = "insert into 操作员(ID,姓名,密码,是否停用) values(" + userid + ",'" + newUser + "','" + passMd5 + "','否')";command.CommandText = "update 操作员 set 姓名='" + userNameNew + "' where ID=" + UserID;"停用" : "启用";"是" : "否";MessageBox.Show("请先选择需要修改的操作员");原创 2025-05-05 00:26:35 · 1651 阅读 · 0 评论 -
C# 综合示例 库存管理系统19 密码修改(FormPass)
密码修改时,为防止不是本人操作,应对旧密码进行验证。验证成功后,用MD5加密新密码后保存。学习更多C#知识,请参看。原密码不正确,取消操作。原创 2025-05-03 00:30:00 · 1871 阅读 · 0 评论 -
C# 综合示例 库存管理系统18 快递公司管理(FormExpress)
不管是新增还是修改,都不用返回值,所以使用。循环读取每一行数据,直到。学习更多C#知识,请参看。未选择需要删除的数据。填充数据选项,主要是。原创 2025-05-03 00:15:00 · 1250 阅读 · 0 评论 -
C# 综合示例 库存管理系统17 供应商管理(FormSupplier)
存在的数据通常已经关联了很多其它表的数据,因此,一般不要轻易设置删除。不管是新增还是修改,都不用返回值,所以使用。不管是新增还是修改,都不用返回值,所以使用。该供应商已经存在,是否继续添加?中的项目,将数据添加到对应位置。循环读取每一行数据,直到。检查是否已经存在该供应商。供应商联系人姓名不能为空。供应商联系人职务不能为空。学习更多C#知识,请参看。供应商公司名称不能为空。供应商电话号码不能为空。填充数据选项,主要是。未选择需要修改的数据。未选择需要修改的数据。原创 2025-05-02 00:30:00 · 791 阅读 · 0 评论 -
C# 综合示例 库存管理系统16 出库单操作(FormStorageOutOrder)
由于出库单所包含的信息比入库单多得多,因此,代码难度主要在不遗漏项目。如果是修改,那么需要读取数据库中的数据再填充。如果是修改数据,那么填充所有控件中的数据。,需要在货物信息表(库存)中进行增删。号,也是判断新增还是修改的依据。修改出库清单中的物品时设置标记。是否新增标志,如果是,设置为。如果是新增,那么保持控件原状。省略了检查数据记录是否有效。调用之后添加任何初始化。循环读取每一行数据,直到。循环读取每一行数据,直到。循环读取每一行数据,直到。学习更多C#知识,请参看。填充数据选项,主要是。原创 2025-05-02 00:15:00 · 787 阅读 · 0 评论 -
C# 综合示例 库存管理系统15 出库单查询(FormStorageOutQuery)
循环读取每一行数据,直到。设置各个条件下的查询语句。学习更多C#知识,请参看。判断是否勾选了查询条件。操作人员姓名不能为空值。必须勾选一个查询条件。注意:查询条件在使用。原创 2025-05-01 00:30:00 · 1972 阅读 · 0 评论 -
C# 综合示例 库存管理系统14 出库管理(FormStorageOut)
同入库管理,仍然存在一个出库单对应多个出库物的情况,因此提供了两种显示方式。“出库单”按钮按下显示的是出库单信息,“出库货物”按钮按下显示的是出库货物信息。datagridview在显示出库单时,双击弹出出库单ID对应的出库单操作窗口;datagridview在显示出库货物信息时,双击转到显示该出库货物对应的出库单。在查询出库物品单时,才允许增改删。在查询出库物品单时,才允许增改删。根据记录总数得到总的页数,其中。表格时,双击转到查询对应的订单。在查询出库物品时,禁止增改删。不允许删除其它操作员的出库单。原创 2025-05-01 00:15:00 · 777 阅读 · 0 评论 -
C# 综合示例 库存管理系统13 入库单操作(FormStorageInOrder)
在代码中使用 Dictionary<int, int>保存旧、新入库单中货物ID和数量,再使用editGoodsCount()方法对数据进行组合。入库单中,如果修改了货物种类、数量,应该对前后货物情况进行组合,获得货物增删情况,并最终对应修改在货物信息表的库存量字段中的数据。原入库单中入库的三种货物的ID和数量: 1,10 2,203,30。修改后入库单中三种货物的ID和数量:2,253,204,15。组合后的货物ID和数量: 1,102,-53,104,-15。先进行组合,然后再修改货物信息表的库存量。原创 2025-04-30 00:30:00 · 1367 阅读 · 0 评论 -
C# 综合示例 库存管理系统12 入库单查询(FormStorageInQuery)
窗体中使用了DateTimePicker控件来设置日期时间,DateTimePicker的属性CustomFormat设置为:yyyy-MM-dd HH:mm:ss,同时Format属性必须设置为:Custom。"(入库单.订购日期 between #2000-11-01 0:00:00# and #2000-11-01023:59:59#)""(入库单.订购日期 between #2000-11-01 0:00:00# and #2000-11-0123:59:59#)"循环读取每一行数据,直到。原创 2025-04-30 00:15:00 · 1136 阅读 · 0 评论 -
C# 综合示例 库存管理系统11 入库管理(FormStorageIn)
由于存在一个入库单对应多个入库物的情况,因此提供了两种显示方式。“入库单”按钮按下显示的是入库单信息,“入库货物”按钮按下显示的是入库货物信息。datagridview在显示入库单时,双击弹出入库单ID对应的入库单操作窗口;datagridview在显示入库货物信息时,双击转到显示该入库货物对应的入库单。先查询该入库单记录是否当前操作员保存。在查询入库物品单时,才允许增改删。表格时,双击转到查询对应的订单。在查询入库物品时,禁止增改删。不允许删除其它操作员的入库单。在查询入库单时,才允许增改删。原创 2025-04-29 00:30:00 · 1452 阅读 · 0 评论 -
C# 综合示例 库存管理系统10 库存货物操作(FormStorageInfoTable)
需要强调的是,严格控制用户输入,这样可以减少很多代码。例如库存量、采购价格、销售价格使用NumericUpDown控件,而不采用TextBox控件。如果是修改,那么需要读取数据库中的数据再填充。不管是新增还是修改,都不用返回值,所以使用。不管是新增还是修改,都不用返回值,所以使用。如果是修改数据,那么填充所有控件中的数据。号,也是判断新增还是修改的依据。如果是修改,初始不允许控件操作。是否新增标志,如果是,设置为。如果是新增,那么保持控件原状。如果是新建,则允许控件操作。循环读取每一行数据,直到。原创 2025-04-29 00:15:00 · 1047 阅读 · 0 评论 -
C# 综合示例 库存管理系统9 库存查询(FormStorageInfoQuery)
另外,为了严格控制用户输入,通常情况下,需要将ComboBox的DropDownStyle属性设置为DropDownList。库存查询提供了5种方式的组合查询,每种方式查询语句应该符合库存信息(FormStorageInfo)代码中的sql语句。使用多个查询条件时,其间使用 And 组合。例如以下语句判断前一查询条件是否为空,如果不为空则使用 and 连接。需要注意的是:在Access中执行模糊查询,通配符使用*(星号),而在vb中,应该使用%(百分号)。循环读取每一行数据,直到。填充数据选项,主要是。原创 2025-04-28 06:30:00 · 1381 阅读 · 0 评论 -
C# 综合示例 库存管理系统8 库存信息(FormStorageInfo)
通常情况下,sql查询分为四个部分:select、from、where、order by,因此每一次sql查询,实际就是这四部分的组合,在本节代码以及后面几节代码中将频繁地使用以下四个变量(对不同的查询有不同变量名称),分别表示sql查询的四部分。另外,为了方便用户操作,提供了双击datagridview中某行,直接跳出对应货物ID号的库存货物操作(FormStorageInfoTable)窗口,代码中是dgv.MouseDoubleClick。先清除已经填入的表,否则会将数据追加到已有表。原创 2025-04-28 06:15:00 · 1559 阅读 · 0 评论 -
C# 综合示例 库存管理系统7 主界面(FormMain)
主界面是多文档界面容器,需要将窗体属性IsMdiContainer设置为True。关于多文档界面编程请参看教程第7.12节《多文档界面》。为了更好控制用户界面,FormMain窗体中showWindow()方法仅允许同一时间显示一个子窗体。主界面并不提供具体操作,只是一个显示其它窗口的容器,其工具栏上按钮打开对应功能的窗体。检查库存信息窗体是否打开。原创 2025-04-26 00:30:00 · 527 阅读 · 0 评论 -
C# 综合示例 库存管理系统5 ClassMd5类
为了方便使用,《库存管理系统》中建立了ClassMd5类,提供了共享方法 toMD5(),可以不用实例化ClassMd5类就可调用toMD5()方法来进行加密。由于《库存管理系统》为管理员和操作员设置了密码登录,因此对于密码需要一定的加密,本教程中使用的是MD5加密方式。学习更多C#知识,请参看。关于加密,请参看教程第。原创 2025-04-25 00:30:00 · 124 阅读 · 0 评论 -
C# 综合示例 库存管理系统4 classMod类
在《库存管理系统》中使用classMod类来保存全局变量。学习更多C#知识,请参看。原创 2025-04-25 00:15:00 · 250 阅读 · 0 评论 -
C# 综合示例 库存管理系统3 窗体设计总览
主界面提供了库存信息、入库操作、出库操作等功能,由于本《库存管理系统》主要是针对“库存”,因此提供的操作与基本的入库出库有关,如果各位朋友需要更多功能,可以在此基础上扩展即可。出库单操作(FormStorageOutOrder):可在此窗口新增、修改出库单信息。入库单操作(FormStorageInOrder):可在此窗口新增、修改入库单信息。主要提供了库存信息查看、查询功能,同时管理员可以增加、修改、删除。主要提供了入库信息查看、查询、增加、修改、删除。主要提供了出库信息查看、查询、增加、修改、删除。原创 2025-04-24 00:30:00 · 509 阅读 · 0 评论 -
C# 综合示例 库存管理系统2 数据库架构
操作员表中同时保存了管理员的账号密码,管理员和操作员区别,主要是在《库存管理系统》中权限不同,也就是可以操作的内容不同,我会在后面窗体设计中做说明。同样,考虑到出库货物可能有多个,因此除了出库单表,还需要出库单明细表来保存出库单对应了哪些货物、货物的出库价格以及数量。保存货物入库时账单的编号、操作员、订购日期、入库日期,考虑到入库货物可能有多个,因此除了入库单表,还需要入库单明细表来保存入库单对应了哪些货物、货物的采购价格以及数量。入库单.入库单ID和入库单明细.入库单ID对应。保存货物类别的相关信息。原创 2025-04-24 00:15:00 · 957 阅读 · 0 评论 -
C#综合示例 库存管理系统6 登录界面(FormLogin)
为了防止sql注入,采用的方法是,先检查账号是否存在,如果存在就返回对应的操作员姓名和密码。select 姓名,密码 from 操作员 where (id=账号ID) and (是否停用='否')关于数据库操作,请参看教程第19章《数据库操作》。通过返回的密码与用户输入的密码比较,再判断是否可以进入系统。在登录界面输入正确的账号和密码才能登录。其中账号ID是输入的账号。学习更多C#知识,请参看。原创 2025-04-26 00:15:00 · 1624 阅读 · 0 评论 -
C#综合示例 库存管理系统1概览
C# 综合示例 库存管理系统21 关于(FormAbout)、 输入对话框(InputBox)、 总结。C# 综合示例 库存管理系统10 库存货物操作(FormStorageInfoTable)C# 综合示例 库存管理系统9 库存查询(FormStorageInfoQuery)C# 综合示例 库存管理系统8 库存信息(FormStorageInfo)C# 综合示例 库存管理系统14 出库管理(FormStorageOut)C# 综合示例 库存管理系统11 入库管理(FormStorageIn)原创 2025-04-23 00:30:00 · 454 阅读 · 0 评论 -
20.4 显示数据库数据
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。原创 2025-04-23 00:15:00 · 2218 阅读 · 0 评论 -
20.3 使用技巧10
虽然DataGridView中列可以设置为DataGridViewCheckBoxColumn,但是列表头是没有复选框的。可以将CheckBox控件放置在列表头位置,且当该复选框勾选/不勾选时,模拟实现全选/全不选。【项目:code20A-003】单元格点击使用日期选择控件。设置全选/全不选,同时设置单元格对应的背景色和前景色。设置勾选/不勾选时dgv中单元格颜色。增加数据、增加表头的选择框。复选框勾选/不勾选时的操作。获得单元格显示区域的矩形。学习更多C#知识,请参看。原创 2025-04-22 00:30:00 · 853 阅读 · 0 评论 -
20.3 使用技巧9
有时为了输入方便或者固定日期格式,可以考虑点击DataGridView中某个单元格时出现日期选择控件,避免用户手动输入和格式不一的麻烦。当日期选择控件下拉日历被关闭并消失时调用 dtpCloseUp 方法。【项目:code20A-002】单元格点击使用日期选择控件。当日期选择控件失去焦点时调用 dtpLostFocus 方法。再次判断选中的单元格是否在需要设置日期的列。当前点击的单元格的位置和大小。设置日期选择控件的位置和大小。设置单元格文本为选中的日期。设置日期选择控件不可见。日期选择控件设置焦点。原创 2025-04-22 00:15:00 · 1878 阅读 · 0 评论 -
20.3 使用技巧8
当使用DataGridView时会发现,这个控件并不像别的控件一样在【属性】窗口里可以设置BackgroundImage(背景图片)属性。虽然DataGridView继承自Control类,Control类有BackgroundImage属性,在代码中可以设置DataGridView的BackgroundImage属性,但是运行时并不会显示设置的背景图片。DataGridView,重写DataGridView的PaintBackground方法,同时还要增加一个方法使单元格透明。学习更多C#知识,请参看。原创 2025-04-21 00:30:00 · 1173 阅读 · 0 评论 -
20.3 使用技巧7
在实际工作中,为了防止用户乱填写数据,开发者往往需要给出固定的几个值,用户只能在那几个值里面选择,在DataGridView中可以通过设置DataGridViewComboBoxCell来实现,但是一列的下拉框单元格,没有文本单元格视觉效果那么好,造成用户体验并不是很好。2、当点击某个单元格ComboBox显示出来后,点击其它不应显示ComboBox的单元格时,ComboBox仍然还在原单元格。3、当点击某个单元格ComboBox显示出来后,也可以输入数据,而不是期望的从ComboBox中的数据。原创 2025-04-21 00:15:00 · 2018 阅读 · 0 评论 -
20.3 使用技巧6
相信读者们很快会发现有这样一个问题:当下拉框更改了值,但是第一行数据不会立即改变,只有当下拉框所在单元格失去焦点后,第一列的值才和下拉框单元格的值一致。不知道读者有没有注意过,从下拉框单元格选择的时候,总共会点三下鼠标才能选中下拉框中的一个值:第一次选中单元格,第二次打开下拉框,第三次才能选中值。很简单的实现,使用DataGridView.CellValueChanged事件即可,该事件会在单元格的值更改时发生。以上代码将在新增的下拉框列的值发生改变后,将第1列对应行的单元格的值修改为和它相同。原创 2025-04-20 12:49:48 · 1035 阅读 · 0 评论 -
20.3 使用技巧5
在上述例子中,通过列名称来处理对应的点击事件。还可以用过单元格类型来进行处理。当增加新按钮列或者超链接列后,按钮或者超链接,会发现,按钮或者超链接点击后没有反应。那么如果要点击某个按钮弹出一个对话框,或者点击某个超链接,弹出需要的网页,该如何实现呢?这就需要借助DataGridView.CellContentClick 事件,当单击单元格的内容时会触发该事件。代码判断了点击单元格的类型是否是DataGridViewButtonCell和DataGridViewLinkCell,如果是的话分别进行处理。原创 2025-04-20 12:49:32 · 1139 阅读 · 0 评论 -
20.3 使用技巧4
它们都从System.Windows.Forms.DataGridViewColumn继承而来。通常情况下增加列的方法:首先定义一个实例化的 DataGridViewTextBoxColumn,然后使用DataGridView.Columns.Add方法将该实例加入到列最后,或者使用DataGridView.Columns.Insert方法 将该实例加入到指定索引位置。原创 2025-04-18 00:30:00 · 1547 阅读 · 0 评论 -
20.3 使用技巧3
DataGridViewCell下还有DataGridViewHeaderCell单元格类型,这是专门针对行表头单元格和列表头单元格的,不能将包含数据的单元格设置为此类型,否则会出错。在运行时更改单元格类型常用的方法是直接定义某个类型单元格,然后将DataGridView中的某个单元格设置为刚才定义的变量。除了前面所讲到的在运行时增加某种类型的列,偶尔也会出现某个单元格需要修改为某种类型。将单元格(1,4)设置为下拉框类型。将单元格(1,5)设置为超链接类型。将单元格(1,6)设置为按钮类型。原创 2025-04-18 00:15:00 · 2140 阅读 · 0 评论 -
20.3 使用技巧1
当DataGridView某个列的SortMode设置为DataGridViewColumnSortMode.Automatic时,不能将DataGridView的SelectionMode设置为ColumnHeaderSelect或者FullColumnSelect。索引必须为0至行数-1,如果是不存在的行,会引发错误:索引超出范围。【项目:code20-004】隐藏或显示行、列、表头。1、隐藏或显示某行:设置行的Visible属性。2、隐藏或显示某列:设置列的Visible属性。原创 2025-04-17 00:30:00 · 714 阅读 · 0 评论 -
20.3 使用技巧2
除了列表头和行表头外,还有一个比较特殊的单元格,即位于DataGridView左上角的标题单元格,直接设置DataGridView.TopLeftHeaderCell.Value即可。一是可以通过 DataGridView.Columns[列号].HeaderCell来获得对应列的单元格,再设置该单元格的Value属性。通过 DataGridView.Rows[列号].HeaderCell来获得对应列的单元格,再设置该单元格的Value属性。例如:将第1列的列表头从"ID"修改为 "序号"原创 2025-04-17 00:15:00 · 1224 阅读 · 0 评论 -
20.2 数据操作
可以用 DataGridView.SelectedCells(DataGridView.SelectedCells.Count-1) 获得选中单元格中最右下角的那个单元格,这是一个DataGridViewCell类对象。6、当你直接用第5条的内容去获得前景色、背景色的话,你会发现获得的颜色是Empty,而获得字体之类,会产生错误:未将对象引用设置到对象的实例。调整文本字体:DataGridViewCell.Style.Font.FontFamily.Name。二是修改单元格的样式。原创 2025-04-16 00:30:00 · 1046 阅读 · 0 评论 -
20.1 DataGridView控件初步
在【DataGridView任务】菜单点击【添加列】,弹出【添加列】窗口,由于本节内容不涉及数据库,所以“数据绑定列”这一项不能选中。这里使用DataGridViewTextBoxColumn,更多列类型(ColumnType)请参看第20.3.6节。以下将演示如何在设计时添加列。学习更多C#知识,请参看。原创 2025-04-16 00:15:00 · 760 阅读 · 0 评论 -
8.8.2 Rtf文件编辑器
新建文件NToolStripMenuItem_Click(载入文件LToolStripMenuItem_Click(保存文件SToolStripMenuItem_Click(复制CToolStripMenuItem_Click(粘贴PToolStripMenuItem_Click(关于AToolStripMenuItem_Click(退出XToolStripMenuItem_Click(剪切ToolStripMenuItem_Click(图片文件|*.jpg;文件FToolStripMenuItem。原创 2025-04-15 00:30:00 · 2276 阅读 · 0 评论 -
8.8.1 简易计算器
先考虑计算器的设计,窗体上控件的摆放可以参考windows自带的最基本那种计算器。txtValue的readonly属性设置为True;按钮的FlatStyle属性设置为Popup。【项目:code8-064】一个简易计算器。请先按下等于号后继续计算"学习更多C#知识,请参看。原创 2025-04-15 00:15:00 · 740 阅读 · 0 评论 -
8.7 在运行时动态创建控件1
需要说明的是,事件方法的参数必须符合该控件事件对应的参数,如果不知道怎么写,不妨实际拖拽一个对应控件到设计窗体看看。1、声明一个需要的控件类型变量,如果要在窗体其他方法中使用该控件的事件,该变量范围必须是窗体级别。要区分具体哪个Button被按下,可以采用一个偷懒的方法,向Button的tag属性中写入对应的索引号。同实际添加的控件事件,可以通过参数sender获得这个Button(或其他动态创建的控件)的相关属性。3、设置各个控件的属性,不是每个属性都必须设置,会使用它的默认属性值;原创 2025-04-14 00:30:00 · 1045 阅读 · 0 评论 -
8.5 工具箱其它常用控件和组件
ErrorProvider组件向用户显示一个错误提示图标,指示窗体上的某个控件发生了验证错误,并提供了错误信息。在窗体上放置一个ProgressBar控件、一个Label控件和一个Button控件,放入一个Timer组件。向窗体上放置一个TextBox控件、一个Button控件、一个Timer组件和一个ErrorProvider组件。【项目:code8-059】使用ErrorProvider组件提示用户输入错误。【项目:code8-058】使用DomainUpDown控件。学习更多C#知识,请参看。原创 2025-04-14 00:15:00 · 1071 阅读 · 0 评论 -
8.4 容器3
窗体编辑模式下,可以通过ColumnCount属性和RowCount属性设置表格的列数和行数,或者通过单击Columns属性或Rows属性后面的按钮,打开【列和行样式】窗口,在这个窗口里面可以增加、删除、插入行或者列,还可以设置某行或某列的绝对或者百分比高度(宽度),这个设置同时将会影响到在窗口编辑中调整TableLayoutPanel控件大小时行列的高度和宽度。TableLayoutPanel控件有点类似Html中的Table,它只是提供行列位置,里面放置控件,需要注意的是每个单元格里面只能放一个控件。原创 2025-04-12 00:30:00 · 2134 阅读 · 0 评论
分享