Csharp日常笔记

  1.

 

 

      1.退出程序
                  this.Close();             //方法退关闭当前窗口。

      Application.Exit();       //方法退出整个应用程序。  (无法退出单独开启的线程)

      Application.ExitThread(); //释放所有线程   

      Environment.Exit(0);      //可以退出单独开启的线程

      2.从本窗口Form1点击按钮产生新窗口Form2
      Form2 f2 = new Form2();
      F2.Show();

      3.得到现在时间并显示在label1上
      Label1.Text=DateTime.Now.Hour+":"+DateTime.Now.Minute+":"+DateTime.Now.Second

      4.产生0到100的随机数
      int m=0;
      Random r = new Random();
      m=r.Next(0,100);

      5.改变窗口大小
      //把窗口的高变为100像素,宽不变
      this.Size=new Size(this.Size.Width,100);
      //把窗口的宽变为100像素,高不变
      this.Size=new Size(100,this.Size.Height);
      //把窗口的高和宽都变为100像素
      this.Size=new Size(100,100);

      6.改变控件的位置
      //改变按钮button1的位置到坐标为(100,100)处
      button1.Location=new Point(100,100);
      //改变文字label1的位置到坐标为(100,100)处
      label1.Location=new Point(100,100);

      7. 指定位置创建一个文件夹(创建D盘Folder文件夹为例)
      #需要导入Using System.IO
      Directory.CreateDirectory(@"D:\Folder");

      8. 指定位置创建一个文件(以创建D盘test.txt为例)
      #需要导入Using System.IO
      FileStream fs= File.Create(@"D:\test.txt");

      或

      FileSystem.FileOpen(1,"D:\test.txt",Binary)
      FileSystem.FileClose(1)

      9. 复制一个文件到另一位置(以test.txt文件为例)
      #需要导入Using System.IO
      #其中有true表示test2.txt已经存在的话就覆盖
      File.Copy(@"D:\test.txt",@"D:\temp\test2.txt",true);

      10. 移动文件(以test.txt为例)
      #需要导入Using System.IO
      File.Move(@"d:\test.txt",@"d:\temp\test.txt");

      and

      My.Computer.FileSystem.CopyFile("d:\test.txt","d:\temp\test.txt")

      11.检测当前操作系统信息显示到Label1上
      string os = System.Environment.OSVerion.ToString();
      Label1.Text="检测到您使用的操作系统是:"+os;

      或

      Label1.Text="检测到您使用的操作系统是:"+My.Computer.Info.OSVersion

      12.启动进程打开网页或者某个程序(打开百度首页为例)
      System.Diagnostics.Process.Start(@"http://www.baidu.com/");

      13.判断文件是否存在(以C盘test.txt为例)
      #需要引入 using System.IO;
      File.Exists(@"C:\test.txt");
      返回true或者false;
      //判断可用
      if (File.Exists(@"C:\test.txt"))
      {
      }

      14.弹出对话框
      //仅提示内容
      MessageBox.Show("提示内容");
      //标题和内容,以及图标
      MessageBox.Show("提示内容","标题",MessageBoxButtons.Yes,MessageBoxIcon.Information);

      15.判断用户是否点击了弹出的对话框中的确定/Ok/Yes,将判断结果显示在label1上
      DialogResult dr = MessageBox.Show("提示内容","标题",MessageBoxButtons.Yes,MessageBoxIcon.Information);
      if(dr==DialogResult.Yes)
      {
      label1.Text="你点击了对话框中的[Yes]";
      }

      16.为泛型赋值
      List<Int32> lst = new List<Int32> { };
      for (Int32 mm = 0; mm <= 100; mm++)
      { 
      lst.Add(mm);
      }

      17.

      关机 System.Diagnostics.Process.Start("shutdown", "-s -t 0");
      注销 System.Diagnostics.Process.Start("shutdown", "-l ");
      重启 System.Diagnostics.Process.Start("shutdown", "-r -t 0");

      18.某月有几天 DateTime.DaysInMonth(2012,1)

      19.按行写入数据到文本(以C盘test.txt为例)
      需要导入System.IO;
      FileStream fs = new FileStream(@"C:\test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); 
      StreamWriter sw = new StreamWriter(fs); 
      sw.WriteLine( "第一行\r\n第二行\r\n第三行" ); 
      sw.Flush(); 
      sw.Close(); 
      fs.Close();

      20..通过静态类跨窗体传递数据(以Form1通过dataPass.cs静态类传递数据到Form2为例)
      //构造静态类
      public static class dataPass
      { 
      public static String _isData;
      public static String isData 
      { 
      get { return _isData; } 
      set { _isData = value; } 
      } 
      }
      //在Form1中的一个按钮Button1上点击转到Form2
      private void Button1_Click_1(object sender, EventArgs e)
      { 
      //把Button1上的文字存入静态类
      dataPass._isData=Button1.Text;
      Form2 f2 = new Form2();
      f2.Show();
      }
      //在Form2加载的时候把数据传递到Form2的标题上显示
      private void Form2_Load(object sender, EventArgs e) 
      {
      this.Text=dataPass._isData;
      }

      或

form1:  private void button1_Click(object sender, EventArgs e)        {            string aa = "aa";            Form2 form2 = new Form2(aa);            form2.ShowDialog();        }form2:   private string text;         public Form2(string str)        {            InitializeComponent();            text = str;        }         private void Form2_Load(object sender, EventArgs e)        {            label1.Text = text;

      }

      21. 获得某个文件夹中的所有文件名(以获得Images文件夹中的所有图片文件名为例)
      #需要引用using System.IO; 
      String Path="Images";
      List<string> files = null;
      string getFilesFilter = "*.jpg;*.jpeg;*.jpe;*.gif;*.bmp;*.png;";
      string[] arrFilter = getFilesFilter.Split(';');
      if (!string.IsNullOrEmpty(Path))
      {
      files = new List<string>();
      try
      {
      DirectoryInfo di = new DirectoryInfo("Images");
      for (int i = 0; i < arrFilter.Length; i++)
      {
      if (di.Exists)
      {
      foreach (FileInfo fileInfo in di.GetFiles(arrFilter[i]))
      {
      files.Add(fileInfo.FullName);
      if (files.Count > 50)
      break;
      }
      }
      }
      }
      catch (IOException) { }
      catch (ArgumentException) { }
      catch (SecurityException) { }
      }

      22. 剪切板操作(以textBox1中的文本为例)
      //放入剪贴板
      Clipboard.SetText(textBox1.Text); 
      //从剪切板取出文本
      textBox1.Text = Clipboard.GetText();

      23.获得系统某些特殊目录的路径
      //桌面
      string desktopPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
      //文档
      string documentPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
      //program Files
      string desktopPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);

      24. 创建程序的桌面快捷方式(以C盘llyn23.exe为例)
      #需要添加引用 (com->Windows Script Host Object Model)
      #需要引入using IWshRuntimeLibrary;
      //得到桌面路径
      string DesktopPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop); 
      IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShellClass();
      IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(DesktopPath + "\\llyn23快捷方式.lnk"); 
      shortcut.TargetPath = @"C:\llyn23.exe"; 
      shortcut.Arguments = ""; 
      shortcut.Description = "llyn23快捷方式"; 
      shortcut.WorkingDirectory = @"C:\";
      //设置图标
      shortcut.IconLocation = @"C:\llyn23.exe,0"; 
      //设置热键
      shortcut.Hotkey = "CTRL+SHIFT+Z"; 
      shortcut.WindowStyle = 1; 
      shortcut.Save();

      25 获取屏幕宽度:

      this.Width = System.Windows.Forms.Screen.GetBounds(this).Width;

      //获得当前屏幕的分辨率
       Screen scr =Screen.PrimaryScreen;
       Rectangle rc =scr.Bounds;
       intiWidth =rc.Width;

      intiHeight =rc.Height;

      26.程序当前目录下文件:("..\\..\\banana.ico")

      27.以方法调用方式计算圆面积(点击button1后计算,以半径为10.0为例)
      private void btn_enter_Click(object sender, EventArgs e)
      {
      AreaCount(10.0);
      }
      public Double AreaCount(Double moRadius)
      {
      //可以直接使用Math.PI,即圆周率3.14159265358979323846 
      return Math.PI * moRadius * moRadius ;
      }

      28用静态类的方法移动无边框窗口(窗口以Form1为例,静态类以dataPass.cs为例)
      //创建静态类
      public static class dataPass
      { 
      public static Int32 _mouseX; 
      public static Int32 _mouseY;
      public static Int32 mouseX 
      { 
      get { return _mouseX; } 
      set { _mouseX = value; } 
      }
      public static Int32 mouseY 
      { 
      get { return _mouseY; } 
      set { _mouseY = value; } 
      }
      }
      //鼠标按下事件中记录鼠标初始坐标
      private void Form1_MouseDown(object sender, MouseEventArgs e) 
      { 
      dataPass._mouseX = e.X; 
      dataPass._mouseY = e.Y; 
      }
      //鼠标移动事件中改变Form1的位置
      private void Form1_MouseMove(object sender, MouseEventArgs e) 
      { 
      //先判断鼠标左键是否已按下,按下了才移动Form1 
      if (e.Button == MouseButtons.Left) 
      { 
      //新位置为原位置+现在鼠标坐标-初始鼠标坐标
      this.Location = new Point(this.Location.X + e.X - dataPass._mouseX, this.Location.Y + e.Y - dataPass._mouseY); 
      } 
      }

      29. 以创建一个坐标点对象,计算偏移量的方式来移动无边框窗体
      private Point moePoint;
      private void Form1_MouseDown(object sender, MouseEventArgs e) 
      { 
      moePoint= new Point(-e.X,-e.Y);
      }
      private void Form1_MouseMove(object sender, MouseEventArgs e) 
      { 
      if (e.Button == MouseButtons.Left) 
      { 
      Point moePosition = Control.MousePotision;
      //偏移
      moePosition.Offset(moePoint.X,moePoint.Y);
      this.DesktopLocation=moePosition;
      } 
      }

      30. 判断列表选中项来改变窗体背景颜色(以comboBox1,Form1为例)
      //创建颜色数组
      public System.Drawing.Color[] arrColor = { Color.Red,Color.Green,Color.Blue,Color.Purple,Color.Pink,Color.Yellow};
      //注意列表项数不要超过颜色数组中元素个数
      private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
      {
      Form1.BackColor=arrColor[comboBox1.SelectedIndex];
      }

      31. 变换背景颜色4种方式(以改变Form1的背景颜色为例)
      //使用既有颜色
      Form1.BackColor=Color.Red;
      //使用透明度+既有颜色方式,透明度的值从0到255,255为完全不透明
      Form1.BackColor=Color.FromArgb(255,Color.Red);
      //自定义颜色,不含透明,3个参数分别是红色,绿色,蓝色,值从0~255
      Form1.BackColor=Color.FromArgb(255,0,128); 
      //自定义颜色,含透明,4个参数分别是透明度,红色,绿色,蓝色,值从0~255 
      Form1.BackColor=Color.FromArgb(192,255,0,128);

      32. 扑克牌随机发牌(4人为例)
      static void Main(string[] args)
      {
      int i, j, temp;
      Random Rnd = new Random();
      int k;
      int [] Card = new int[52];
      int [,] Player = new int[4, 3]; for (i = 0; i < 4; i++) //52张牌初始化
      for (j = 0; j < 13; j++)
      Card[i * 13 + j] = (i + 1) * 100 + j + i;
      Console.Write("How many times for card:");
      string s = Console.ReadLine();
      int times = Convert.ToInt32(s);
      for (j=1;j<=times;j++)
      for (i = 0; i < 52; i++)
      {
      k = Rnd.Next(51 - i + 1) + i;//产生i到52的之间的随机数
      temp = Card[i];
      Card[i] = Card[k];
      Card[k] = temp;
      }
      k = 0;
      for (j = 0; j < 13; j++)//52张牌分给4个玩家
      for (i = 0; i < 4; i++)
      Player[i, j] = Card[k++];
      for(i=0;i<4;i++)//显示4个玩家的牌
      {
      Console.WriteLine ("玩家{0}的牌:",i+1);
      for(j=0;j<13;j++)
      {
      k =(int)Player[i,j]/100;//分离出牌的种类
      switch (k)
      {
      case 1: //红桃
      s=Convert.ToString('\x0003');
      break;
      case 2: //方块
      s=Convert.ToString('\x0004');
      break;
      case 3: //梅花
      s=Convert.ToString('\x0005');
      break;
      case 4: //黑桃
      s=Convert.ToString('\x0006');
      break;
      }
      k=Player[i,j]%100;
      switch(k)
      {
      case 1:
      s =s+"A";
      break;
      case 11:
      s =s+"J";
      break;
      case 12:
      s =s+"Q";
      break;
      case 13:
      s =s+"K";
      break;
      default:
      s=s+Convert .ToString(k);
      break;
      }
      Console.Write (s);
      if (j<12)
      Console.Write (",");
      else 
      Console.Write(" "); 
      }
      } Console.Read();
      }

      33. 创建一个渐变色背景按钮控件
      #创建控件请点击"新建"->"项目"->"Windows窗体控件库"->编码->引用
      using System;using System.Collections.Generic;
      using System.ComponentModel;
      using System.Drawing;
      using System.Data;
      using System.Linq;
      using System.Text;
      using System.Windows.Forms;
      namespace moeButton
      { 
      //此处新建好项目后修修改成如下以继承Button
      public partial class moeButton : System.Windows.Forms.Button 
      { 
      private Color _moeColor1 = Color.Magenta; 
      private Color _moeColor2 = Color.Cyan; 
      private int _moTransparent1 = 128; 
      private int _moTransparent2 = 128;
      public Color moeColor1 
      { 
      get { return _moeColor1; } 
      set { _moeColor1 = value; } 
      }
      public Color moeColor2 
      { 
      get { return _moeColor2; } 
      set { _moeColor2 = value; } 
      }
      public int moTransparent1 
      { 
      get { return _moTransparent1; } 
      set { _moTransparent1 = value; } 
      }
      public int moTransparent2 
      { 
      get { return _moTransparent2; } 
      set { _moTransparent2 = value; } 
      }
      public moeButton() 
      { 
      }
      protected override void OnPaint(PaintEventArgs pevent) 
      { 
      base.OnPaint(pevent); 
      Color c1 = Color.FromArgb(_moTransparent1,_moeColor1); 
      Color c2 = Color.FromArgb(_moTransparent2, _moeColor2); 
      Brush br = new System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle,c1,c2,10); 
      pevent.Graphics.FillRectangle(br,ClientRectangle); 
      br.Dispose(); 
      } 
      }
      }

      34.获取剪切板的图片
      IDataObject data = Clipboard.GetDataObject();//从剪贴板中获取数据
      if(data.GetDataPresent(typeof(Bitmap)))//判断是否是图片数据
      {
      Bitmap map = (Bitmap) data.GetData(typeof(Bitmap));//将图片数据存到位图中
      this.pictureBox1.Image = map;//显示
      map.Save(@"C:\a.bmp");//保存图片

      35. 使用SQL Server身份验证
      #moeData为数据库名,Prism为电脑名称,SQLExpress为使用的SQL Server版本
      //不要在程序中硬编码用户名和密码
      //使用Linq to Sql 来管理数据库就不需要手写这些代码
      String userName = "mo";
      String userPass = "1234";
      String connStr= String.Format("User ID ={0};Password ={1};Initial Catalog = moeData;"+"Data Source=Prism\\SQLExpress",userName,userPass);
      Sqlconnection moConnection=newSqlConnection();
      moConnection.ConnectionString = connStr;

      36. 保存文件对话框与写入数据的综合应用及线程模拟假死
      #Using System.IO;
      #Using System.Theading;
      //SaveDialog.ShowDialog().Value为true 或 flase,必须先点SaveDialog中的确定或取消才能继续使用应用程序的其他任何窗体
      if(SaveDialog.ShowDialog().Value)
      {
      using(StreamWrite moWrite = new StreamWrite(saveDialod.FileName))
      {
      //假死10秒,窗体可能会空白,标题显示无响应
      Thead.Sleep(10000);
      //假死之后提示文件保存成功!窗体恢复正常
      MessageBox.Show("保存成功!","提示");
      }
      }

      37.进度条示例
      //添加一个processBar1,Max设为100;
      //添加一个timer1,Interval设为100;
      public Int32 mo=0;
      Timer1_Tick事件中写上
      {
      if(mo<101)
      {
      mo++;
      processBar1.Value=mo;
      }
      else
      {
      timer1.Stop();
      processBar1.Value=100;
      }
      }

      38. 将文件复制进度显示在进度条上
      //需要拖一个ProcessBar1,一个Timer,1个Button1
      //点击Button1开始复制,
      //假设从C:/test.rar复制到C:/test/test.rar
      int hasCopy = 0; 
      FileStream fsRead = null; 
      FileStream fsWrite = null; 
      int fileLen = 0; 
      void Button1Click(object sender, EventArgs e) 
      { 
      string srcPath = @"C:/test.rar"; 
      string desPath = @"C:/test/test.rar"; 
      if(File.Exists(srcPath))
      { 
      fsRead = new FileStream (srcPath,FileMode.Open,FileAccess.ReadWrite); 
      fsWrite = new FileStream(desPath,FileMode.Create,FileAccess.ReadWrite); 
      fileLen = (int)fsRead.Length; 
      ProgreeBar1.Maximum = fileLen;
      byte[] buffer = new byte[1024]; 
      int len; 
      button1.Enabled= false; 
      timer1.Start(); 
      while((len = fsRead.Read(buffer,0,buffer.Length))>0)
      { 
      hasCopy += len; 
      fsWrite.Write(buffer,0,len); 
      fsWrite.Flush(); 
      }
      fsWrite.Close(); 
      fsRead.Close();
      }
      }
      private void Timer1Tick(object sender, EventArgs e) 
      { 
      if(fileLen > 0 && hasCopy <= fileLen)
      { 
      ProgreeBar1.Value = hasCopy;
      } 
      }

      39.获取 鼠标的位置

      1.   整个屏幕

      textBox1.Text=System.Windows.Forms.Control.MousePosition.X.ToString();

      textBox2.Text=System.Windows.Forms.Control.MousePosition.Y.ToString();

      2.只应用于本窗体

      Point myp = this.PointToScreen(e.Location);

      this.Text = Convert.ToString(myp.X) + "  " + Convert.ToString(myp.Y);

      40.获取当前文件所在的目录

      MessageBox.Show(this,"当前执行程序所在的文件夹为:\n"+System.IO.Directory.GetCurrentDirectory()+"\n","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

      41.获取特殊文件夹位置

      系统文件夹:(windows\system32)this.textBox1.Text=Environment.GetFolderPath(System.Environment.SpecialFolder.System);

      程序文件夹:  this.textBox2.Text=Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);

      桌面文件夹:  this.textBox3.Text=Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);

      启动文件夹:  this.textBox4.Text=Environment.GetFolderPath(System.Environment.SpecialFolder.Startup);

      开始菜单文件夹:   this.textBox5.Text=Environment.GetFolderPath(System.Environment.SpecialFolder.StartMenu);

      我的音乐文件夹:   this.textBox6.Text=Environment.GetFolderPath(System.Environment.SpecialFolder.MyMusic);

      42.只允许输入数字(文本框textbox)

      privatevoid txtSum_KeyPress(object sender, KeyPressEventArgs e)

      {

      if ((e.KeyChar != 8 && !char.IsDigit(e.KeyChar))&&e.KeyChar!=13)

      {

      MessageBox.Show("商品数量只能输入数字","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

      e.Handled = true;

      }

      }

      43.控制鼠标位置(引用API)

      using System.Runtime.InteropServices;

      [DllImport("User32.dll")]

      privatestaticexternbool SetCursorPos(int x, int y);

      privatevoid Form1_Load(object sender, EventArgs e)

      {

      SetPos();

      }

      privatestaticvoid SetPos()

      {

      int dx = 0;

      int dy = 0;

      SetCursorPos(dx, dy);

      }

      44.文本操作(txt保存,追加,读取)

      1、建立一个文本文件

      public class FileClass

      {

      public static void Main()

      {

      WriteToFile();

      }

      static void WriteToFile()

      {

      StreamWriter SW;

      SW=File.CreateText("c:\MyTextFile.txt");

      SW.WriteLine("God is greatest of them all");

      SW.WriteLine("This is second line");

      SW.Close();

      Console.WriteLine("File Created SucacessFully");

      }

      }

      2、读文件

      public class FileClass

      {

      public static void Main()

      {

      ReadFromFile("c:\MyTextFile.txt");

      }

      static void ReadFromFile(string filename)

      {

      StreamReader SR;

      string S;

      SR=File.OpenText(filename);

      S=SR.ReadLine();

      while(S!=null)

      {

      Console.WriteLine(S);

      S=SR.ReadLine();

      }

      SR.Close();

      }

      }

      3、追加操作

      public class FileClass

      {

      public static void Main()

      {

      AppendToFile();

      }

      static void AppendToFile()

      {

      StreamWriter SW;

      SW=File.AppendText("C:\MyTextFile.txt");

      SW.WriteLine("This Line Is Appended");

      SW.Close();

      Console.WriteLine("Text Appended Successfully");

      }

      }

      打开:

      richTextBox1.LoadFile(“c:\\1.txt”, RichTextBoxStreamType.PlainText);

      保存:

      richTextBox1.SaveFile(“c:\\1.txt”, RichTextBoxStreamType.PlainText);

      45.文件夹文件操作(删除,创建)

      using System.IO;

      //创建文件夹

      1.    if (!Directory.Exists("c:\\yinlikun\\abc\\abcd"))

      {

      Directory.CreateDirectory("c:\\yinlikun\\abc\\abcd");

      }

      2.Directory.CreateDirectory("c:\\adadsaaasda");

      //删除文件夹

      if (Directory.Exists("c:\\123"))

      {

      Directory.Delete ("c:\\123");

      }

      //创建文件

      1.File.Create("c:\\aaa.txt");

      2.

      FileInfo fi = newFileInfo("C:\\ls.bmp");

      if (!fi.Exists)

      {

      File.Create("C:\\ls.bmp");

      }

      //删除文件

      FileInfo a = newFileInfo("C:\\1.txt");

      if (a.Exists)

      {

      File.Delete("C:\\1.txt");

      }

      46.调用exe 文件

      using System.Diagnostics;

      Process p = new Process();

      p.StartInfo.FileName = "cmd.exe";          //要调用的程序

      p.StartInfo.UseShellExecute = false;       //关闭Shell的使用

      p.StartInfo.RedirectStandardInput = true;  //重定向标准输入

      p.StartInfo.RedirectStandardOutput = true; //重定向标准输出

      p.StartInfo.RedirectStandardError = true;  //重定向错误输出

      p.StartInfo.CreateNoWindow = true;         //设置不显示窗口

      p.Start();

      47.利用定时器在Label上间隔一段时间一行一行地显示文本文件中的内容
      //读取C:\test.txt中的内容按行隔一段时间显示到label1上为例
      string[] s = null;
      private int nline=0;
      s = File.ReadAllLines(@"c:\test.txt");
      private void timer1_Tick(object sender, EventArgs e)
      {
      if (nline < s.Length)
      {
      label1.Text = s[nline].ToString();
      }
      else
      {
      nline = 0;
      }
      nline = nline + 1;
      }

      48. 利用DateTime.Now和DateTimePicker计算到某年某月某日还有多少天
      //date1,2格式化成你自己需要的格式
      DateTime date1 = DateTime.Now.Date; 
      DateTime date2 = dateTimePicker1.Value; 
      TimeSpan ts = date2 - date1; 
      MessageBox.Show(string.Format("距离{0}还有{1}天",date2, ts.TotalDays.ToString()));

      49. .通过判断按下的按键来移动控件的位置
      //以移动Form1中的button1为例
      this.KeyPreview = true; 
      private void mainForm_KeyPress(object sender, KeyPressEventArgs e) 
      { 
      String moeKey = e.KeyChar.ToString(); 
      switch (moeKey) 
      { 
      case "w": button1.Top-=10; break; 
      case "s": button1.Top+=10; break; 
      case "a": button1.Left-=10; break; 
      case "d": button1.Left+=10; break; 
      } 
      }

      50. 截取窗体保存成图片
      //以点击Form1中的button1截取Form1为例
      //用Graphics.CopyFromScreen()实现,4个参数
      Image memory = new Bitmap(this.Size.Width, this.Size.Height); 
      Graphics g = Graphics.FromImage(memory); 
      g.CopyFromScreen(this.Location.X,this.Location.Y,0,0,this.Size); 
      Clipboard.SetImage(memory); 
      String folderPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyPictures); 
      string imagePath = folderPath+@"\mo"+DateTime.Now.Hour+DateTime.Now.Minute+DateTime.Now.Second+"llyn23.jpg"; 
      memory.Save(imagePath, ImageFormat.Jpeg);

      51. 拖动文件到窗体中,窗体中显示文件路径
      //以Form1为例,路径显示在label1上
      this.AllowDrop = true;
      this.DragDrop += new DragEventHandler(Form1_DragDrop);
      this.DragEnter += new DragEventHandler(Form1_DragEnter);
      void Form1_DragDrop(object sender, DragEventArgs e)
      {
      string[] paths = e.Data.GetData(DataFormats.FileDrop) as string[];
      label1.Text = paths[0];
      }
      void Form1_DragEnter(object sender, DragEventArgs e)
      {
      if (e.Data.GetDataPresent(DataFormats.FileDrop))
      {
      e.Effect = DragDropEffects.Copy;
      }
      else
      {
      e.Effect = DragDropEffects.None;
      }
      }

      52.把txt中的文本每行导入到listbox中

      using System.IO;

      string[] s = null;

      privateint nline = 0;

      privatevoid button1_Click(object sender, EventArgs e)

      {

      for (; nline < s.Length; nline++)

      {

      listBox1.Items.Add(s[nline].ToString());

      }

      }

      privatevoid Form1_Load(object sender, EventArgs e)

      {

      s = File.ReadAllLines(@"c:\text.txt");

      }

      53.把listbox的每项导入到txt中(listbox text)

      StreamWriter writer = newStreamWriter("abc.txt ", false, Encoding.Unicode);  //

      for (int i = 0; i < listBox1.Items.Count; i++)

      {

      writer.WriteLine(listBox1.Items[i]);

      }

      writer.Close();

      54.把屏幕截图附加到某个控件上

      Graphics myg = pictureBox1.CreateGraphics();//pictureBox1控件

      Size mys = new Size(1366, 768);

      myg.CopyFromScreen(0, 0, 0, 0, mys);//截取屏幕的图像

      myg.Dispose();

      55.屏蔽任务管理器

      File.OpenWrite(@"C:\WINDOWS\system32\taskmgr.exe");

      56.列出文件夹下所有文件(包括路径)

      string[] wenjian = Directory.GetFiles("C:\\sounds\\");

      foreach (string a in wenjian)

      {

      listBox1.Items.Add(a);

      }

      57:释放内存的方法(代码加入定时器中,不断执行)

      微软的 .NET FRAMEWORK 现在可谓如火如荼了。但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其是 winform 程序,其主要原因是因为.NET程序在启动时,是需要由JIT动态编译并加载的,这个加载会把所有需要的资源都加载进来,很多资源是只有启动时才用的。
      以XP 系统为例子,程序启动后,打开任务管理器,会看到占用的内存量比较大,你把程序最小化,会发现该程序占用的内存迅速减小到一个很小的值,再恢复你的程序,你会发现内存占用又上升了,但是比你刚启动时的内存占用值还是小的,这就是一个资源优化的过程,这个过程是操作系统主动完成的。

      每次都是写了之后回过头来才发现自己的代码很丑,系统架构师的作用就体现出来了。
      这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考,待更新:
      1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多
      2、强制垃圾回收
      3、多dispose,close
      4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);具体见附录。
      5、发布的时候选择Release
      6、注意代码编写时少产生垃圾,比如String + String就会产生大量的垃圾,可以用StringBuffer.Append
      7、this.Dispose();    this.Dispose(True);   this.Close();    GC.Collect();  
      8、注意变量的作用域,具体说某个变量如果只是临时使用就不要定义成成员变量。GC是根据关系网去回收资源的。
      9、检测是否存在内存泄漏的情况,详情可参见:内存泄漏百度百科
      致谢及附录:
      致谢:我可以感谢XiXiTV么,还有各种TV和桂电在线,还有感谢某某和某某们,自己想吧。
      附录:定期清理执行垃圾回收代码:
      //在程序中用一个计时器,每隔几秒钟调用一次该函数,打开任务管理器,你会有惊奇的发现
      #region 内存回收
      [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
      public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
      /// <summary>
      /// 释放内存
      /// </summary>
      public static void ClearMemory()
      {
      GC.Collect();
      GC.WaitForPendingFinalizers();
      if (Environment.OSVersion.Platform == PlatformID.Win32NT)
      {
      App.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
      }
      }
      #endregion

      58.最小化其他窗口(所有窗口)

      最小化所有窗口的方法:

      添加引用 Microsoft Shell Controls and Automation
      Shell32.ShellClass sc = new Shell32.ShellClass(); 
      sc.MinimizeAll(); // Win+M 
      sc.UnminimizeAll(); // Shift+Win+M 
      IShellDispatch4 sd4 = (IShellDispatch4)sc; 
      if(sd4 != null) 
      sd4.ToggleDesktop(); // Win+D

      这两行代码:

      Shell32.ShellClass sc = new Shell32.ShellClass(); 
      sc.MinimizeAll(); // Win+M

      即可最小化所有窗口,然后再把锁定窗口的WindowState设置成Normal即可。

      而以下代码:

      IShellDispatch4 sd4 = (IShellDispatch4)sc; 
      if(sd4 != null) 
      sd4.ToggleDesktop(); // Win+D

      最小化所有窗口后,把锁定窗口的WindowState设置成Normal也无法把锁定窗口显示出来(所有窗口都被最小化了)

      59.窗体透明控件不透明

      Form f = newForm(); //创建一个新窗体

      Label lab = newLabel();

      privatevoid Form1_Load(object sender, EventArgs e)

      {

      f.FormBorderStyle = FormBorderStyle.None; //设置窗体无边框

      f.ShowInTaskbar = false;

      f.BackColor = Color.Red; f.TransparencyKey = f.BackColor; //让窗体透明  

      lab.Text = "我是在透明窗体上的不透明文本!";

      lab.BackColor = Color.Transparent; //背景色透明

      lab.Location = newPoint(100, 150); //调整在窗体上的位置

      f.Controls.Add(lab);

      f.TopLevel = true;

      f.Show();

      }

      privatevoid Form1_Move(object sender, EventArgs e)

      {

      f.Location = this.Location;

      }

      60:打开一个新窗体关闭老窗体(建立一个新线程)

      privatevoid button1_Click(object sender, EventArgs e)

      {

      newThread(show).Start();

      this.Close();

      }

      void show()

      {

      Form2 abc = newForm2();

      Application.Run(abc); 

      }

      61:100内所有素数

      62.//避免闪烁
      this.SetStyle(ControlStyles.OptimizedDoubleBuffer |ControlStyles.ResizeRedraw |ControlStyles.AllPaintingInWmPaint, true);

      63.MD5加密

      有时我们的系统需要对用户的密码进行加密,则可以使用MD5加密算法,这在.net 2.0及以上版本中有,
      首先引入命名空间:
      using System.Security.Cryptography;
      然后可以编写一个通用的函数放到一个类中,下面给出全部的源代码:
      using System;
      using System.Security.Cryptography;
      using System.Text;
      namespace Common
      {
      class Md5
      {
      public static string MD5(string encryptString)
      {
      byte[] result = Encoding.Default.GetBytes(encryptString);
      MD5 md5 = new MD5CryptoServiceProvider();
      byte[] output = md5.ComputeHash(result);
      string encryptResult = BitConverter.ToString(output).Replace("-", "");
      return encryptResult;
      }
      }
      }
      使用时直接调用函数对字符串加密就行了
      string s1 = "123456";
      string s2 = Common.Md5.MD5(s1);
      则s2的值变为32的字符串:E10ADC3949BA59ABBE56E057F20F883E

      64.窗体传值

      Form1:

      只需打开Form2即可

      Form2:

      Form1 f1;

      public Form2(Form1 fm1)

      {

      f1 = fm1;

      InitializeComponent();

      }

      privatevoid button1_Click(object sender, EventArgs e)

      {

      f1.textBox1.Text = textBox1.Text;

      }

      65. dataGridView1数据绑定.

      string str = @"Data Source=JACK-PC\SQLEXPRESS;Database=netmusic;Integrated Security = SSPI;";

      SqlConnection myconn = newSqlConnection(str);

      myconn.Open();

      String str2 = "select * from tb_musicInfo";

      SqlDataAdapter myda = newSqlDataAdapter(str2, myconn);

      DataTable myst = newDataTable();

      myda.Fill(myst);

      this.dataGridView1.DataSource = myst;

      myconn.Close();

      66.窗体只运行一次

      1、

      if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)

      {

      MessageBox.Show("程序已经运行了一个实例,该程序只允许有一个实例");

      Application.Exit();

      }

      2、

      string name = Process.GetCurrentProcess().MainModule.ModuleName;

      string pname = Path.GetFileNameWithoutExtension(name);

      Process[] myp = Process.GetProcessesByName(pname);

      if (myp.Length > 1)

      {

      MessageBox.Show("对不起,本版本目前还不支持双开!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Stop);

      this.Dispose(true);

      Application.Exit();

      return;

      }

      3、

      using System.Threading;

      publicstaticvoid Main(string[] args)

      {

      //声明互斥体。

      Mutex mutex = newMutex(false, "ThisShouldOnlyRunOnce");

      //判断互斥体是否使用中。

      bool Running = !mutex.WaitOne(0, false);

      if (!Running)

      {

      Application.Run(newForm1());

      }

      else

      {

      MessageBox.Show("应用程序已经启动!");

      }

      }

      67.获取exe文件图标

      System.Drawing.Icon.ExtractAssociatedIcon(string path)

      68.c# 移动窗体和控件(拖动无标题窗体API)

      using System.Runtime.InteropServices;

      [DllImportAttribute("user32.dll")]

      private extern static bool ReleaseCapture();

      [DllImportAttribute("user32.dll")]

      private extern static int SendMessage(IntPtr handle, int m, int p, int h);

      protected void MyBaseControl_MouseDown(object sender, MouseEventArgs e)

      {

      if (e.Button == MouseButtons.Left)

      {

      this.Cursor = Cursors.SizeAll;

      ReleaseCapture();

      SendMessage(this.Handle, 0xA1, 0x2, 0);

      this.Cursor = Cursors.Default;

      }

      }

      //注:

      如果用于运行时的某个控件,则可以把上面的代码放入此控件的MouseDown事件中,只是SendMessage(this.Handle, 0xA1, 0x2, 0);中的

      this.Handle参数应改为此控件的Handle,如this.button1.Handle即可实现。

      69.Repeater中绑定按钮(button、linkbutton...)

      前台代码:

      <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">

      <ItemTemplate>

      <asp:Button ID="Button1" runat="server" CommandName="comButton1" CommandArgument='<%#Eval("ID") %>' Text='<%#Eval("Title") %>' />

      </ItemTemplate>

      </asp:Repeater>

      后台代码:

      protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)

      {

      if (e.CommandName == "comButton1") //触发点击事件

      {

      int NewsID = int.Parse(e.CommandArgument.ToString()); //获取回发的值

      InitPage(NewsID); //根据点击回发的值随便调用什么函数了

      }

      }

      70.动态添加控件(动态批量添加控件,并添加事件)

      添加控件:

      CKB.CheckedChanged += new EventHandler(CKB_Click);

      flowLayoutPanel1.Controls.Add(CKB);

      事件定义:

      private void CKB_Click(object sender, EventArgs e)

      {

      CheckBox CKB = (CheckBox)sender;

      MessageBox.Show(CKB.Text);

      }

      71. C#中实现文本框的滚动条自动滚到最底端 

      1、配置textBox的Multiline属性为true;

      2、配置textBox的ScrollBars属性为Vertical,实现纵向滚动条;

      3、然后如下语句实现自己滚动:

      private void textBox3_TextChanged_1(object sender, EventArgs e)

      {

      textBox3.SelectionStart = textBox3.Text.Length;

      textBox3.ScrollToCaret();

      }

      72.字符串分割。

      using System.Text.RegularExpressions;

      string str="aaajsbbbjsccc";

      string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);

      foreach (string i in sArray) Response.Write(i.ToString() + "<br>");

      73. 正则获取两个字符串中间的值

      1)返回一条

      ///<summary>

      ///正则获取两个字符串中间的值

      ///</summary>

      ///<param name="str">源字符串</param>

      ///<param name="s">起始串</param>

      ///<param name="e">结束串</param>

      ///<returns></returns>

      publicstaticstring GetValue(string str, string s, string e)

      {

      Regex rg = newRegex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);

      return rg.Match(str).Value;

      }

      2)返回多条

      privatevoid button1_Click(object sender, EventArgs e)

      {

      string str = "aa444444bbaa343434bbaa";

      Regex r = newRegex(@"aa(?<name>.*?)bb");

      MatchCollection m = r.Matches(str);

      foreach (Match ma in m)

      {

      textBox2.Text+= ma.Groups["name"].Value + "\r\n";

      }

      }

      74.解决“从客户端检测到有危险的Request.Form值”错误

      平时在做网站建设的项目中,使用asp.net开发的时候,有时会遇到“从客户端检测到有潜在危险的Request.Form 值”的错误提示,查遍了本页程序也找不出错误的原因,实际正确解决方案应该是:

      1、web.config文档<system.web>后面加入这一句: <pages validaterequest="false"/> 
      示例:
      <?xml version="1.0" encoding="gb2312" ?> 
      <configuration> 
      <system.web> 
      <pages validaterequest="false"/> 
      </system.web> 
      </configuration>

      2、在*.aspx文档头的page中加入validaterequest="false",示例如下:
      <%@ page validaterequest="false" language="c#" codebehind="index.aspx.cs" autoeventwireup="false" inherits="mybbs.webform1" %> 
      .net framework 4.0的特点,在web.config的system.web节点里面加上<httpRuntime requestValidationMode="2.0" />就可以了。

      75.ListView排序功能

      类文件:

      using System;

      using System.Collections.Generic;

      using System.Linq;

      using System.Text;

      using System.Collections;//特别注意

      using System.Windows.Forms;

      namespace Mange

      {

      class ListViewSort : IComparer

      {

      private int col;

      private bool descK;

      public ListViewSort()

      {

      col = 0;

      }

      public ListViewSort(int column, object Desc)

      {

      descK = (bool)Desc;

      col = column; //当前列,0,1,2...,参数由ListView控件的ColumnClick事件传递        

      }

      public int Compare(object x, object y)

      {

      int tempInt = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);

      if (descK) return -tempInt;

      else return tempInt;

      }

      }

      }

      调用:

      private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)

      {

      if (this.listView1.Columns[e.Column].Tag == null)

      this.listView1.Columns[e.Column].Tag = true;

      bool flag = (bool)this.listView1.Columns[e.Column].Tag;

      if (flag) this.listView1.Columns[e.Column].Tag = false;

      else this.listView1.Columns[e.Column].Tag = true;

      this.listView1.ListViewItemSorter = new ListViewSort(e.Column, this.listView1.Columns[e.Column].Tag);

      this.listView1.Sort();//对列表进行自定义排序 

      }

 

posted @ 2015-11-04 10:13  虚-染D  阅读(1571)  评论(0编辑  收藏  举报