C#觉得好玩的笔记(---将不断更新哦---)
2017-10-18 00:18
190 查看
使用Console.Read( )方法读输入并不立即响应,而是要等到用户按下enter键。如果要即时做出响 应,可以改用Console的ReadKey方法,这时的比较输出代码可换成:ConsolKeyInfok =Console.ReadKey();
C#规定,一个类只能有一个基类
IndexOfAny()和LastIndexOfAny()查找对象是指定字符串数组中的任意字符
数值转换有一个原则:从低精度类型到高精度类型可进行隐式转换,而
从高精度类型到低精度类型 必须进行显式转换;从精度相同的无符号
数值类型向有符号数值类型的转换也只能显式转换。
C#支持两个预定义的引用类型object和string。
在应用程序执行的过程中,引用类型使用new关键字创建对象实例,并存储在堆中。堆是一种由系统 弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象的访问。
所有被称为“类”的都是引用类型,例如
Student student1= new Student();
Student student2= student1;
装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型
利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类 型链接起来
计算器的动态编译器:博客:http://www.cnblogs.com/youring2/archive/2012/12/17/2822104.html
DateTime是C#的一种表示日期和时间的类型,如获取当前的时间: DateTime.Now.ToString(“YYYY-MM-DD-HH-mm-ss”);
还有一种类型是:System.TimeSpan,可用于两个DateTime类型的数运算,如: System.TimeSpan s = DateTimed1-DateTime d2;
抽象类可以有抽象方法和实体方法,但接口都public,只能抽象方法,所有所有方法都不用加作用域public 必须要有class实现
结构体是值类型,class是引用类型
实例方法,能调用静态方法,也能调用实例方法;但是静态方法之只能调用静态方法,不能调用实例方法,必须要new一个实例对象
Array.Sort([] d):对各类型数组进行升序排序,Array.Reverse([] d)对各类型数组进行倒序
int?:表示可空类型,就是一种特殊的值类型,它的值可以为null.
int a=null;(错)
int? a=null(正确)
ArrayList.Capacity容量不断改变,根据动态数组的个数进行分配容量。
输出当前时间和主机名字
Console.WriteLine(DateTime.Now.ToString()+’\t’+Environment.MachineName);
CRC算法实现
public static string CRCCalc(string data)
{
string[] datas = data.Split(’ ‘);
List bytedata = new List();
if (redata[1].Length < 2)
redata[1] = “0” + redata[1];
if (redata[0].Length < 2)
redata[0] = “0” + redata[0];
21、 另一种更方法
22、 當SerialPort已經開啟以後就使用SerialPort.Write 方法 (Byte[], Int32, Int32)將前面的Byte陣列送出去,這個方法的參數1是你所要傳送的資料、參數二是你要從這個陣列的哪個位置開始送,參數三則是你要送的資料有多長。comport.Write(buffer, 0, buffer.Length) 這個寫法就是代表要送的資料存在buffer這個陣列中;從陣列的第一個元素 (它的Index是0);整個buffer我都要送,所以直接用buffer.Length,要多長就多長這樣。
24、判断光标焦点在是否在 textbox:textbox.Focused ; 设置光标焦点:textbox.Focus();
25、关于c#注册表的问题,在Microsoft.Win32的命名空间里,主要是Registry类、RegistryKey类。
一般机器上的软件注册表都在Registry.LocaMachine这个主键
注册在当前用户里,如果使用管理员运行该软件才能注册在LocalMachine里,所以本地用户就随便注册在CurrentUser就可以了。
26、密码的加密解密方法:https://www.cnblogs.com/guohu/p/5562759.html
RSA加密算法
在谈RSA加密算法之前,我们需要先了解下两个专业名词,对称加密和非对称加密。
对称加密即:含有一个称为密钥的东西,在消息发送前使用密钥对消息进行加密,在对方收到消息之后,使用相同的密钥进行解密
非对称加密即:加密和解密使用不同的密钥的一类加密算法。这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进行解密操作(即使密钥A也无法解密),相反,使用了密钥B加密数据得到的密文,只有密钥A可以解密。这两个密钥分别称为私钥和公钥,顾名思义,私钥就是你个人保留,不能公开的密钥,而公钥则是公开给加解密操作的另一方的。根据不同用途,对数据进行加密所使用的密钥也不相同(有时用公钥加密,私钥解密;有时相反用私钥加密,公钥解密)。非对称加密的代表算法是RSA算法。
了解了这两个名词下面来讲,RSA加密算法。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,多用于数据加密和数字签名。虽然有这么大的影响力,但是同时它也有一些弊端,它产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密,分组长度太大等。
下面通过示例演示使用RSA加密、解密,引用名称空间System.Security.Cryptography;
27、关于路径名,最好就是在路径名前面加上@,如果不加@,那么路径名上的 ‘\’ 要换成 ‘\’ 才行 ,原因是 ‘\’ 会被当作字符串的一部分,而 ‘\’ 才被识别为转义字符:路径
28、GDI:关于graphics、brush、bitmap、image的关系
29、关于BitMap,原始需要占用很多字节,经过RLE压缩算法得到了很好的解决办法。
而RLE压缩算法的经历:
1、原始RLE方法(未压缩前:A-A-A-A-A-B-B-C-D,压缩后:5-A-2-B-1-C-1-D)
2、但是第一种方法最坏情况下就是所有的数据都不连续重复,则压缩后的数据量会增大一倍。实现的办法只能是,在数据压缩的时候如果发现数据的高两位是1只能再在该数据字节前面插入数据重数字节,置其值为1(此时由于高两位作为标记位已经置为1,故这里实际存储的是0XC1)。这样这个改进的RLE算法就完成了,其平均压缩率也比原始RLE算法更高,但是相对的压缩速度就稍微慢了。同样的与原始RLE算法一样也有最大长度问题,处理方法与原始RLE一样。(未压缩前:A-A-A-A-A-B-B-C-D,压缩后:5-A-2-B-C-D)
3、原始的RLE算法和改进后的RLE算法对于连续出现的不重复数据的处理方式都是一个一个处理的,没有把不重复数据作为一个整体进行处理。对于连续重复的数据,这个数字表示需要重复的次数,对于连续不重复数据,这个数字表示连续不重复数据块的长度。需要注意的是,只有重复次数超过2的数据才被认为是连续重复数据,因为如果数据的重复次数是2,压缩后加上标志字节后总的长度没有变化,因此没有必要处理。(未压缩前:A-A-A-A-A-B-B-C-D,压缩后:5-A-4-B-B-C-D)
1、Point类中:X和Y都是int型;PointF类中:X和Y都是float型
3、获取鼠标位置
(1)Control.MousePosition:是整个屏幕鼠标的位置,左上角(0,0)
(2)Form.EventArgs e.Location:是控件里面鼠标的位置,控件的左上角(0,0)
5、返回上一层文件夹: ..\
private string pictureRoad = @”……\Tempature.jpg”; //已经返回了三层
C#规定,一个类只能有一个基类
IndexOfAny()和LastIndexOfAny()查找对象是指定字符串数组中的任意字符
数值转换有一个原则:从低精度类型到高精度类型可进行隐式转换,而
从高精度类型到低精度类型 必须进行显式转换;从精度相同的无符号
数值类型向有符号数值类型的转换也只能显式转换。
C#支持两个预定义的引用类型object和string。
在应用程序执行的过程中,引用类型使用new关键字创建对象实例,并存储在堆中。堆是一种由系统 弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象的访问。
所有被称为“类”的都是引用类型,例如
Student student1= new Student();
Student student2= student1;
装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型
利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类 型链接起来
计算器的动态编译器:博客:http://www.cnblogs.com/youring2/archive/2012/12/17/2822104.html
DateTime是C#的一种表示日期和时间的类型,如获取当前的时间: DateTime.Now.ToString(“YYYY-MM-DD-HH-mm-ss”);
还有一种类型是:System.TimeSpan,可用于两个DateTime类型的数运算,如: System.TimeSpan s = DateTimed1-DateTime d2;
9. 数组的类型转换 public static int StrToInt(string str) { return int.Parse(str); } string[] arrs = new string[] { "100", "300", "200" }; int[] arri = Array.ConvertAll(arrs, new Converter<string, int>(StrToInt));
抽象类可以有抽象方法和实体方法,但接口都public,只能抽象方法,所有所有方法都不用加作用域public 必须要有class实现
结构体是值类型,class是引用类型
实例方法,能调用静态方法,也能调用实例方法;但是静态方法之只能调用静态方法,不能调用实例方法,必须要new一个实例对象
Array.Sort([] d):对各类型数组进行升序排序,Array.Reverse([] d)对各类型数组进行倒序
int?:表示可空类型,就是一种特殊的值类型,它的值可以为null.
int a=null;(错)
int? a=null(正确)
ArrayList.Capacity容量不断改变,根据动态数组的个数进行分配容量。
输出当前时间和主机名字
Console.WriteLine(DateTime.Now.ToString()+’\t’+Environment.MachineName);
17. C#委托对象是真正的对象,C/C++函数指针只是函数入口地址: http://www.cnblogs.com/weidagang2046/archive/2009/08/09/1542248.html http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html0 18. 当子类继承有参构造函数的父类时候,必须用base关键字进行构造函数的派生。 19. MySql里面 char是一种固定长度的类型,varchar则是一种可变长度的类型
CRC算法实现
public static string CRCCalc(string data)
{
string[] datas = data.Split(’ ‘);
List bytedata = new List();
foreach (string str in datas) { b 10b0c ytedata.Add(byte.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier)); } byte[] crcbuf = bytedata.ToArray(); //计算并填写CRC校验码 int crc = 0xffff; int len = crcbuf.Length; for (int n = 0; n < len; n++) { byte i; crc = crc ^ crcbuf ; for (i = 0; i < 8; i++) { int TT; TT = crc & 1; crc = crc >> 1; crc = crc & 0x7fff; if (TT == 1) { crc = crc ^ 0xa001; } crc = crc & 0xffff; } } string[] redata = new string[2]; redata[1] = Convert.ToString((byte)((crc >> 8) & 0xff), 16); redata[0] = Convert.ToString((byte)((crc & 0xff)), 16);
if (redata[1].Length < 2)
redata[1] = “0” + redata[1];
if (redata[0].Length < 2)
redata[0] = “0” + redata[0];
return redata[0] + " " + redata[1]; }
``` 21、C#中的ComboBox实现只能选择不能输入,且下拉框中有默认值。 // 在Designer.cs添加并修改顺序 this.comboBox1.Items.AddRange(new object[] { "4800", "9600", "19200", "38400", "57600", "115200"}); this.comboBox1.Text = this.comboBox1.Items[1].ToString(); //这个必须在Items定义下面才行,否则报错 this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
21、 另一种更方法
22、 當SerialPort已經開啟以後就使用SerialPort.Write 方法 (Byte[], Int32, Int32)將前面的Byte陣列送出去,這個方法的參數1是你所要傳送的資料、參數二是你要從這個陣列的哪個位置開始送,參數三則是你要送的資料有多長。comport.Write(buffer, 0, buffer.Length) 這個寫法就是代表要送的資料存在buffer這個陣列中;從陣列的第一個元素 (它的Index是0);整個buffer我都要送,所以直接用buffer.Length,要多長就多長這樣。
23、控件TextBox内容全选快捷键实现 private void anyTextBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if (e.KeyChar == '\x1') { ((TextBox)sender).SelectAll(); e.Handled = true; } }
24、判断光标焦点在是否在 textbox:textbox.Focused ; 设置光标焦点:textbox.Focus();
25、关于c#注册表的问题,在Microsoft.Win32的命名空间里,主要是Registry类、RegistryKey类。
一般机器上的软件注册表都在Registry.LocaMachine这个主键
注册在当前用户里,如果使用管理员运行该软件才能注册在LocalMachine里,所以本地用户就随便注册在CurrentUser就可以了。
26、密码的加密解密方法:https://www.cnblogs.com/guohu/p/5562759.html
RSA加密算法
在谈RSA加密算法之前,我们需要先了解下两个专业名词,对称加密和非对称加密。
对称加密即:含有一个称为密钥的东西,在消息发送前使用密钥对消息进行加密,在对方收到消息之后,使用相同的密钥进行解密
非对称加密即:加密和解密使用不同的密钥的一类加密算法。这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进行解密操作(即使密钥A也无法解密),相反,使用了密钥B加密数据得到的密文,只有密钥A可以解密。这两个密钥分别称为私钥和公钥,顾名思义,私钥就是你个人保留,不能公开的密钥,而公钥则是公开给加解密操作的另一方的。根据不同用途,对数据进行加密所使用的密钥也不相同(有时用公钥加密,私钥解密;有时相反用私钥加密,公钥解密)。非对称加密的代表算法是RSA算法。
了解了这两个名词下面来讲,RSA加密算法。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,多用于数据加密和数字签名。虽然有这么大的影响力,但是同时它也有一些弊端,它产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密,分组长度太大等。
下面通过示例演示使用RSA加密、解密,引用名称空间System.Security.Cryptography;
//加密 private string Encryption(string express) { CspParameters param = new CspParameters(); param.KeyContainerName = "oa_erp_dowork";//密匙容器的名称,保持加密解密一致才能解密成功 using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param)) { byte[] plaindata = Encoding.Default.GetBytes(express);//将要加密的字符串转换为字节数组 byte[] encryptdata = rsa.Encrypt(plaindata, false);//将加密后的字节数据转换为新的加密字节数组 return Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为字符串 } } //解密 private string Decrypt(string ciphertext) { CspParameters param = new CspParameters(); param.KeyContainerName = "oa_erp_dowork"; using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param)) { byte[] encryptdata = Convert.FromBase64String(ciphertext); byte[] decryptdata = rsa.Decrypt(encryptdata, false); return Encoding.Default.GetString(decryptdata); } }
//通过使用RSA加密算法产出公匙和私匙 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); using (StreamWriter sw = new StreamWriter(Server.MapPath("PublicKey.xml")))//产生公匙 { sw.WriteLine(rsa.ToXmlString(false)); } using (StreamWriter sw = new StreamWriter(Server.MapPath("PrivateKey.xml")))//产生私匙(也包含私匙) { sw.WriteLine(rsa.ToXmlString(true)); }
27、关于路径名,最好就是在路径名前面加上@,如果不加@,那么路径名上的 ‘\’ 要换成 ‘\’ 才行 ,原因是 ‘\’ 会被当作字符串的一部分,而 ‘\’ 才被识别为转义字符:路径
28、GDI:关于graphics、brush、bitmap、image的关系
29、关于BitMap,原始需要占用很多字节,经过RLE压缩算法得到了很好的解决办法。
而RLE压缩算法的经历:
1、原始RLE方法(未压缩前:A-A-A-A-A-B-B-C-D,压缩后:5-A-2-B-1-C-1-D)
2、但是第一种方法最坏情况下就是所有的数据都不连续重复,则压缩后的数据量会增大一倍。实现的办法只能是,在数据压缩的时候如果发现数据的高两位是1只能再在该数据字节前面插入数据重数字节,置其值为1(此时由于高两位作为标记位已经置为1,故这里实际存储的是0XC1)。这样这个改进的RLE算法就完成了,其平均压缩率也比原始RLE算法更高,但是相对的压缩速度就稍微慢了。同样的与原始RLE算法一样也有最大长度问题,处理方法与原始RLE一样。(未压缩前:A-A-A-A-A-B-B-C-D,压缩后:5-A-2-B-C-D)
3、原始的RLE算法和改进后的RLE算法对于连续出现的不重复数据的处理方式都是一个一个处理的,没有把不重复数据作为一个整体进行处理。对于连续重复的数据,这个数字表示需要重复的次数,对于连续不重复数据,这个数字表示连续不重复数据块的长度。需要注意的是,只有重复次数超过2的数据才被认为是连续重复数据,因为如果数据的重复次数是2,压缩后加上标志字节后总的长度没有变化,因此没有必要处理。(未压缩前:A-A-A-A-A-B-B-C-D,压缩后:5-A-4-B-B-C-D)
30、 C# 系统应用之窗体最小化至任务栏及常用操作 一.界面操作 1.创建"Windows窗体应用程序"项目,从"工具箱"中添加NotifyIcon(运行时期间在Windows任务栏右侧的通知区域显示图标).鼠标右击notifyIcon1属性,为控件属性Icon添加图标,Text属性为"CSDN". 2.添加ContextMenuStrip(当用户右击关联控件时显示快键菜单).鼠标右键contextMenuStrip1属性,进入Items添加或右键"编辑项".添加3个toolStripMenuItem,设置其Text为"显示窗体"、"隐藏窗体"、"退出".如下图所示: 3.关联系统托盘图标与右键菜单.设置notifyIcon1的ContextMenuStrip属性为contextMenuStrip1关联两个控件.运行程序,右下角任务栏的系统托盘处图标点击右键显示如下图所示: 二.窗体设置 窗体设置主要是当窗体点击"退出"按钮时,任务栏仍然显示图标且程序没有退出.设置Form1的MaximizeBox(窗体是否能最大化)属性设置为False,让其不能最大化.并为Form1添加FormClosing(当用户关闭窗体时,在窗体已关闭并制定关闭原因前发生)事件.如下图所示. 添加代码如下,主要实现的功能是当用户点击窗体"关闭"按钮或通过Alt+F4快捷关闭时,取消关闭操作且窗体隐藏,任务栏图标仍然显示: //窗体关闭前发生事件 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //窗体关闭原因为单击"关闭"按钮或Alt+F4 if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; //取消关闭操作 表现为不关闭窗体 this.Hide(); //隐藏窗体 } } 其中:FormClosingEventArgs 类为FormClosing事件提供数据,其属性Cancel获取或设置是否应取消事件的值,CloseReason获取一个值,该值指示关闭窗体的原因.(详见MSDN FormClosingEventArgs 类) 注意:添加的事件是Form_Closing-窗体关闭前发生,而不是Form_Closed窗体已关闭发生.它没有e.Cancel属性,会提示错误 "System.Windows.Forms.FormClosedEventArgs"不包含Cancel的定义. 三.系统托盘功能 常见的窗体最小化至任务栏(系统托盘)图标的功能: 1.当鼠标左键点击图标时,显示窗体. 2.当鼠标右键点击图标时,显示"显示窗体"\"隐藏窗体"\"退出"菜单栏,并有相对应的功能. 具体操作是:分别点击"显示窗体"\"隐藏窗体"\"退出"在其属性栏中添加"Click"事件.添加代码如下: //"显示窗体"单击事件 private void toolStripMenuItem1_Click(object sender, EventArgs e) { this.Show(); //窗体显示 this.WindowState = FormWindowState.Normal; //窗体状态默认大小 this.Activate(); //激活窗体给予焦点 } //"隐藏窗体"单击事件 private void toolStripMenuItem2_Click(object sender, EventArgs e) { this.Hide(); //隐藏窗体 } //"退出"单击事件 private void toolStripMenuItem3_Click(object sender, EventArgs e) { //点击"是(YES)"退出程序 if (MessageBox.Show("确定要退出程序?", "安全提示", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes) { notifyIcon1.Visible = false; //设置图标不可见 this.Close(); //关闭窗体 this.Dispose(); //释放资源 Application.Exit(); //关闭应用程序窗体 } } 其中,窗体的状态FormWindowState有Minimized(最小化)、Maximized(最大化)、Normal(默认大小).有的程序设置sizechanged事件,当用户点击"最小化"按钮窗体尺寸变化时才最小化至任务栏(系统托盘).但我认为打开程序时就有最小化图标更好,同时添加FormClosing事件更符合用户使用.点击"退出"运行结果如下图所示: 最后添加鼠标左键图标显示窗体功能.右键notifyIcon1属性,添加MouseClick(鼠标单击组件时发生)事件.添加代码如下: //鼠标左键图标事件 private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { //点击鼠标"左键"发生 if (e.Button == MouseButtons.Left) { this.Visible = true; //窗体可见 this.WindowState = FormWindowState.Normal; //窗体默认大小 this.notifyIcon1.Visible = true; //设置图标可见 } } 四.完整代码 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 WinFormMin { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //窗体关闭前发生事件 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //窗体关闭原因为单击"关闭"按钮或Alt+F4 if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; //取消关闭操作 表现为不关闭窗体 this.Hide(); //隐藏窗体 } } //"显示窗体"单击事件 private void toolStripMenuItem1_Click(object sender, EventArgs e) { this.Show(); //窗体显示 this.WindowState = FormWindowState.Normal; //窗体状态默认大小 this.Activate(); //激活窗体给予焦点 } //"隐藏窗体"单击事件 private void toolStripMenuItem2_Click(object sender, EventArgs e) { this.Hide(); //隐藏窗体 } //"退出"单击事件 private void toolStripMenuItem3_Click(object sender, EventArgs e) { //点击"是(YES)"退出程序 if (MessageBox.Show("确定要退出程序?", "安全提示", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes) { notifyIcon1.Visible = false; //设置图标不可见 this.Close(); //关闭窗体 this.Dispose(); //释放资源 Application.Exit(); //关闭应用程序窗体 } } //鼠标左键图标事件 private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { //点击鼠标"左键"发生 if (e.Button == MouseButtons.Left) { this.Visible = true; //窗体可见 this.WindowState = FormWindowState.Normal; //窗体默认大小 this.notifyIcon1.Visible = true; //设置图标可见 } } } }
## 鼠标事件: 1、MouseMove:表示在控件的区域内鼠标任意移动都会触发的事件,只要一移动就会触发,所以会触发很多次。 2、MouseEnter:表示鼠标经过该控件就会触发一次,就是鼠标在该控件的区域范围内就会触发一次。 3、与MovseEnter相对的就是MovseLeave:也是只会触发一次,就是当鼠标从控件区域范围离开就会触发一次。 4、MovseHover:和MovseEnter类似,但是Hover的意思是:徘徊,意思就是需要鼠标在控件区域范围内一段时间才会触发。很遗憾,MovseHoverTime字段只能get,不能set,所以只有400ms。 通过System.Windows.Forms.SystemInformation.MouseHoverTime;便可get到。
1、Point类中:X和Y都是int型;PointF类中:X和Y都是float型
2、 画椭圆: Graphics.FillEllipse(Brush, new Rectangle(0, 0, 200, 300)); public Rectangle(int x, int y, int width, int height) System.Drawing.Rectangle 的成员 摘要: 用指定的位置和大小初始化 System.Drawing.Rectangle 类的新实例。 参数: x: 矩形左上角的 x 坐标。 y: 矩形左上角的 y 坐标。 width: 矩形的宽度。 height: 矩形的高度。
3、获取鼠标位置
(1)Control.MousePosition:是整个屏幕鼠标的位置,左上角(0,0)
(2)Form.EventArgs e.Location:是控件里面鼠标的位置,控件的左上角(0,0)
4、ArrayList<Integer>如何转换为数组 ArrayList<Integer> intList = new ArrayList<Integer>();//泛型为Integer intList.add(123); intList.add(234); intList.add(345); Integer[] b = new Integer[intList.size()];//当泛型为Integer时,需要 b = (Integer[])intList.toArray(b); //以Integer类来作为数组基本元素
5、返回上一层文件夹: ..\
private string pictureRoad = @”……\Tempature.jpg”; //已经返回了三层
6、 DataGirdView单元列内容居中显示:dataGridView.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
7、GroupBox 去掉边框线重写paint事件: private void groupBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { e.Graphics.Clear(this.BackColor); }
8、子控件在父控件居中,基于groupbox的父子居中 /// <summary> /// 两个groupBox的居中 /// </summary> /// <param name="kidBox">子groupBox</param> /// <param name="FatherBox">父groupBox</param> public void GroupBoxReSize(GroupBox kidBox, GroupBox FatherBox) { kidBox.Left = (FatherBox.Left - kidBox.Left) / 2; int x = (int)(FatherBox.Width - kidBox.Width) / 2; int y = kidBox.Location.Y; kidBox.Location = new Point(x, y); }
相关文章推荐
- Java与C#的语法区别(不断更新中...)
- MyEclipse 学习笔记与使用技巧(不断更新)
- c++学习笔记序列之经典处理程序汇总(不断更新中)
- Emacs笔记——配置篇(不断更新中)
- Canvas开发笔记(不断更新)
- 【C#基础】【ADO.NET】课堂笔记 (更新完)
- Oracle 10g使用笔记(不断更新中...2006年9月15日)
- 开发笔记(不断更新中)
- C#的WebBrowser的操作与注意事项,不断更新
- C/C++ 基础知识学习笔记 (不断更新中)
- 黑马程序员之C#编程基础学习笔记:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出。
- 数据库(个人学习笔记,不断更新修改中)
- Emacs笔记——中文篇(不断更新中)
- 消除C#2.0警告之不完全总结(不断更新中)
- web页面开发笔记(不断更新)
- c++学习笔记序列之错误码整理(不断更新中)
- WAP开发笔记(不断更新中)
- linux指令学习小笔记,不断更新。
- .黑马程序员之C#编程基础学习笔记:不断要求用户输入一个数字,当用户输入end的时候显示刚才输入的数字中的最大值。