C#编程实用小技巧_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#编程实用小技巧

C#编程实用小技巧

 2017/7/23 5:32:15  wintorkit  程序员俱乐部  我要评论(0)
  • 摘要:01、在C#应用程序中如何在运行时将窗口最大化?02、利用C#编写Web下的邮件发送程序03、C#DOS控制台程序连接SQLServer数据库的方法04、C#中ListView的简单使用说明05、C#中加载图片与读取图片上的像素点方法06、窗体间传递复杂数据07、如何在.net的应用程序运行其它的EXE文件?08、如何检测当前操作系统?09、如何获取正在运行程序的路径?10、如何查看电脑中已经安装的所有程序集?11、如何用System.Windows.Forms.Application
  • 标签:C# 实用 技巧 编程
01、在C#应用程序中如何在运行时将窗口最大化?

02、利用C#编写Web下的邮件发送程序

03、C#DOS控制台程序连接SQLServer数据库的方法

04、C#中ListView的简单使用说明

05、C#中加载图片与读取图片上的像素点方法

06、窗体间传递复杂数据

07、如何在.net的应用程序运行其它的EXE文件?

08、如何检测当前操作系统?

09、如何获取正在运行程序的路径?

10、如何查看电脑中已经安装的所有程序集?

11、如何用System.Windows.Forms.Application.CompanyName设置公司名称?

12、如果用户的电脑没有安装.NET运行框架,是否可以运行.NET的程序?

13、如何获取本地的IP地址?

14、如何确保在C#中只有一个程序(实例)运行?

15、如何把所有的系统中正在运行的所有进程显示出来呢?

16、如何列出所有正在运行的应用程序呢?

01、在C#应用程序中如何在运行时将窗口最大化?(TOP)
  可以使用FormWindowState 枚举,代码如下所示:
  private void Form1_Load(object sender, System.EventArgs e)
    {
         //实现C#打开后的窗口最大化;
         this.WindowState = FormWindowState.Maximized;
    }

02、利用C#编写Web下的邮件发送程序(TOP)
  创建一个C#项目中的APS.NET Web应用程序,命名为EmailPage;
  按下图所示添加各控件,并对各控件进行命名。注意:要将HTML控件FileField设置为服务器控件运行。

  查看WebForm1.aspx的HTML源代码,修改标签,添加属性设置encType="multipart/form-data";
  在C#代码中添加对命名空间System.Web.Mail的引用(需要使用该名称空间下的MailMessage类和SmptMail类),MailMessage类对象用来设定要发送邮件的相关信息,如收件人,发件人,主题,内容,优先级,格式以及附件;使用SmptMail类的Send方法将MailMessage对象发送出去。
  注:要在C:\Inetpub\wwwroot目录下创建一个temp文件夹,用于将酵文件上传到Web临时目录下,然后将服务器上的文件路径赋给MailMessage对象的Attachments属性即可。
  “发送”按钮的事件如下:
  private void btnSend_Click(object sender, System.EventArgs e)
  {
   //创建一个MailMessage对象
   MailMessage aMail = new MailMessage();
   //收信人地址
   aMail.To = txtTo.Text ;
   //发信人地址
   aMail.From = txtFrom.Text ;
   //主题
   aMail.Subject = txtSubject.Text;
   //正文
   aMail.Body = txtBody.Text ;
   //优先级
   aMail.Priority = (MailPriority)ddPriority.SelectedIndex ;
   //正文格式
   aMail.BodyFormat = (MailFormat)ddBodyFormat.SelectedIndex ;
   ddPriority.SelectedIndex = 1;
   ddBodyFormat.SelectedIndex = 0;
  
   if (File1.PostedFile.FileName  != "" )
   {
    //上传文件的文件名(含完整路径)
    string fileName = File1.PostedFile.FileName;
    fileName = fileName.Substring (fileName.LastIndexOf (@"\"));
    //使用SaveAs方法,将文件保存在项目路径\temp目录下,
    //需要在项目路径下创建temp目录
    fileName = Server.MapPath(@"\temp\" + fileName);
    //要在C:\Inetpub\wwwroot文件夹下创建temp文件夹用于存放临时发送的文件
    File1.PostedFile.SaveAs(fileName);
    //添加附件
    aMail.Attachments.Add(new MailAttachment(fileName));
   }
  
   string result = "";
   try
   {
    //发送邮件
    SmtpMail.Send(aMail);
    result = "Email 发送成功!";
   }
   catch(Exception ex)
   {
    result = "Email 发送失败。" + ex.Message ;
   }
   Response.Write (" ");
  }

03、C#DOS控制台程序连接SQLServer数据库的方法(TOP)

①、建立一个C#的DOS控制台应用程序;
②、添加命名空间:using System.Data.SqlClient;;
③、连接到数据源,通过创建一个使用连接字符串的连接对象来完成:
SqlConnection connection = new SqlConnection(@"Data Source=MySER;Integrated Security=SSPI;Initial Catalog=pubs");
  其中的MySER是安装了SQLServer的服务器名;pubs是SQLServer上的数据库名。
④、打开连接对象,建立到数据库的连接:
connection.Open();
⑤、创建对象命令,并给它提供SQL命令(从TN_RP表中选取 Ccname, MI_SQL_X,MI_SQL_Y 字段):
SqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT Ccname, MI_SQL_X,MI_SQL_Y from TN_RP";
⑥、使用DataReader以只读方式获取数据结果:
SqlDataReader reader = command.ExecuteReader();
⑦、从DataReader中获取数据:
while(reader.Read())
{
Console.WriteLine("{0}{1}\t{2}",reader["Ccname"],reader["MI_SQL_X"],reader["MI_SQL_Y"]);
}
⑧、关闭DataReader和SqlConnection。

04、C#中ListView的简单使用说明(TOP)
  在C#工程中添加一个ListView控件,控件名称为listView1。
  分别设置其属性:View为Detail,然后为其Column增加项。
  添加List项的代码部分如下:
while(reader.Read())
{
    string[] subItem={i.ToString(),reader["Ccname"].ToString(),reader["MI_SQL_X"].ToString(),reader["MI_SQL_Y"].ToString()};
    //定义每个项的子串;这里是每个列表项有四个条目;
    ListViewItem item = new ListViewItem(subItem);
    listView1.Items.Insert(i,item);
    i++;
}
  读取的方法是:
private void button1_Click(object sender, System.EventArgs e)
{
   MessageBox.Show(listView1.SelectedItems[0].SubItems[1].Text.ToString());
   //SelectItems[0]是所选项的第一个(因为有MutiSelect属性),SubItems[1]是所选项的第二个列的值
}

05、C#中加载图片与读取图片上的像素点方法(TOP)
(1)在.NET中创建一个窗体,加入pictureBox控件。设置其Image为空,SizeMode属性设为AutoSize;
(2)加入一个button控件,用于打开图片文件;
(3)加入三个textBox控件,用于表示RGB三个颜色的值。
(4)定义一个私有变量pick为布尔值,来表示是否拾取图片上的颜色。并在Form1_Load中将其设置为false;再加入一个public Bitmap myBitmap用来进行函间的访问。
(5)为button控件增加click事件,该事件主要是完成读入文件和对pictureBox控件的初始化:
   OpenFileDialog of = new OpenFileDialog();
   of.Filter = "JPG图像(*.jpg)|*.jpg|BMP图像(*.bmp)|*.bmp|所有文件(*.*)|*.*";
   of.FilterIndex = 0;
   of.ShowDialog();
   String filename = of.FileName.ToString();

   //在此处加载一个新的图片。
   this.myBitmap = new Bitmap(filename);
   // Stretches the image to fit the pictureBox.
   pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
   Bitmap myImage = this.myBitmap;//new Bitmap(fileToDisplay);
   //pictureBox1.ClientSize = new Size(xSize, ySize);
   pictureBox1.Image = (Image) myImage ;
   //设置当前窗体与图片大小相当
   this.ClientSize = new Size(pictureBox1.Width+20,pictureBox1.Height+60);
   pick = true;//设为TRUE可以开始读取像素点。
(6)为pictureBox控件增加mousemove事件:
   if (pick)
   {
    Color pixelColor = this.myBitmap.GetPixel(e.X,e.Y);
    //pixelColor = Color.FromArgb(255,0,0);//可以以此方法对COLOR变量进行RGB值设置。
    textBox1.Text = pixelColor.R.ToString();
    textBox2.Text = pixelColor.G.ToString();
    textBox3.Text = pixelColor.B.ToString();
   }

06、窗体间传递复杂数据(TOP)
源代码下载请点这里
  在设计窗体程序时往往需要相互调用的窗体间传递复杂的数据,有时候甚至需要子窗体修改父窗体的内容。前一阵在博客园中看到很多人讨论这个问题,在海天一鸥《窗体间传值和窗体间互操作》的评论中,我看到有这么几种做法:1)公开一个静态变量;2)在子窗体中创建一个公有字段;3)在父窗体中使用委托与事件;4)将子窗体作为父窗体成员。
  这些办法我感觉都不是特别好,会导致父窗体与子窗体耦合过于紧密,对任何一个窗体的修改需要重新编译另外一个窗体。根据“依赖倒置”的原则,通过引入一个结果对象,就可以避免这种紧耦合,同时也可以传递任意复杂的数据。如果需要在子窗体中改变父窗体状态,也可以在这个结果对象中定义委托与事件来达到目的。我在这里给出我的解决方案。
  首先定义一个结果对象,用来存放子窗体返回的结果。同时定义一些事件,可以让子窗体修改父窗体的状态。代码如下:
usingSystem;
namespaceWinParam
{
  publicdelegatevoidTextChangedHandler(strings);
  publicclasscResult
  {
    publicstringResult1="";
    publicstringResult2="";
    publiceventTextChangedHandlerTextChanged;
    publicvoidChangeText(strings)
    {
      if(TextChanged!=null)
        TextChanged(s);
    }
  }
}
  添加一子窗体构造函数,允许接收一结果对象:
privatecResultr;
publicfrmChild(cResultr):this()
{
  this.r=r;
}
  在父窗体中创建子窗体,并订阅cResult事件:
privatevoidbtnCallChild_Click(objectsender,System.EventArgse)
{
  cResultr=newcResult();
  r.TextChanged+=newTextChangedHandler(this.EventResultChanged);
  frmChildfc=newfrmChild(r);
  fc.ShowDialog();
  txtCallResult.Text="TheResultis: "+r.Result1+" "+r.Result2;
}
privatevoidEventResultChanged(strings)
{
  txtEventResult.Text=s;
}
  这样确保父窗体知道子窗体,而子窗体不知道父窗体。父窗体改变后不需要重新编译子窗体。同时两个窗体都依赖于结果对象,结果对象的稳定性也决定了父窗体与子窗体关系的稳定性。下面是程序运行结果:
  注:提供的代码仅仅是功能演示,如果实际使用需要添加一些额外辅助代码(对象释放、取消事件订阅等)。

07、如何在.net的应用程序运行其它的EXE文件?
解答:主要应用System.Diagnostics名字空间中的Process类
主要代码:
    Process proc = new Process();
    proc.StartInfo.FileName = @"D:\Program Files\Foxmail\Foxmail.exe"; //可以用绝对路径
    proc.StartInfo.Arguments = "";
    proc.Start();

08、如何检测当前操作系统?
解答:应用System名字空间中的Environment类
主要代码:
    string versionText = Environment.OSVersion.Version.ToString();

09、如何获取正在运行程序的路径?
解答:调用Application类中的ExecutablePath静态成员获取路径
主要代码:
    textBox1.Text = Application.ExecutablePath;

10、如何查看电脑中已经安装的所有程序集?
解答:.Net Framework把所有的程序集安装在系统安装盘\winnt\Assembly(隐含)目录下,查看属性可以看到该程序集的所有详细资料。

11、如何用System.Windows.Forms.Application.CompanyName设置公司名称?
解答:在Assembly中设置,VS.Net的开发环境中是在 AssemblyInfo.cs(vb)的文件中设置的,打看文件可以
公司信息和版本等信息
主要代码:
    [assembly: AssemblyCompany("天极网蚕蛹-版权所有")]

12、如果用户的电脑没有安装.NET运行框架,是否可以运行.NET的程序?
解答:不可以,必需安装.NET Framework
可在下面地址下载http://msdn.microsoft.com/library/default.asp?url=/downloads/list/netdevframework.asp

13、如何获取本地的IP地址?
解答:在名字空间System.Net中定义了一个类Dns,其中有一个方法GetHostByName(),用来返回IPHostEntry 对象,此对象有一个属性是AddressList,此属性是一个IPAddress类型的数组,包含了计算机此时的所有的IP地址信息,包含了拨号上网得到的临时分配的IP地址和局域网固定的IP地址
主要代码:
    string s="";
    System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
    for (int i = 0; i < addressList.Length; i ++)
    {
        s += addressList[i].ToString();
    }

14、如何确保在C#中只有一个程序(实例)运行?
解答:主要应用System.Diagnostics名字空间中的Process类来实现,思路,我们在运行程序前,查找进程中是否有同名的进程,同时运行位置也相同程,如是没有运行该程序,如果有,就将同名的同位置的程序窗口置前.
主要代码:
    public static Process RunningInstance()
    {
        Process current = Process.GetCurrentProcess();
        Process[] processes = Process.GetProcessesByName (current.ProcessName);
        //查找相同名称的进程
        foreach (Process process in processes)
        {
            //忽略当前进程
            if (process.Id != current.Id)
            {
                //确认相同进程的程序运行位置是否一样.
                if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
                {
                    //Return the other process instance.
                    return process;
                }
            }
        }
        //No other instance was found, return null.
        return null;
    }

15、如何把所有的系统中正在运行的所有进程显示出来呢?
解答:用System.Diagnostics名字空间中的Process.GetProcess()静态成员
主要代码:
    Using System.Diagnostics;
    ...
    foreach ( Process p in Process.GetProcesses() )
        Console.WriteLine( p ); // string s = p.ToString();

16、如何列出所有正在运行的应用程序呢?
解答:可有用EnumWindows 函数将枚举计算机上的所有现有窗口,但我们用System.Diagnostics名字空间的静态函数Process.GetProcesses()可以避免EnumWindows的互操作性问题。
主要代码:
    Using System.Diagnostics;
    ...
    foreach ( Process p in Process.GetProcesses(System.Environment.MachineName) )
    {
        if( p.MainWindowHandle != IntPtr.Zero)
        {
            //显示用户程序名
            Console.WriteLine( p ); // string s = p.ToString();
        }
    }
发表评论
用户名: 匿名