C#学习
引言
0.0 C# 在visual studio 2019运行环境下代码结构的介绍
1.基本的数据类型
1.1创建C#控制台应用程序并运行
1.点击文件->新建->项目
2.选择控制台应用程序->点击下一步->
3.可更改项目名称->项目解决方案->选择合适的架构->点击创建
4.打开后键入以下程序,注释就是数据类型的解释以及注意事项
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//1.using 使用命名空间 使用一些类库文件
//namespace:命名空间:
//命名空间:用来区分类
namespace ConsoleApp1
{//class就是类
class Program
{
//static:静态的;void:不返回任何类型;Main:门;string[] args:参数;
//程序里面也有一个门;不能动,就是程序的入口;参数就是门卫,你需要登记
static void Main(string[] args)
{
//数据类型 ;
int age = 18;
float height = 1.8F;//float类型后需要加F;
double weight = 120;//c#是默认小数是double类型
char flag = 'Y';//字符类型,使用单引号把数据引起来
bool biaozhi = true; //bool:真假型
//字符串类型:
String name = "zhangsan";//字符串是双引号;
//WriteLine换行 Write不换行
Console.Write(name);
Console.Write(age);
}
}
}
5.输入以上程序后点击运行
如何运行:顶部菜单调试里面有一个“启动调试”,快捷键:F5;但是会一闪而过
不想一闪而过:Ctrl+F5L:开始执行不调试
1.2在同一个解决方案里添加新的控制台应用程序
1.光标点击解决方案->添加->新建项目->弹出控制台进行操作即可
1.3 基本的输入输出语句
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
//1.定义变量并赋值;
Console.Write("请输入圆的半径:");
double r;
r = Console.Read();
const double PI = 3.1415926;//常量使用const定义;常量名:大写;
double s = PI * r * r;
Console.WriteLine(r + "的面积是" + s);
}
}
}
1.4 占位符
之前都是使用+连接变量和字符串;
{0},{1}–>变量1,变量2
输出规则:见代码片段
关键词:int.Parse(Console.ReadLine()); 读取的数据强制转化为32整型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
//占位符:两个数相加,减乘除
int num1, num2;
Console.WriteLine("请输入数字1:");
num1 = int.Parse(Console.ReadLine()); //将字符串转换成int类型;
Console.WriteLine("请输入数字2:");
num2 = int.Parse(Console.ReadLine()); //将字符串转换成int类型;
//2.输出规则:{0}对应的是第一个变量,{1}对应的是第二个变量
Console.WriteLine("{0}+{1}={2}", num1, num2, (num1 + num2));
Console.WriteLine("{0}*{1}={2}", num1, num2, (num1 * num2));
// Console.ReadLine(); //加上这个是防止命令行窗口闪现
}
}
}
1.5 字符串和强制类型转换
1.5.1字符串相关的操作
关键操作:是否包含,查找,替换,插入,删除,大小写转换,字符串的格式化
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
String str = "今天是个好个天气,我被老师批评了一顿,窝嫩叠";
Console.WriteLine(str.Contains("窝嫩叠"));//返回是否包含该字符串,TRUE包含 False相反
Console.WriteLine(str.EndsWith("嫩叠"));//返回是否以什么什么结尾
Console.WriteLine(str.StartsWith("今天"));//返回是否以什么什么开头
Console.WriteLine(str.IndexOf("个"));//返回这个字符在第几个 第一次出现的位置
Console.WriteLine(str.Insert(3, "晴天真是"));//在指定的位置插入字符
Console.WriteLine(str.LastIndexOf("个"));//返回这个字符在第几个 最后一次出现的位置
Console.WriteLine(str.Remove(3));//删除位置3之后的所有字符串
Console.WriteLine(str.Replace("窝嫩叠", "窝嫩爷")); //相应的字符串替换 窝嫩叠 被替换为 窝嫩爷
Console.WriteLine("Abcd".ToUpper());//转换为大写
Console.WriteLine("ABCd".ToLower());//转化为小写
Console.WriteLine(str.Substring(3, 5));//3:起始位置 5;截取的长度
//格式化字符串:{0},{1},{2}
//Format(字符串加占位符,值1,值2,...,值n)
String name = "赵俊杰";
int age = 88;
String str2 = String.Format("我们的班长是{0},年龄:{1}", name, age);
//整出来的这个格式化的字符串,控制台可以用,游戏也能用;winform也能用;
//传值更为方便
Console.WriteLine(str2);
Console.Read();
}
}
}
1.5.2 类型转换
1.类型转换的形象图解
隐式转换:从小到大可以自动转换 例如:int->double 不会报错
若从大到小转换就会报错 例如:double->int 无法编译 这时就需要强制(显示)转换
显示转换:强制转换,见代码
类型转换:字符串转化为整型 int.Parse(s) s为字符串 见代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp6
{
/// <summary>
/// 类型转换:C#类型;整型->浮点型;字符串类型
/// </summary>
class Program
{
static void Main(string[] args)
{
//1.隐式转换(自动转换)
int age = 20;
double age2 = age;
Console.WriteLine(age);
Console.WriteLine(age2);
//2.显示转换
double height = 20.89;
int height2 = (int)height;//因为double类型比较大
//在大的类型前面加一个小类型
Console.WriteLine(height);
Console.WriteLine(height2);//出现的问题就是数据丢失
//3.类型转换:
String s = "22";
int num2 = int.Parse(s);//parse(字符串参数)
Console.WriteLine(num2);
int num3 = Convert.ToInt32(s);
Console.WriteLine(num3); //结果输出为22
}
}
}
1.6数组格式使用
语法格式:数据类型[] 数组名 = new 数据类型长度[]
int[] age = new int[3];//数组的长度为3;
数组的赋值:
数组名[下标] = 值
score[0] = 88;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
//1.定义数组长度
String[] names = new String[5];
int[] salary = new int[5];
// String[] names = new String[5]{"上的","发顺丰","的发射点","阿达","放大"}; //花括号定义数组
// for (int i = 0; i < names.Length; i++)
// {
// Console.WriteLine(names[i]);
// }
//2.输入
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine("请输入第{0}个同学的名字:", i + 1);
names[i] = Console.ReadLine();
Console.WriteLine("请输入第{0}个同学的工资:", i + 1);
salary[i] = int.Parse(Console.ReadLine()); //int.Parse(s) 类型转换 将字符型转换为整型
}
//3.输出
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine("名字:{0} 工资:{1}", names[i],salary[i]); //用占位符 输出名字和工资
}
}
}
}
2.窗体控件
2.1窗体的概念,窗体应用的创建
windows:视窗;可视化窗口;
2.创建新项目->选择windows窗体应用(.NET Framework)->点击下一步->写上相应的名字和存储位置即可
2.2在解决方案里新建窗体应用并更改一些属性
1.点击①-项目名>点击②添加->点击③windows窗体->点击④更改window窗体应用的名字
2.窗体应用的很多东西都可以在属性里改 (右键点击窗体->点击属性即可更改相关内容如窗体的标题text 和BackColor)
3.要想启动所写的窗体 需要 在主程序里 new上窗体应用
4.窗体的属性里也可以设置窗体的启动位置:startPosition:CenterScreen 各种东西都可以使用 ;MaxmizeBox:最大化按钮是否可用
2.3 做一个登录界面
2.3.1 工具箱
1.调出工具箱界面->点击菜单栏中的视图->点击工具箱 即可看到工具箱
2.工具箱的作用 可以添加各种各样的控件 比如 在①处输入label,即可调出label控件 到窗体 ,右键单击即可更改控件的各种属性。
①:工具箱添加搜索栏
②:选择控件 按住crtl 可连续添加控件
③:label控件
④:txtBox控件
⑤:控件的属性,(控件的颜色,位置,名字,以及控件文本显示的内容,注意控件名字和控件文本显示的内容是不一样的)
按下登录按键后调用的函数
private void button1_Click(object sender, EventArgs e)
{
// MessageBox.Show(txtName.Text);//弹框;
// MessageBox.Show(txtPwd.Text);//弹框;
String name = txtName.Text;//定义两个变量,接受用户名文本框和密码框
String pwd = txtPwd.Text;
if (name.Equals("83193980") && pwd.Equals("88889999"))
{
MessageBox.Show("登录成功");
}
else
{
MessageBox.Show("登录失败");
}
}
2.4列表框和列表组合
2.4.1列表框
1.选中解决方案下的项目->右键单击->添加窗体应用->更改名字为firmListBox创建即可
2.在工具箱中输入 ListBox 在窗体中调出列表框 右击键单击列表框 可以查看属性
3.点击窗体 进入事件加载(firmListBox_Load()),可以加载如下代码。
重点查看代码: listBox1.Items.Add(“青铜”); listBox1.SelectedIndex listBox1.Items.Count listBox1.SelectedItem
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class firmListBox : Form
{
public firmListBox()
{
InitializeComponent();
}
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
/// <summary>
/// Load:加载事件;还没有显示出来,先加载到内存;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void firmListBox_Load(object sender, EventArgs e)
{
//属性
//1.Item:项目 items:所有项目的集合
listBox1.Items.Add("青铜");
listBox1.Items.Add("白银");
listBox1.Items.Add("黄金");
listBox1.Items.Add("钻石");
listBox1.Items.Add("王者");
//2.
}
private void label1_Click(object sender, EventArgs e)
{
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
/// <summary>
/// 在按钮这里双击会出现Click
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnXuanze_Click(object sender, EventArgs e)
{
MessageBox.Show("选择的索引:" + listBox1.SelectedIndex);
//没有选择的时候是-1:从;0开始;到items的长度-1
MessageBox.Show("列表项目的个数:" + listBox1.Items.Count); //个数;
MessageBox.Show("你选择的是:" + listBox1.SelectedItem); //选择的项目
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
执行效果如下,注意在执行之前要在主函数里 添加要执行该窗体
2.4.2 列表组合
同2.4.1工具栏添加相应控件 注意列表组合控件里要想选项可以不被改变需要在属性里将DropDownStyle里的东西改为
DropDownList.
运行代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class frmCombox : Form
{
public frmCombox()
{
InitializeComponent();
}
/// <summary>
/// 窗体的加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void frmCombox_Load(object sender, EventArgs e) //comboBox控件加载事件
{
comboBox1.Items.Add("省长");
comboBox1.Items.Add("市长");
comboBox1.Items.Add("县长");
comboBox1.Items.Add("村长");
comboBox1.Items.Add("组长");
}
private void label1_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
}
}
}
运行结果:
2.5 图片框
2.5.1工具箱相关控件
1.Panel
2.PictureBox
添加顺序:先添加Panel 再在Panel上添加PictureBox 如图 大框为Panel 里面的PictureBox可以添加图片
2.5.2做个相册
相关知识点:如何在窗体上按照时间顺序显示多个图片
1.点击解决方案下的项目(windowsFormsApp1)
2.右键单击 弹出如下界面 点击 在文件资源管理器里打开文件夹
3.打开文件夹后弹出以下界面 依次点击 bin->debug->img(需要新建)->在img里添加要显示的图片->更改图片的名字便于用字符串显示
4.找到一个按钮控件添加如下代码
private void button1_Click(object sender, EventArgs e)
{
//有这样一个属性;
// MessageBox.Show(pictureBox1.Image);
i++;
//pictureBox1.ImageLocation = "img/bg2.jpg";
pictureBox1.ImageLocation = String.Format("img/bg{0}.jpg", i); //ImageLocation属性添加图片路径
if (i == 3)
{
i = 0;
}
}
2.6 关于C#(vs2019)代码结构
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//1.using 使用命名空间一些类库文件
//2.namespace:命名空间; 区分不同的空间
namespace WindowsFormsApp1
{
//public:公共 partial:部分 class 类;
public partial class frmPic : Form
{
2.7 窗体间的调用、消息框的使用
功能描述:一个登录界面为窗体1,一个相册界面为窗体2,窗体1登录成功后跳转到窗体2界面,并且隐藏窗体1,窗体2关闭后自动返回窗体1。
调用窗体的相关代码:
new一个窗体控件,然后显示即可。
Form1 myPic = new Form1(); //对于新窗体Form1 需要new一个窗体过来
myPic.Show();//显示一下就可以
this.Hide(); //隐藏这个窗口
窗体的事件添加可以点击 窗体属性栏中的闪电标识。双击点进去 就可看见以下代码。
private void frmPic_FormClosed(object sender, FormClosedEventArgs e)
{
Form1 myPic = new Form1(); //对于窗体需要new一个窗体过来
myPic.Show();//显示一下就可以
this.Hide(); //隐藏这个窗口
//也可以用 Application.exit();应用程序退出。
//还可以关闭窗口时弹出消息框
//关闭时弹出对话框 是否关闭
DialogResult result = MessageBox.Show("是否关闭");
Console.WriteLine(result);
}
2.8 消息框的使用
步骤:1.右键单击窗体–>选择属性–>找到闪电箭头(表示事件)–>添加 FormClosing(见下图 双击就可进入添加代码的界面)
2.添加如下代码:
代码e: 事件参数对象。见代码第一行 的参数 FormClosingEventArgs e
e.Cancel 在事件 Form2_FormClosed中不能用,因为 该事件表示已经取消,再次询问是否取消就没有意义了。
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
//MessageBox:消息框 +20多个重载
DialogResult result = MessageBox.Show("窝嫩爹", "提示消息", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
//要关的事件;取消属性为false;就是关了
e.Cancel = false; //e.Cancel在Form2_FormClosed中不能使用,需要在Form2_FormClosing中使用
}
else
{
e.Cancel = true;
}
}
3 链接数据库
3.1数据库链接的准备工作
数据库:MySql SqlSever
ADO.NET 数据库连接工作 C#是.NET平台中的一门语言
access database object
在MySql中的用法
Connection:数据库连接对象 MySqlConnection
C#连接数据库 是为了对数据进行增 删 改 查 MySqlCommand
Command:sql命令执行对象(增删改) MySqlDataAdapater
DataAdapater:数据适配器(数据查询对象)
MySql 是个服务器 是独立的一台机器 需要用网络连接 所以需要有自己的地址
连接字符串: server = localhost port = 3306 database = smx_db(连接哪个数据库) uid=root pwd=123456
服务器在哪,访问服务器中的哪个数据库 以什么身份来连(账户和密码)
open() 打开链接
close() 关闭链接