`

C#编程实用小技巧

    博客分类:
  • 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();
        }
    }
分享到:
评论

相关推荐

    几个C#编程的小技巧

    几个C#编程的小技巧 ***** 最小化窗口 ***** 如何让Foreach 循环运行的更快 ***** 将图片保存到一个XML文件 ***** 屏蔽CTRL-V ***** 判断文件或文件夹是否存在 ***** 使用delegate类型设计自定义事件 ***** IP与...

    windows应用高级编程-C#编程篇

    另外,本书读者还要求具备一定的C#编程基本技能并熟悉数据库的概念。 目录 第1章 Windows编程基础 1.1 Windows和窗体 1.1.1 Windows窗体的概念 1.1.2 System.Windows.Forms命名空间 1.2 Visual Studio.NET IDE简介 ...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

    c#编程实例代码100例.rar

    这个压缩包中的100个实例代码旨在帮助开发者深入理解和熟练掌握C#编程技巧。 首先,让我们来看看C#的基础知识。C#语法与C++和Java有诸多相似之处,但它引入了许多现代化的特性,如自动垃圾回收、类型安全和异常处理...

    C#编程练习实现操作系统经典算法

    在本资源包中,我们聚焦于使用C#编程语言实现操作系统中的经典算法。这些实践项目不仅可以帮助深化对操作系统的理解,也有助于...无论你是操作系统初学者还是希望提升C#编程技巧,这个资源包都能提供宝贵的学习机会。

    c#一些常用实用技巧

    在C#编程语言中,掌握一些实用技巧可以显著提高开发效率和代码质量。这篇文档将深入探讨几个关键的C#技巧,旨在帮助初学者更好地理解和运用C#。 1. **Lambdas表达式**:Lambda表达式是C#中一种简洁的函数表示方式,...

    C# 常用编程技巧 新手速成必备!

    在C#编程中,掌握一些常用的技巧可以极大地提升开发效率和代码质量。以下是一些关键知识点的详细说明: 1. **不规则窗体**:在C#.NET中,可以使用`Windows Forms`库创建不规则形状的窗体,通过重写`OnPaint`方法并...

    C#XML入门经典 C#编程人员必备的XML技能

    总结,XML是C#编程中的重要工具,理解和掌握XML以及如何在C#中有效地使用它,是每个C#开发者必备的技能。无论是数据交换、配置管理还是界面绑定,XML都能发挥关键作用,提升代码的可读性和维护性。通过不断实践和...

    近100多个c#开发小技巧,.net实例源代码.

    本文将深入探讨近100个C#开发小技巧,这些技巧覆盖了从基础语法到高级特性,旨在提升开发效率,优化代码质量,并提供实际可运行的.NET实例源代码。 1. **Linq查询优化**:使用LINQ可以极大地简化数据操作,但需要...

    C#初学者编程实例

    这个压缩包可能包含了多个源码文件,每个文件都是一个精心设计的小项目,用于讲解和实践C#的基础概念和编程技巧。 1. **C#语言基础**:C#是一种面向对象的语言,它的语法结构清晰,易于理解。初学者应首先了解变量...

    c#实用编程

    这个压缩包中的“经典范例50讲”很可能包含了50个不同主题的C#编程实例,涵盖了上述各个知识点的实践应用。每个例子可能涉及特定的编程技巧或解决实际问题的策略,通过学习这些例子,开发者能更好地理解和掌握C#的...

    C#实现小游戏编程游戏

    这些小游戏的实现不仅锻炼了编程技巧,也涵盖了基础的图形用户界面设计、事件处理、数据结构和算法等多个方面,是学习C#编程的绝佳实践。通过这些项目,开发者可以深入理解C#语言特性,提高逻辑思维和问题解决能力。

    C#net编程的七个小技巧

    本文将详细解析七个C# .NET编程中的实用小技巧,旨在提升开发效率,优化代码质量。 1. **使用using语句块管理资源** 在处理如文件流、数据库连接等需要手动释放的资源时,`using`语句块是必不可少的。它确保了即使...

    c#网络编程

    该书在《C#网络应用编程基础》介绍的基础知识之上,进一步讲解了利用C#进行各种高级应用编程的方法和技巧。全书语言简洁,重点突出,思路清晰,实用性强。教材紧跟C#和Microsoft Visual Studio开发工具最新版本的...

    C#经典编程220例 源码

    《C#经典编程220例 源码》是一个包含丰富示例的资源集合,旨在帮助学习者深入理解和掌握C#编程语言的核心概念和技术。这个压缩包包含了从第1章到第20章的全部源代码,这些章节涵盖了C#编程的基础到进阶的主题。虽然...

    使用C#编写2048小游戏

    在本项目中,我们主要探讨的是如何使用C#编程语言来实现经典的2048小游戏。2048是一款基于数字合并的益智游戏,玩家通过上下左右移动棋盘上的数字方块,使得相同数字的方块能够合并,最终目标是生成一个值为2048的...

    Visual C#2005编程技巧大全

    以上各章涵盖了Visual C# 2005的基础到进阶知识,通过深入学习这些内容,开发者可以成为C#编程的专家,掌握从简单应用到复杂系统的开发技能。每个章节都值得深入研究,因为它们构成了C# 2005编程的坚实基础。

    C#实现2048小游戏

    本文将深入探讨如何使用C#编程语言,结合界面设计,实现一个类似2048的小游戏。 一、C#基础 C#是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台上的应用开发。它的语法简洁明了,支持类、接口、...

    好玩又有很多技巧的C#编程实例 在线大头贴.rar

    【标题】"好玩又有很多技巧的C#编程实例 在线大头贴.rar" 提供了一个有趣的学习场景,涉及的是利用C#编程语言开发一个在线大头贴应用。这个压缩包可能包含了一系列的代码示例、教程或者项目文件,用于帮助初学者或有...

Global site tag (gtag.js) - Google Analytics