c#学习

来源:互联网 发布:nginx 目录浏览 编辑:程序博客网 时间:2024/06/05 16:03

(转)

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;
 int iWidth = rc.Width;

 int iHeight = 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)

        private void 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")]

        private static extern bool SetCursorPos(int x, int y);

        private void Form1_Load(object sender, EventArgs e)

        {

            SetPos();

        }

        private static void 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 = new FileInfo("C:\\ls.bmp");

            if (!fi.Exists)

            {

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

            }

            //删除文件

            FileInfo a = new FileInfo("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;

        private int nline = 0;

 

        private void button1_Click(object sender, EventArgs e)

        {

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

            {

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

 

            }

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

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

 

        }

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

            StreamWriter writer = new StreamWriter("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 = new Form(); //创建一个新窗体

        Label lab = new Label();

        private void 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 = new Point(100, 150); //调整在窗体上的位置

            f.Controls.Add(lab);

            f.TopLevel = true;

            f.Show();

        }

        private void Form1_Move(object sender, EventArgs e)

        {

            f.Location = this.Location;

 

        }

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

private void button1_Click(object sender, EventArgs e)

        {

          new Thread(show).Start();

          this.Close();

        }

        void show()

        {

            Form2 abc = new Form2();

          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();

        }

  private void 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 = new SqlConnection(str);

            myconn.Open();

            String str2 = "select * from tb_musicInfo";

            SqlDataAdapter myda = new SqlDataAdapter(str2, myconn);

            DataTable myst = new DataTable();

            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;

public static void Main(string[] args)

        {

            //声明互斥体。

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

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

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

            if (!Running)

            {

                Application.Run(new Form1());

            }

            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>

        public static string GetValue(string str, string s, string e)

        {

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

            return rg.Match(str).Value;

        }

2)返回多条

private void button1_Click(object sender, EventArgs e)

        {

            string str = "aa444444bbaa343434bbaa";

            Regex r = new Regex(@"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();//对列表进行自定义排序 

        }

76.过滤HTML代码

/// 除去所有在HTML元素中标记

  public static string StripHTML(string strHtml)

  {

   string strOutput=strHtml;

   Regex regex = new Regex(@"<[^>]+>|</[^>]+>");

   strOutput = regex.Replace(strOutput,"");

   return strOutput;

 

  }

77.判断是否为英文(正则基本用法)

private void button1_Click(object sender, EventArgs e)

        {

            Regex rex = new Regex("[a-zA-Z]+");

         

            if (rex.IsMatch(textBox1.Text))

            {

                MessageBox.Show("英语");

            }

            else

            {

                MessageBox.Show("其他");

            }

 

        }

78.判断是否联网(通过 ping一个固定ip获得返回数据_非正常方法)

1、

Ping p = new Ping(); 

             PingReply pr; 

             pr = p.Send("61.135.169.125");//百度的IP 

             if (pr.Status != IPStatus.Success)//如果连接不成功 

             { 

                 Console.WriteLine("未联网"); 

             } 

             else

             { 

                 Console.WriteLine("已联网"); 

             } 

             Console.Read(); 

2、调用系统API

[DllImport("wininet")]

        private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue);

        private void Form1_Load(object sender, EventArgs e)

        {

            int i;

            if (InternetGetConnectedState(out i, 0))

            {

                MessageBox.Show("OK");

            }

            else

            {

                MessageBox.Show("NO");

            }

            //调用后若已联网 i 的值代表连接方式,如拨号,代理,局域网等……

 

        }

79.跨线程访问控件

 

1. Form.CheckForIllegalCrossThreadCalls = false; //会莫名其妙的报错:

2.//基本没问题:

  this.Invoke((EventHandler)(delegate

            {

                progressBar1.Value += 10;

            }));

80.使用自己的光标文件

this.Cursor=new Cursor("你的光标文件");

 

81.数值间进制转换

int i = 100;

string str = Convert.ToString(i, 2);//16代表16进制,也可以为8,2,10

 

82.将图片画在窗体上(GDI画图片)

Image I = new Bitmap("图片路径");

this.CreateGraphics().DrawImage(I, 0, 0, Width, Height);//图片对象,图片位置X,图片位置Y,图片尺寸宽,图片尺寸高

 

83.将资源文件(Resources)里面的文件释放到硬盘,资源文件导出

byte[] buffer = Properties.Resources.文件名(无后缀);//这个是添加EXE到程序资源时的名称

FileStream FS = new FileStream(Application.StartupPath + "\\UpdatePSEC.exe ", FileMode.Create);//新建文件

BinaryWriter BWriter = new BinaryWriter(FS);//以二进制打开文件流

BWriter.Write(buffer, 0, buffer.Length);//从资源文件读取文件内容,写入到一个文件中

BWriter.Close();

FS.Close();

 

84.窗体置顶——窗体在其他窗口顶端

[DllImport("user32.dll", CharSet = CharSet.Auto)]

private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags);

[DllImport("user32.dll", CharSet = CharSet.Auto)]

private static extern System.IntPtr GetForegroundWindow();

        private void Form1_Load(object sender, EventArgs e)

        {

            SetWindowPos(this.Handle, -1, 0, 0, 0, 0, 1 | 2);

        }

85.屏蔽窗体关闭——监听窗体关闭按钮

protected override void WndProc(ref Message m)

        {

            const int WM_SYSCOMMAND = 0x0112;

            const int SC_CLOSE = 0xF060;

            if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)

            {

                MessageBox.Show("用户点了关闭按纽了");//这里写上要执行的代码

                return;

            }

            base.WndProc(ref m);

        }


 

0 0
原创粉丝点击