第一章 WinForm窗体开发

    实例001带图像列表的系统登陆程序
    关键技术:ListView
    遇到困难:
    1、
    错误 CS0103 当前上下文中不存在名称“lv_Person” 001 C:\Users\Erato\source\repos\001\001\Form1.cs 26 活动(猜测及解决办法:要么是我打错了,要么就是还需要添加新的using,等待打开源代码确认)
    解决方法:将ListView的(Name)属性更改成lv_Person
    2、
    错误 CS1061 ‘“Form1”未包含“txt_UserName”的定义,并且找不到可接受第一个“Form1”类型参数的可访问扩展方法“txt_UserName”(是否缺少 using 指令或程序集引用?) 001 C:\Users\Erato\source\repos\001\001\Form1.cs 53 活动(这个可能是真的缺少using)
    解决方法:例子抄到一半就懂了,UserName应该是用户名后的TextBox,查源代码果然如此
    3、
    错误 CS1503 参数 1: 无法从“System.Data.DataRow”转换为“System.Data.DataTable” 001 C:\Users\Erato\source\repos\001\001\Form1.cs 55 活动(事实上不知道错在什么地方,等看看改动了哪里我就知道是怎么回事了)
    解决方法:打错了一个字母
    4、
    错误 CS0103 当前上下文中不存在名称“imageList1” 001 C:\Users\Erato\source\repos\001\001\Form1.cs 24 活动(这是什么东西我也完全不晓得,反正就是不存在这个东西)
    解决方法:在ListView的LargeImageList属性中添加imageList1,搜索得知,先添加组件imageList,再从ListView的LargeImageList中添加imageList1
    最终效果:
    image.png
    代码如下:

    1. using System;
    2. using System.Data;
    3. using System.Windows.Forms;
    4. namespace _001
    5. {
    6. public partial class Form1 : Form
    7. {
    8. public Form1()
    9. {
    10. InitializeComponent();
    11. }
    12. DataTable dt = new DataTable();
    13. private void Form1_Load(object sender, EventArgs e)
    14. {
    15. lv_Person.View = View.LargeIcon;
    16. lv_Person.LargeImageList = imageList1;
    17. DataColumn column = new DataColumn();
    18. column.DataType =
    19. System.Type.GetType("System.String");
    20. column.ColumnName = "userName";
    21. dt.Columns.Add(column);
    22. }
    23. private void Method(DataTable dt)
    24. {
    25. lv_Person.Items.Clear();
    26. for (int j = 0; j < dt.Rows.Count; j ++)
    27. {
    28. if (j % 2 == 0)
    29. {
    30. lv_Person.Items.Add(
    31. dt.Rows[j][0].ToString(), 0);
    32. }
    33. else
    34. {
    35. lv_Person.Items.Add(
    36. dt.Rows[j][0].ToString(), 1);
    37. }
    38. }
    39. }
    40. private void button2_Click(object sender, EventArgs e)
    41. {
    42. this.Close();
    43. }
    44. private void button1_Click(object sender, EventArgs e)
    45. {
    46. DataRow dr;
    47. dr = dt.NewRow();
    48. dr["userName"] = this.txt_UserName.Text;
    49. dt.Rows.Add(dr);
    50. Method(dt);
    51. }
    52. }
    53. }

    本次小结:
    1、demo里关键字是什么不要紧,先搞清楚这是用来干什么的,再按功能找,总能找到。
    2、目前没有理解这个demo到底有什么作用0.0

    实例002使用Timer组件实现冬奥会倒计时
    关键技术:Timer组件的Enabled属性
    遇到困难:
    1、
    错误 CS0103 当前上下文中不存在名称“DateAndTime” 002 C:\Users\Erato\source\repos\002\002\Form1.cs 24 活动(与下述一共三个错误一起,怀疑是缺少什么方法)
    解决办法:看过源代码后确认,需要添加using Microsoft.VisualBasic,但是不知道为什么依旧报错,再通过小灯泡点击使用using Microsoft.VisualBasic后启用了,怀疑自己打错字母
    2、
    错误 CS0103 当前上下文中不存在名称“FirstDayOfWeek” 002 C:\Users\Erato\source\repos\002\002\Form1.cs 24 活动
    解决办法:同上
    3、
    错误 CS0103 当前上下文中不存在名称“FirstWeekOfYear” 002 C:\Users\Erato\source\repos\002\002\Form1.cs 24 活动
    解决办法:同上
    4、
    错误 CS0103 当前上下文中不存在名称“TextBox1” 002 C:\Users\Erato\source\repos\002\002\Form1.cs 30 活动(在这个时候发现testbox数量超过窗体上限了,猜测此处textbox1是冬奥会时间)
    解决办法:当前时间改为textBox1,冬奥会时间改为textbox2
    **
    最终效果:

    image.png

    代码如下:

    1. using System;
    2. using System.Windows.Forms;
    3. using Microsoft.VisualBasic;
    4. namespace _002
    5. {
    6. public partial class Form1 : Form
    7. {
    8. public Form1()
    9. {
    10. InitializeComponent();
    11. }
    12. private void Form1_Load(object sender, EventArgs e)
    13. {
    14. textBox2.Text = "2020/2/4 00:00:00" + "星期五";
    15. timer1.Enabled = true;
    16. }
    17. private void timer1_Tick(object sender, EventArgs e)
    18. {
    19. DateTime get_time1 = DateTime.Now;
    20. DateTime sta_ontome1 = Convert.ToDateTime(Convert.ToDateTime("2020-2-4 00:00:00"));
    21. textYear.Text = DateAndTime.DateDiff("y", get_time1, sta_ontome1, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays).ToString();
    22. textMonth.Text = DateAndTime.DateDiff("m", get_time1, sta_ontome1, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays).ToString();
    23. textDay.Text = DateAndTime.DateDiff("d", get_time1, sta_ontome1, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays).ToString();
    24. textHour.Text = DateAndTime.DateDiff("h", get_time1, sta_ontome1, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays).ToString();
    25. textmintue.Text = DateAndTime.DateDiff("n", get_time1, sta_ontome1, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays).ToString();
    26. textsecon.Text = DateAndTime.DateDiff("s", get_time1, sta_ontome1, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays).ToString();
    27. textBox1.Text = DateTime.Now.ToString();
    28. }
    29. }
    30. }

    本次小结:

    1、应该先理解关键代码的意义再开始启用控件修改属性

    2、应当尽可能多熟悉各类using功能

    实例003自定义最大化、最小化和关闭按钮

    关键技术:WindowState

    遇到困难:
    1、
    错误 CS0120 对象引用对于非静态的字段、方法或属性“Form.WindowState”是必需的 003 C:\Users\Erato\source\repos\003\003\Form1.cs 27 活动(怀疑与困难3是同一类困难,可能需要定义特定方法解决问题,经验证,放在主函数也不行)

    2、
    错误 CS0201 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句 003 C:\Users\Erato\source\repos\003\003\Form1.cs 34 活动(。。。)
    解决方法:删掉一个=
    3、
    错误 CS0120 对象引用对于非静态的字段、方法或属性“Form.Close()”是必需的 003 C:\Users\Erato\source\repos\003\003\Form1.cs 44 活动(同1)

    4、
    确定使用的图片以后为了完整显示图片没办法调整picturebox的像素大小,图片有白边(怀疑并没有调整的办法,只有通过图片素材来解决,如果图片格式为png则没有白边)
    解决方法:换图片,或者**

    5、
    源代码中窗体完全是自己设计的,原先的最大化最小化退出三个按钮不存在,怀疑还需要用到其他知识
    解决方法:在窗体属性当中找到MaximizeBox和MinimizeBox,接修改为False即可使最大化和最小化按钮消失,但并未解决问题,查阅资料发现,将窗体的FormBorderStyle属性设置为None,设置后窗体的标题栏将消失不显示

    6、
    未知原因无法调用Resources中的图片,定义属性字段以后不发生报错,但还是无法调用图片
    解决方法:未知

    最终效果:
    image.png
    未能实现预期效果,未能解决问题

    代码如下:

    1. namespace _003
    2. {
    3. public partial class Form_Main : Form
    4. {
    5. public Form_Main()
    6. {
    7. InitializeComponent();
    8. }
    9. private void Form1_Load(object sender, EventArgs e)
    10. {
    11. panel_Title.BackgroundImage = Resources.登录界面标题;
    12. panel_All.BackgroundImage = Resources.登陆界面下面;
    13. pictureBox_Close.Image = null;
    14. pictureBox_Close.Image = Resources.关闭按钮;
    15. pictureBox_Max.Image = null;
    16. pictureBox_Max.Image = Resources.最大化按钮;
    17. pictureBox_Min.Image = null;
    18. pictureBox_Min.Image = Resources.最小化按钮;
    19. }
    20. public void FrmClickMeans(Form Frm_Tem, int n)
    21. {
    22. switch (n)
    23. {
    24. case 0:
    25. Frm_Tem.WindowState = FormWindowState.Minimized;
    26. break;
    27. case 1:
    28. if (Frm_Tem.WindowState == FormWindowState.Maximized)
    29. {
    30. Frm_Tem.WindowState = FormWindowState.Normal;
    31. }
    32. else
    33. {
    34. Frm_Tem.WindowState = FormWindowState.Maximized;
    35. }
    36. break;
    37. case 2:
    38. Frm_Tem.Close();
    39. break;
    40. }
    41. }
    42. public static PictureBox Tem_PictB = new PictureBox();
    43. public void ImageSwitch(object sender, int n, int ns)
    44. {
    45. Tem_PictB = (PictureBox)sender;
    46. switch (n)
    47. {
    48. case 0:
    49. Tem_PictB.Image = null;
    50. if (ns == 0)
    51. {
    52. Tem_PictB.Image = Resources.最小化变色;
    53. }
    54. if (ns == 1)
    55. {
    56. Tem_PictB.Image = Resources.最小化按钮;
    57. }
    58. break;
    59. case 1:
    60. Tem_PictB.Image = null;
    61. if (ns == 0)
    62. {
    63. Tem_PictB.Image = Resources.最大化变色;
    64. }
    65. if (ns == 1)
    66. {
    67. Tem_PictB.Image = Resources.最大化按钮;
    68. }
    69. break;
    70. case 2:
    71. Tem_PictB.Image = null;
    72. if (ns == 0)
    73. {
    74. Tem_PictB.Image = Resources.关闭变色;
    75. }
    76. if (ns == 1)
    77. {
    78. Tem_PictB.Image = Resources.关闭按钮;
    79. }
    80. break;
    81. }
    82. }
    83. private void pictureBox_Close_Click(object sender, EventArgs e)
    84. {
    85. FrmClickMeans(this, Convert.ToInt32(((PictureBox)sender).Tag.ToString()));
    86. }
    87. private void pictureBox_Close_MouseEnter(object sender, EventArgs e)
    88. {
    89. ImageSwitch(this, Convert.ToInt32(((PictureBox)sender).Tag.ToString()), 0);
    90. }
    91. private void pictureBox_Close_MouseLeave(object sender, EventArgs e)
    92. {
    93. ImageSwitch(this, Convert.ToInt32(((PictureBox)sender).Tag.ToString()), 1);
    94. }
    95. }
    96. }

    本次小结:
    未完成预期目标,不想写小结

    实例004图形化的导航界面

    关键技术:Button控件的BackColor属性、FlatStyle属性和TextImageRelation属性

    遇到困难:

    最终效果:

    代码如下:

    本次小结:

    实例005字母与ASCII码的转换

    关键技术:

    遇到困难:

    最终效果:

    代码如下:

    本次小结:

    实例006

    关键技术:

    遇到困难:

    最终效果:

    代码如下:

    本次小结:
    第二章文件操作

    第三章图形图像及打印

    第四章系统及注册表操作

    第五章数据库操作应用

    第六章网络安全及硬件控制