發表文章

目前顯示的是有「WinForm」標籤的文章

[工具] 批次產生 QR Code 電子名片

圖片
QRCode 電子名片是什麼?  QRCode 電子名片是一種方便快捷的方式,讓您可以將您的聯絡方式以 QRCode 的形式分享給他人。這個 QRCode 可以包含您的姓名、職稱、公司名稱、電話號碼、電子郵件地址等聯絡資訊。當他人掃描這個QR碼時,這些資訊就會自動地添加到他們的手機聯絡人中,而無需手動輸入。 它的技術術語稱為 "MeCard" 二維條碼,是一種標準的電子名片格式,不知道這是什麼的人請自行 Google 一下,它可以包含各種聯絡資訊。通常,這個格式可以被大多數智能手機和電子郵件客戶端所識別和使用。 目前訪間已經有許多現有的 Web 服務,上傳人員的名片資料後會產生類似下圖的電子名片,但大多數是要註冊會員,大量使用甚至需要收費,而且可能會把員工的個資留在這些 SaaS 廠商的平台上。

Application閒置過久關閉

好久沒有寫網誌了,感覺這裡都快要生蜘蛛網了,今天朋友問了如何判斷一個WindowsForm表單閒置過一定的時間後,自動關閉程式,原本想說使用Form MouseMove & Form Click兩個Event加上Timer來判斷,時間到了自動關閉,但後來確發現要是Form上面有一個很大的Component占據了Form的頁面,這時候Form的Event將抓取不到。 後來發現Application本身有提供一個 Event Idle ,Idle本身在表單停止任何動作的時候會進入一次,如此一來就可以搭配Timer來處理關閉程式的動作了,相關程式碼如下,不過這裡還有一個地方需要注意, Timer在執行的過程中並不算系統Idle ,因此我下面的代碼做了點手腳,在Timer檢查的時候判斷的時間點要比Idle的時間點還要早100毫秒,這樣就可以巧妙的通過檢查了。

C# WinForm使用新字型

圖片
前幾天突然有個問題,以前如果我們需要一個新的字型要使用,我們會將下載回來的字型檔安裝到字型裡面後才繼續使用,但是問題來了,如果我寫了一支程式然後那支程式裡面需要使用到非系統預設的新字型,那麼我們就必須要想辦法讓動態的載入或者安裝字型,因此我上網搜尋了一下整理出以下幾種方式可以進行。

讀寫app.conifg檔案

有時候我們在寫WinForm程式的時候,若沒資料庫而又必須儲存一些參數以方便後續使用的時候,有幾種方法。1. 自己寫文字檔或xml檔儲存,這個我就不在說明了。2. 利用app.conifg來進行資料存取,下面我就針對這項進行簡單的說明。 由於我要利用appSettings來進行存取,因此要存放的檔案必須為基本資料型態的格式,也就是如果你要存放的檔案有多筆、陣列、DataSet、DataTable(雖然可序列化)等等,皆不適用本範例。

WinForm程式實做多語系

//http://www.dotblogs.com.tw/yc421206/archive/2011/02/21/21482.aspx  //http://www.wretch.cc/blog/bigdstut/15822510 string language = this.Input_Language.SelectedValue.ToString(); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); ResourceManager rm = new ResourceManager("PrimeEagle.Leeder.GPSViewer.Form_Setting", Assembly.GetExecutingAssembly()); this.Label_UTCTime.Text = rm.GetString("Label_UTCTime.Text"); this.Label_Heading.Text = rm.GetString("Label_Heading.Text"); this.Label_Rateofturn.Text = rm.GetString("Label_Rateofturn.Text"); this.Label_Speed.Text = rm.GetString("Label_Speed.Text"); this.GroupBox_Position.Text = rm.GetString("GroupBox_Position.Text"); this.Button_DefaultPosition.Text = rm.GetString("Button_DefaultPosition.Text");

C#讀取DBF檔

圖片
最近有玩到一個比較陌生的資料庫,副檔名是.dbf檔,網路查一下是Visual FoxPro的資料庫格是,分享一下如何使用C#來讀取,使用C#讀取dbf檔其實一點也不難,查了一下文件大家都比較推薦使用OLE DB,首先需要下載安裝 Microsoft OLE DB Provider for Visual FoxPro 9.0 ,接下來就可以直接使用C#來操作OLE DB。 //Data Source 為資料庫資料夾的路徑 string strConnection = @"Provider=vfpoledb;Data Source=c:\;Collating Sequence=machine;"; OleDbConnection oleCon = new OleDbConnection(); oleCon.ConnectionString = strConnection; OleDbCommand oleCom = new OleDbCommand(); oleCom.Connection = oleCon; DataTable myTable = new DataTable(); //xxx.dbf為資料庫檔案名稱 string strSql = "select * from [xxxx.dbf]"; oleCom.CommandText = strSql; OleDbDataAdapter oleDap = new OleDbDataAdapter(); oleDap.SelectCommand = oleCom; oleDap.Fill(myTable); 操作畫面如下 本文附件 :  VFPOLEDBSetup.msi  : Visual FoxPro9.0 ReadDBF.rar : Sample Code (需要密碼請留言給我) bar.DBF : 測試資料庫

Windows Form中使用GoogleMap

圖片
儘管GoogleMap在Web上的應用已經很廣泛了,甚至現在都已經開始支援Flash了,但是在桌面應用程式的應用還是很少見,這幾天在網路上Google了一下發現網路上有個免費的元件 GMap.NET 可以讓我們很輕鬆的開發GoogleMap的桌面應用程式,GMap.NET不但支援NET,而且還是開放原始碼提供人家下載,在這裡講了這個多的GMap.NET的好處並不是要教大家使用GMap.NET,因為小弟不才,與其要看他們的原始碼(太複雜了,看完我頭髮也白了),不如我自己寫。

讀取硬碟資訊(調用API)

雖然使用WMI來讀取系統軟硬體各項資訊非常方便,但不知何故,使用WMI讀取Windows2000做業系統的硬碟資訊就是會出錯,因此必須改成調用API的方式來實作。 呼叫方式 HardDiskInfo hdd = AtapiDevice.GetHddInfo(0); // 第一個硬碟 MessageBox.Show("Module Number:" + hdd.ModuleNumber); MessageBox.Show("Serial Number:" + hdd.SerialNumber); MessageBox.Show("Firmware:" + hdd.Firmware); MessageBox.Show("Capacity:" + hdd.Capacity + "M"); 參考網址 如何得到硬盤序列號[C#] 本文範例 : HardInfo.rar

在IE中嵌入WinformControl時安全性問題

圖片
使用Winform控制項來撰寫並嵌入在網頁中,用法就像之前的ActiveX一樣,但有幾點要注意,如果要使用有安全性的方法,如IO,如果沒有開啟 NET的權限的話,將會跳出警告視窗,此方法最大的缺點在於,使用者一定要安裝封裝檔才可正常使用,且只有IE瀏覽器有作用

讀取硬碟序號、主機板序號、MAC位址(使用 WMI)

透過WMI,我們可以很方便的取得主機的各種資訊,下列舉例三種取得硬體資訊的方法,使用前必須先加入using System.Management;命名空間

使用NET內建FTP出現中文檔名變亂碼

本來興高采烈的寫出NET 上傳下載的FTP後測試一切正常,結果在最後階段發現中文檔名出現亂碼(內文正常),查了老半天因為能力不足無法解決,最後只好靠不太會操作的 win32API終於解決了中文檔名的問題,不過也折騰了好幾天,真是要多加油了><。 NET 的FTP改成可以多個檔案上傳並且再最後一的檔案時關閉FTP連線使用ftpReq.KeepAlive = true; NET竟然沒有CLOSE 所以我也沒辦法測試這樣是否真的關閉,至於API部分,由於目前台灣時間是早上五點半,在不睡就要死了,所以改天有機會再寫了

傳統發送mail VS 多執行緒發送mail

最近要寫一個電子報發送程式,由於可能同時點選多封郵件同時發送,通常會寫一個function呼叫執行,但可能會因為太多郵件造成超時,因此必須改成多執行緒發送郵件 傳統方式 //發送電子報 protected void SendMail() { try { MailAddress fromMail = new MailAddress("發信者信箱", "電子報標題", System.Text.Encoding.UTF8); MailAddress toMail = new MailAddress("收件者信箱", "收件者姓名"); MailMessage message = new MailMessage(fromMail, toMail); message.Subject = cobEName.Text; message.Body = "這裡是電子報發送的內容"; message.IsBodyHtml = true; message.Headers.Add("Disposition-Notification-To", "<回傳的mail>"); SmtpClient mailClient = new SmtpClient("SMTPServer"); mailClient.Credentials = new System.Net.NetworkCredential(txtLoginID.Text, txtLoginPwd.Text);//取得或設定驗證資料 //mailClient.EnableSsl = true;//指定 SmtpClient 是否使用 SSL 加密連線 //mailClient.Port = 587; mailClient.Send(message); } catch (Exception ex) { MessageBox....

WinForm 背景圖

在winform表單上加上背景圖,並使Label透明,網路上流傳許多像label1.BackColor = System.Drawing.Color.Transparent這樣的語法,其實是不正確的,這樣只是會讓label標籤的背景跟winform表單 一樣的顏色。 在winform繪製背景圖主要有下列三種方式

使用API關閉特定應用程式

在此舉例開啟了一個IE瀏覽器視窗 //關閉IE [DllImport("user32.dll")] public static extern int FindWindow(string strclassName, string strWindowName); [DllImport("user32.dll")] private static extern int SendMessage( int hWnd,   // handle to destination window int Msg,    // message int wParam, // first message parameter int lParam // second message parameter ); const int WM_KEYDOWN = 0x0100; const int WM_KEYUP = 0x0101; const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060; private void closeIE() { //dd 為開啟網頁的Title int a = FindWindow("IEFrame", "dd - Microsoft Internet Explorer"); if (a > 0) { SendMessage(a, WM_SYSCOMMAND, SC_CLOSE, 0); } }

C# 寄送郵件範例

要使用讓系統可以寄送郵郵件前,必須擁有SMTP伺服器帳號,寄送郵件必須引用命名空間 using System.Web.Mail;,加入以下程式碼,就可以了。 MailMessage myMail = new MailMessage(); myMail.From = "發送者電子郵件"; myMail.Subject = "主旨"; myMail.To = "收件者電子郵件"; myMail.Bcc = "副本使用者"; myMail.BodyFormat = MailFormat.Html; //使用html格式寄送 myMail.Body = "內容"; SmtpMail.SmtpServer = "SMTP"; SmtpMail.Send(myMail);

透過 Google SMTP 寄送郵件

圖片
要使用Gmail 來寄送郵郵件前,必須擁有 gamil 帳號,寄送郵件必須引用命名空間 using System.Net; 在 Form 內部加入以下程式碼,就可以了。

Mutex 的使用方法(預防程式啟動多次)

同一隻程式不可以啟動兩次(含)以上...可以這樣處理,打開Program.cs,引用 using System.Threading; 命名空間後,在 class 內部加入以下程式碼,就可以了。

SQL SERVER 資料庫線上備份還原

本範例非離線備份,離線備份常用於ACCESS資料庫,因為ACCESS允許檔案直接複製 資料備份語法

多個檔案共用一個App.config

app.config檔案的內容 <configuration> <connectionstrings> <add connectionstring="XXXX" name="Test4" providername="System.Data.SqlClient"/> <appsettings> <add key="Test1" value="這是組態檔第一筆資料"/> <add key="Test2" value="這是組態檔第二筆資料"/> <add key="Test3" value="這是組態檔第三筆資料"/> </appsettings> </configuration>

樂透彩寫法(陽春到不行版)

最近有幾個朋友去面試,公司都要求寫樂透,現在是怎樣><,雖然網路上一堆,不過我試著自己寫一個,大家參考看看