• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            個人整理-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();
                    }
                }

            posted on 2005-11-24 09:19 夢在天涯 閱讀(2820) 評論(4)  編輯 收藏 引用 所屬分類: C#/.NET

            評論

            # C#加載圖片問題 2007-08-18 19:55 阿國

            假如我有10張圖片或更多,我想像用imagelist一樣 存在一個集合里 用索引調用 又不想直接放在程序目錄下讓人看見 我應該怎么做  回復  更多評論   

            # re: 個人整理-C#編程實用小技巧- - 2007-08-19 20:27 夢在天涯

            直接加載到資源里,應該就可以不放到目錄下了,應該是你說的要求!  回復  更多評論   

            # re: 個人整理-C#編程實用小技巧- - 2007-10-05 18:18 深圳瑜伽

            國慶快樂哦。。。。。
              回復  更多評論   

            # re: 個人整理-C#編程實用小技巧- - 2007-10-08 10:47 人才招聘

            上班也快樂^_^  回復  更多評論   

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804603
            • 排名 - 5

            最新評論

            閱讀排行榜

            日本国产精品久久| 最新久久免费视频| 久久久久久综合一区中文字幕| 久久狠狠高潮亚洲精品| 99久久精品国产一区二区蜜芽 | 久久精品不卡| 亚洲日韩中文无码久久| Xx性欧美肥妇精品久久久久久| 波多野结衣AV无码久久一区| 99久久这里只有精品| 亚洲AV乱码久久精品蜜桃| 久久综合久久伊人| 狠狠综合久久综合中文88| 久久国产乱子精品免费女| 色欲久久久天天天综合网| 久久精品国产精品亚洲人人 | 久久久久久a亚洲欧洲aⅴ| 亚洲国产综合久久天堂| 久久夜色精品国产亚洲| 狠狠色噜噜色狠狠狠综合久久| 伊人热人久久中文字幕| 人妻精品久久无码专区精东影业| 久久久久亚洲精品无码网址| 亚洲av日韩精品久久久久久a| 亚洲精品综合久久| 国产成人99久久亚洲综合精品| 日本久久久久亚洲中字幕| 免费无码国产欧美久久18| 日日狠狠久久偷偷色综合96蜜桃| 91精品国产91久久久久福利| 欧美精品久久久久久久自慰| 久久精品国产99国产精品导航| 午夜天堂av天堂久久久| 亚洲а∨天堂久久精品9966| 久久天天躁狠狠躁夜夜av浪潮 | 午夜精品久久久久久99热| 一个色综合久久| 日本欧美久久久久免费播放网| 一本一本久久a久久综合精品蜜桃| 亚洲色欲久久久久综合网| 亚洲国产成人精品无码久久久久久综合 |