Mã hóa và giải mã trong C#
public string Encrypt(string toEncrypt, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt);
if (useHashing)
{
var hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes("iloveit1208"));
}
else keyArray = Encoding.UTF8.GetBytes("iloveit1208");
var tdes = new TripleDESCryptoServiceProvider
{
Key = keyArray,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
Để giải mã chuỗi đã được mã hóa, ta dùng hàm Decrypt sau:
public string Decrypt(string toDecrypt, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
if (useHashing)
{
var hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes("iloveit1208"));
}
else keyArray = Encoding.UTF8.GetBytes("iloveit1208");
var tdes = new TripleDESCryptoServiceProvider
{
Key = keyArray,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = tdes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
Ví dụ cách sử dung:
string s=”Chao mung cac ban den boi blog cua iloveit1208”;
string mahoa=Encrypt(s,true);
string giaima=Decrypt(mahoa,true);
Chúc các bạn thành công!
Kết nối C# với MySQL
using System.Data.Odbc;
private void Testdb() {
try{
//Connection string dùng DSN và MyODBC 3.51
string MyConString = "DSN=MySQL";
//hoặc Connection string dùng trực tiếp Provider MyODBC 3.51
/*string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +
"SERVER=NgocDV;" +
"DATABASE=test;" +
"UID=zensoft;" +
"PASSWORD=nssh;" +
"OPTION=3";
*/
//tạo connection tới database
OdbcConnection MyConnection = new OdbcConnection(MyConString);
MyConnection.Open();
//xóa table testdb nếu đã có rồi
OdbcCommand MyCommand = new OdbcCommand("DROP TABLE IF EXISTS testdb",MyConnection);
MyCommand.ExecuteNonQuery();
//Tạo lại table testdb có 3 field
MyCommand.CommandText = "CREATE TABLE testdb(hoten varchar(40),namsinh int, diachi varchar(50))";
MyCommand.ExecuteNonQuery();
//Thử thêm 1 record dữ liệu
MyCommand.CommandText = "INSERT INTO testdb VALUES('Dao Van Ngoc',1983,'An Dong, An Duong, HP')";
MyCommand.ExecuteNonQuery();
//Thử thêm 1 record dữ liệu nữa
MyCommand.CommandText = "INSERT INTO testdb VALUES('Duong Thu Son',1983,'Trai Chuoi, Hong bang, Hp')";
MyCommand.ExecuteNonQuery();
//Thử thêm 1 record dữ liệu nữa
MyCommand.CommandText = "INSERT INTO testdb VALUES('Pham Tuan Hai',1985,'294 Tran Nguyen Han, HP')";
MyCommand.ExecuteNonQuery();
//Thử thêm 1 record dữ liệu nữa
MyCommand.CommandText = "INSERT INTO testdb VALUES('Nguyen Ha Son',1985,'10/10 Lạch tray, HP')";
MyCommand.ExecuteNonQuery();
//Hiệu chỉnh thử 1 field của 1 số record thỏa điều kiện
MyCommand.CommandText = "UPDATE testdb SET namsinh=1984 WHERE namsinh=1985";
MyCommand.ExecuteNonQuery();
//Đếm số record hiện có
MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM testdb";
Console.WriteLine("Total Rows: " + MyCommand.ExecuteScalar());
//Duyệt đọc và hiển thị các record trong table
MyCommand.CommandText = "SELECT * FROM testdb";
OdbcDataReader MyDataReader;
MyDataReader = MyCommand.ExecuteReader();
while (MyDataReader.Read()) {
Console.WriteLine("Data: " + MyDataReader.GetString(0) + ", " +
MyDataReader.GetInt32(1) + ", " +
MyDataReader.GetString(2)); //BIGINTs not supported by MyODBC
}
//Đóng các đối tượng đã dùng
MyDataReader.Close();
MyConnection.Close();
}
catch (OdbcException MyOdbcException) {//Catch tất cả lỗi exception
for (int i=0; i < MyOdbcException.Errors.Count; i++) {
Console.Write("ERROR #" + i + "\n" + "Message: " +
MyOdbcException.Errors[i].Message + "\n" + "Native: " +
MyOdbcException.Errors[i].NativeError.ToString() + "\n" +
"Source: " + MyOdbcException.Errors[i].Source + "\n" +
"SQL: " + MyOdbcException.Errors[i].SQLState + "\n");
}
}
}
Những phần mềm hỗ trợ hay dành cho Visual Studio
Trang chủ: http://www.codeproject.com
Sau khi cài đặt, Code Project Browser sẽ tích hợp vào menu Tools của VS, bạn chỉ việc nhấn vào đây để bắt đầu. Chú ý là trong lần chạy đầu tiên, bạn cần nhập địa chỉ email và mật khẩu mà bạn đã đăng kí trên The Code Project.
Không chỉ là trình duyệt, công cụ này còn cho phép bạn mở mã nguồn mẫu của các bài báo chỉ với vài cú nhấn chuột. Thay vì phải tải về mã nguồn, giải nén và mở bằng VS, Code Project Browse làm tất cả việc này cho bạn.
Khi nhấn vào một link file .zip chứa mã nguồn, bạn sẽ được hỏi có mở dự án này không. Nếu có, add-in này sẽ tải dự án về, giải nén trong thư mục My Documents/ My Code Project Downloads và mở nó trong VS. Hơn thế nữa, bạn còn có thể quản lý các bài báo/dự án yêu thích trên Code Project thông qua công cụ này.
Bạn sẽ không phải duyệt Code Project bằng trình duyệt thông thường thêm một lần nào nữa! Bạn có thể tải và cài đặt add-in này từ địa chỉ http://www.codeproject.com/csharp/cpbrowser.asp
Ankhsvn: Quản lý phiên bản với Visual Studio
Trang chủ: http://ankhsvn.tigris.org
AnknSVN phiên bản mới nhất là 1.0.1.2736 (stable), dung lượng 3.88 MB, tải về tại địa chỉ:
http://ankhsvn.tigris.org/servlets/ProjectDocumentList?folderID=7315
Chú ý là để sử dụng AnkhSVN bạn cần tải và cài đặt Subversion trước. Phiên bản hiện tại là 1.45, tải từ địa chỉ: http://subversion.tigris.org/project_packages.html
Trang chủ: http://joel.fjorden.se/static.php?page=CodeStyleEnforcer
Code Style Enforce là một plug-in của DXCode cho Visual Studio 2005, giúp kiểm tra mã nguồn thông qua các quy tắc đã được định nghĩa sẵn. Được phát triển cho C#, nhưng CSE có thể làm việc với VB .NET (chưa được kiểm tra). Chuẩn mã nguồn hiện có thể cấu hình với những quy tắc nhất định. Quy tắc mặc định dựa trên chuẩn viết mã C# của IDesign (http://www.idesign.net), đây là chuẩn viết mã hoàn chỉnh nhất hiện có và có thể tải về miễn phí.
Mỗi khi mở một dự án mới, Code Style Enforcer sẽ hỏi bạn sử dụng các quy tắc chung dành cho tất cả các dự án hay dành riêng cho từng dự án một. Điều này rất có ích nếu bạn cùng lúc tham gia làm nhiều dự án với nhiều nhóm khác nhau.
Code Style Enforcer sẽ gạch chân những biến, method không tuân theo quy tắc, tất cả những gì bạn cần làm là nhấn chuột phải và chọn Correct CSE Violation, với 2 tùy chọn nhỏ hơn: Sửa ngay lập tức theo những gì mà công cụ đề xuất, hay xem trước những thay đổi đối với mã của bạn (chỉ xuất hiện trong một số trường hợp):
Code Style Enforcer hiện chỉ chạy được trên Visual Studio 2005, do công cụ này hoàn toàn dựa trên .NET 2.0. Phiên bản mới nhất là 2.1.29, dung lượng 564KB. Cần chú ý, để cài đặt, trước tiên bạn cần tải và cài đặt bổ sung DXCore cho Visual Studio, phiên bản mới nhất là 2.5.1, dung lượng 17.3MB, tải về từ địa chỉ http://www.devexpress.com/Downloads/NET/IDETools/DXCore/
Pinvoke.net: Đơn giản hóa Windows API
Trang chủ: http://www.Pinvoke.net
Sau khi cài đặt, PInvoke sẽ xuất hiện trong một menu riêng của Visual Studio. Khi cần sử dụng hàm API nào, bạn sẽ có 2 tùy chọn: Insert PInvoke signature: sử dụng các signature đã có sẵn của plug-in này hay là truy cập đến PInvoke.net để sử dụng các đoạn mã (có thể) chính xác và đầy đủ hơn.
PInvoke.Net tương thích với Visual Studio.NET 2003 (7.1) trở lên, chưa hỗ trợ VS 2008, dung lượng chỉ có 288 KB.
Power Toys Pack Installer: Luôn cập nhật Visual Studio của bạn
Trang chủ: http://www.codeplex.com/
Chương trình hiện có phiên bản mới nhất 1.0.1, dung lượng 504 KB, không cần cài đặt. Tải về từ địa chỉ: http://www.codeplex.com/PackInstaller/Release/ProjectReleases.aspx?ReleaseId=4274
Trang chủ: http://www.roland-weigelt.de/ghostdoc .
Công cụ này cho phép tự động tạo comment theo định dạng XML cho một method từ kiểu, tham số, tên của nó cũng như các thông tin ngữ cảnh khác. Tất cả những việc bạn cần làm là chọn một method cần chú thích, nhấn chuột phải và chọn Document This. Điều tuyệt vời là GhostDoc cho phép bạn thiết lập định dạng Comment và những quy tắc đoán tên kiểu, tham số... cho phù hợp với phong cách viết mã của bạn.
Sau khi cài đặt, GhostDoc sẽ bổ sung thêm vào Menu Tools của VS một Submenu với 2 mục nhỏ hơn: Configure GhostDoc cho phép cấu hình GhostDoc và Document This (đôi khi sẽ disable) sẽ tự động comment cho file .cs hiện tại.
Mặc dù GhostDoc không phải lúc nào cũng làm việc chính xác, nhưng công cụ này rất đáng cho bạn sử dụng.
Hiện phiên bản mới nhất của GhostDoc là 2.1.1, dung lượng 898KB. Có 2 phiên bản dành riêng cho Visual Studio 2005 và 2008, đều hỗ trợ VB (có hạn chế) và Windows Vista. Phiên bản gần nhất dành cho VS 2003 là 1.30, chỉ hỗ trợ C# và không hỗ trợ Vista.
CodeKeep: Quản lý và chia sẻ Codesnippets
Trang chủ: http://www.codekeep.net .
CodeKeep nâng Code Snippets lên một tầm cao mới khi cho phép các lập trình viên trao đổi, chia sẻ các Snippet mà mình tạo ra. Điều này giúp bạn tiết kiệm được rất nhiều thời gian và sức lực, đồng thời đặc biệt hữu ích cho các bạn lập trình viên trẻ muốn học hỏi kinh nghiệm từ các "Guru".
Để có thể sử dụng CodeKeep, bạn phải tạo một account mới tại trang chủ của dự án này. Account này cho phép bạn tải lên và chia sẻ các snippet dễ dàng hơn.
CodeKeep sẽ thêm một submenu với 5 tính năng thiết lập, quản lý, duyệt, tìm kiếm và bổ sung để bạn làm việc với snippet. Trong đó đáng kể nhất là chức năng tìm kiếm. Mỗi khi cần bổ sung đoạn mã làm công việc nhất định mà không muốn phải tự viết code, bạn có thể sử dụng tính năng này để tìm kiếm các snippet thực hiện công việc tương tự. Chỉ việc gõ từ khóa, chẳng hạn Shutdown Windows, nhấn nút Go, đợi trong giây lát và chọn snippet phù hợp để sử dụng. Thật là tiện lợi!
Phiên bản mới nhất của công cụ này là 2.5, chỉ tương thích với Visual Studio 2005, dung lượng 85KB, tải tại địa chỉ: http://www.codekeep.net/downloads/CodeKeepVS2005Addin2.5.zip.
Lời kết: trên đây chỉ là những bổ sung phổ biến nhất cho Visual Studio. Chắc chắn còn nhiều bổ sung hữu ích khác mà bài viết chưa nói tới, rất mong được các bạn trao đổi, chia sẻ kinh nghiệm. Ngoài ra, các bổ sung tuy hay, nhưng đồng thời chúng cũng làm Visual Studio nặng nề hơn, dễ bị "crash" hơn, vì vậy các bạn nên thận trọng và chỉ sử dụng các bổ sung thật sự cần thiết với mình.
Xây dựng Windows Service với C# – Phần 6
Xây dựng Windows Service với C# – Phần 5
Tạo một trình ứng dụng loại Setup để cài đặt (Install)Service:
Bước 13:
Từ menu à File --> Add Project --> New Project.
Đặt tên Projects là SetupGiamSatThuMuc
Bước 14:
Trong cửa sổ Solution Explorer, click phải chuột tại SetupGiamSatThuMuc --> Add Project Output
Từ cửa sổ Add Project Output Group --> chọn Primary Output --> click OK
Bước 15:
Trong cửa sổ Solution Explorer, click phải chuột tại mục SetupGiamSatThuMuc -->View --> Custom Actions.
Bước 16 :
Tại mục Custom Actions --> click phải chuột --> Add Custom Action
Bước 17 :
Xuất hiện cửa sổ Select Item in Project --> Double-click mục Application Folder, chọn mục Primary Output from swGiamSatThuMuc (Active) --> click OK.
Bước 18 :
Thực hiện việc build trình ứng dụng SetupGiamSatThuMuc (chú ý nhớ chọn định cấu hình cho Solution là Release ).
Xây dựng Windows Service với C# – Phần 4
Thêm vào thành phần Installer :
Bước 9:
Click chuyển sang cửa sổ design của GiamSatThuMuc.cs. Bên trong cửa sổ này click phải chuột à click chọn mục Add Installer .
Một class có tên là ProjectInstaller.cs sẽ được thêm vào project của bạn. Bạn sẽ thấy ở màn hình design của thành phần này có hai biểu tượng thành tố khác trên nó là :ServiceProcessInstaller1 và ServiceInstaller1.
Bước 10:
Click vào ServiceProcessInstaller1 và hiển thị cửa sổ Properties --> tại thuộc tínhAccount click chọn LocalSystem trong danh sách
Bước 11:
Click vào ServiceInstaller1 và hiển thị cửa sổ Properties. Chọn giá trị Automatic cho thuộc tính StartType
Bước 12:
Thực hiện việc build trình ứng dụng
Xây dựng Windows Service với C# – Phần 3
Bước 5:
Trên cửa sổ design --> click vào biểu tượng EventLog --> cửa sổ Properties --> Tại mụcName đổi tên mặc định EventLog1 thành GetLoginNameEventLog
Bước 6:
Trên cửa sổ design --> click vào biểu tượng EventLog --> cửa sổ Properties --> Tại mụcName đổi tên mặc định EventLog1 thành SoGhiGiamSatThuMuc.
Bước 7:
Mở màn hình soạn thảo mã lệnh của GiamSatThuMuc.cs --> Bạn sẽ thấy rằng C# sẽ tự động bổ sung :
Dòng khai báo
using System.ServiceProcess
Khai báo kế thừa từ class :
System.ServiceProcess.ServiceBase
Hai phương thức quan trọng được bổ sung:
protected override void OnStart(string[] args) {
// TODO: Add code here to start your service.
}
protected override void OnStop(){
// TODO: Add code here to perform any tear-down necessary to stop your service.
}
Đây là hai phương thức có vai quan trọng. Các dòng lệnh mà bạn muốn chúng thực thi mỗi khi service start được đặt bên trong phương thức OnStart. Các dòng lệnh mà bạn muốn chúng thực thi mỗi khi service stop được đặt bên trong phương thức OnStop.
Bạn cần bổ sung vào phương thức khởi tạo của class GiamSatThuMuc các dòng lệnh sau:
public GiamSatThuMuc()
{
InitializeComponent();
if (!(System.Diagnostics.EventLog.SourceExists("GiamSatThuMuc_Source ")) )
{
System.Diagnostics.EventLog.CreateEventSource("GiamSatThuMuc_Source", "GiamSatThuMuc_Log");
}
GiamSatThuMucEventLog.Source = "GiamSatThuMuc_Source";
GiamSatThuMucEventLog.Log = "GiamSatThuMuc_Log";
}
Chú ý rằng bạn không nên đặt các dòng lệnh này ở phương thức OnStart, mặc dù việc bổ sung này khiến nó vẫn hoạt động. Lý do của việc bổ sung vào phương thức khởi tạo của class là để nó chỉ chạy một lần.
Bước 8:
Thêm mã chương trình vào các phương thức xử lý biến cố OnStart và OnStop. Để viết đoạn mã lệnh cho phương thức OnStart, bạn gõ vào đoạn mã như trình bày sau đây:
protected override void OnStart(string[] args)
{
FileSystemWatcher watch = new FileSystemWatcher();
watch.Path = @"c:\Watcher\";
watch.Changed += new FileSystemEventHandler(OnChanged);
watch.Created += new FileSystemEventHandler(OnChanged);
watch.Deleted += new FileSystemEventHandler(OnChanged);
watch.Renamed += new RenamedEventHandler(OnRenamed);
watch.EnableRaisingEvents = true;
watch.IncludeSubdirectories = true;
Console.ReadLine();
}
//--------------------------------------------------
private void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed, created, or deleted.
string dir = @"c:\Watcher\" + e.Name;
if (e.FullPath == dir)
{
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
GiamSatThuMucEventLog.WriteEntry("Da co thao tac Change trong thu muc Watcher tren C");
}
}
// ----------------------------------------------------------------------------------
private void OnRenamed(object source, RenamedEventArgs e)
{
// Specify what is done when a file is renamed.
string dir = @"c:\Watcher\" + e.Name;
if (e.FullPath == dir)
{
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
GiamSatThuMucEventLog.WriteEntry("Da co thao tac rename trong thu muc Watcher tren C");
}
}
Đoạn mã lệnh trên nhằm mục tiêu khi service được start trình ứng dụng sẽ giám sát thư mục C:\Watcher. Bạn có thể bổ sung thêm theo ý mình, ở đây chúng ta chỉ viết mã lệnh tướng ứng với các sự kiện OnChanged và OnRenamed.
Chú ý: Trong phần mã lệnh của GiamSatThuMuc.Designer.cs bạn cần sửa biểu thị private àpublic tương ứng với khai báo GiamSatThuMucEventLog dòng lệnh sau:
public System.Diagnostics.EventLog GiamSatThuMucEventLog;
Xây dựng Windows Service với C# – Phần 2
II Tạo ứng dụng loại Windows Service.
Bước 1:
Khởi động Visual Studio .NET và tạo một project mới với việc sử dụng mẫu Windows Service. Đặt tên cho project là wsGiamSatThuMuc và chứa nó vào một thư mục trên máy tính của bạn.
Bước 2:
Trên cửa sổ Solution Explorer đổi tên của component có tên Service1.cs thànhGiamSatThuMuc.cs.
Bước 3:
DoubleClick vào GiamSatThuMuc.cs à Properties window. Trên cửa sổ Properties lần lượt thực hiện các công việc sau:
· Tại mục ServiceName: đổi tên mặc định service1 là GiamSatThuMuc.
· Tại mục AutoLog : Thiết lập giá trị là False.
· Tại mục CanStop: Thiết lập giá trị là True.
Bước 4:
Click chọn hiển thị hộp công cụ (Toolbox) của Visual Studio .NET --> click tab : Components --> click chọn EventLog (Là một component) kéo thả vào cửa sổ design.
Xây dựng Windows Service với C# – Phần 1
Bài viết này sẽ hướng dẫn các bạn viết một trình ứng dụng với mục tiêu âm thầm theo dõi giám sát một thư mục nào đó trên máy tính. Do trình ứng dụng thuộc loại Windows Service nên sau khi viết xong các bạn có thể cài đặt và vận hành nó giống như là một service
I. Tổng quan
Windows Services cung cấp phương tiện cho application logic chạy liên tục trên máy tính của bạn, thông thường là việc cung cấp điều khiển thiết bị hoặc các dịch vụ hệ điều hành.Windows Services là hữu dụng đối với các ứng dụng phía server mà ta muốn chúng phải luôn ở trạng thái sẵn sàng phục vụ các yêu cầu từ client. Nói chung, nếu bạn có nhu cầu xây dựng một trình ứng dụng mà bản chất hoạt động của nó mang tính “âm thầm làm việc” và không cần sự tương tác trực tiếp của người dùng, bạn có thể nghĩ ngay đến việc tạo trình ứng dụng loại Windows Service.
Windows Service là một ứng dụng chạy trên máy server hoặc workstation và cung cấp những chức năng mà sự diễn tiến của nó không cần sự tương tác trực tiếp của người dùng. Windows Services thường được dùng để giám sát hoạt động hệ thống.
Một Windows Service sẽ chạy trong tiến trình của riêng nó, không phụ thuộc người dùng hay các chương trình khác đang chạy trên cùng máy tính. Windows Services thường được cấu hình để tự động bắt đầu khi nào máy tính khởi động. Không giống như đa phần các ứng dụng, Windows Services chạy dưới nhận dạng bảo mật của chính nó, thay vì dưới nhận dạng của đăng nhập người dùng hiện hành. Chúng có thể bắt đầu chạy, ngay cả nếu không có người dùng (user) đăng nhập máy tính.
Khi mà bạn tạo một ứng dụng với mục tiêu ứng dụng này sẽ chạy như là một Windows Service, bạn cần phải lưu ý rằng nó không bao gồm bất kỳ các yếu tố giao tiếp người dùng như Message Boxes hay Dialog Boxes. Một Windows Service không có tính chất cung cấp một giao diện trực quan (visual interface) cho người dùng.
Thông thường một Windows Service sẽ báo cáo đặc thù các kết quả và thông báo lỗi của nó tới một sổ ghi biến cố (event log). Tuy nhiên bạn cũng có thể kết hợp nó với Web Service để làm những việc “động trời” hơn như là âm thầm chuyển thông tin từ máy mà nó đang được cài đặt đến một máy ở xa thông qua đường truyền internet.
Nếu như bạn đã quen thuộc với Microsoft SQL Server 2000, bạn sẽ nhận thấy nó chạy như là một Windows Service. Một ví dụ dễ hiểu của ứng dụng Windows Service là Windows Time Service, nó cập nhật thông tin đồng hồ mà bạn thấy trên thanh taskbar của máy tính. Trước đây, việc phát triển các ứng dụng dạng này là rất khó khăn. Giờ đây, nhờ có .NET Framework chứa một tập các class, cung cấp các chức năng cơ bản cho việc cài đặt và phát triển dễ dàng các ứng dụng Windows Service trên nền C# .NET .
String Format trong C#
Trong khi lập trình, chúng ta thường gặp phải rất nhiều trường hợp cần định dạng lại một chuỗi như chuỗi số, chuỗi ngày tháng sao cho đúng yêu cầu.
Ví dụ: định dạng ngày tháng: MM/dd/yyyy ta muốn chuyển sang dd/MM/yyyy cho thuần Việt.
Sau đâu là các kiểu chuyển đổi, định dạng chuỗi trong C#
Định dạng số chữ số sau dấu chấm trong số thập phân
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"
Định dạng số chữ số trước dấu chấm trong số thập phân
String.Format("{0:00.0}", 123.4567); // "123.5"
String.Format("{0:00.0}", 23.4567); // "23.5"
String.Format("{0:00.0}", 3.4567); // "03.5"
String.Format("{0:00.0}", -3.4567); // "-03.5"
Thêm dấu ngăn cách hàng nghìn
String.Format("{0:0,0.0}", 12345.67); // "12,345.7"
String.Format("{0:0,0}", 12345.67); // "12,346"
Thêm số 0 vào trước số
String.Format("{0:00000}", 15); // "00015"
String.Format("{0:00000}", -15); // "-00015"
Căn số sang phải hay trái dựa vào kích cỡ ta cung cấp
String.Format("{0,5}", 15); // " 15"
String.Format("{0,-5}", 15); // "15 "
String.Format("{0,5:000}", 15); // " 015"
String.Format("{0,-5:000}", 15); // "015 "
Định dạng ngày tháng
String.Format("{0:M/d/yyyy}", dt); // "3/9/2008"
String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"
String.Format("{0:t}", dt); // "4:05 PM" ShortTime
String.Format("{0:d}", dt); // "3/9/2008" ShortDate
String.Format("{0:T}", dt); // "4:05:07 PM" LongTime
String.Format("{0:D}", dt); // "Sunday, March 09, 2008" LongDate
String.Format("{0:f}", dt); // "Sunday, March 09, 2008 4:05 PM" LongDate+ShortTime
String.Format("{0:F}", dt); // "Sunday, March 09, 2008 4:05:07 PM" FullDateTime
String.Format("{0:g}", dt); // "3/9/2008 4:05 PM" ShortDate+ShortTime
String.Format("{0:G}", dt); // "3/9/2008 4:05:07 PM" ShortDate+LongTime
String.Format("{0:m}", dt); // "March 09" MonthDay
String.Format("{0:y}", dt); // "March, 2008" YearMonth
String.Format("{0:r}", dt); // "Sun, 09 Mar 2008 16:05:07 GMT" RFC1123
String.Format("{0:s}", dt); // "2008-03-09T16:05:07" SortableDateTime
Hi vọng với những ví dụ trên, các bạn có thể định dạng các chuỗi hiển thị lên ứng dụng của mình một cách khoa học nhất.
Một số jQuery Slideshow đẹp
jQuery đã và đang trở thành một công cụ rất hữu dụng cho các nhà thiết kế web. Một trong những thành công là tạo ảnh trượt (gallery, slideshow, carousel...). Hôm nay mình sẽ giới thiệu tới các bạn vài plugin mà bạn nên tham khảo khi dự định tạo một slideshow của riêng mình.
Slides
Nivo Slider
TN3 Gallery
Pikachoose
Coin Slider
Galleria
Orbit
Supersized
Advanced jQuery Background Image Slideshow
s3Slider jQuery Plugin
Skitter
ResponsiveSlides
Sideways
Chúc các bạn lựa chọn được Slideshow phù hợp nhất cho mình.
Nhúng google map vào website
Tạo form tìm kiếm dạng Expandable Search
Để tạo một form tìm kiếm khi di chuột vào, nó sẽ mở rộng textbox tìm kiếm ra, chúng ta sử dụng HTML và CSS3 như sau:
HTML
<
form
>
<
input
type
=
"search"
placeholder
=
"Tìm kiếm"
>
</
form
>
CSS3
Reset Search Input
input {
outline
:
none
;}
input[type=search] {
-webkit-appearance: textfield;
-webkit-box-sizing: content-box;}
Đến phần định dạng phần input tìm kiếm
input[type=search] {
background
:
#fff
url
(img.png)
no-repeat
right
center
;
border
:
solid
1px
#a3a3a3
;
padding
:
10px
30px
10px
10px
;
margin-left
:
300px
;
width
:
150px
;}
Bo góc
input[type=search] {
-webkit-border-radius:
20px
;
-moz-border-radius:
20px
;
border-radius:
20px
;}
Hiệu ứng Transition
input[type=search] {
-webkit-transition:
all
0.5
s linear;
-moz-transition:
all
0.5
s linear;
-o-transition:
all
0.5
s linear;
transition:
all
0.5
s linear;}
Cuối cùng khi rê chuột vào phần search
input[type=search]:focus {
width
:
250px
;
background-color
:
#fff
;
border-color
:
#6dcff6
;
-webkit-box-shadow:
0
0
5px
rgba(
109
,
207
,
246
,
0.5
);
-moz-box-shadow:
0
0
5px
rgba(
109
,
207
,
246
,
0.5
);
box-shadow:
0
0
5px
rgba(
109
,
207
,
246
,
0.5
);}
Chúc các bạn thành công!
Bắt sự kiện ấn phím enter
Trong nhiều trường hợp, chúng ta cần nhận biết có ấn phím enter hay không để xử lý một sự kiện tự động, không cần phải sử dụng chuột.
Chúng ta sử dụng đoạn code sau:
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
// button1.Top += 20;
// điều muốn thực hiện khi ấn Enter
return base.ProcessDialogKey(keyData);
}
C# - Duyệt đệ quy các control trong một form
Trong nhiều trường hợp, số lượng control của bạn quá nhiều, nếu code thủ công gọi từng control một thì sẽ mất rất nhiều thời gian. Vì vậy, chúng ta phải nghĩ tới giải pháp dùng code tự động tìm tới các control và cho chúng làm việc.
Ví dụ sau: duyệt đệ qui các textbox
Code:
private void ClearForm(Control ctr){
if (ctr.GetType()==typeof(TextBox))
ctr.Text = "";
// Duyệt đệ quy
foreach (Control childCtr in ctr.Controls){
ClearForm(childCtr);
}
}
Thao tác với REGISTRY trong C#
Registry là một cơ sở dữ liệu dùng để lưu trữ thông tin về những sự thay đổi, những lựa chọn, những thiết lập từ người sử dụng Windows. Registry bao gồm tất cả các thông tin về phần cứng, phần mềm, người sử dụng. Registry luôn được cập nhật khi người sử dụng tiến hành sự thay đổi trong các thành phần của Control Panel, File Associations, và một số thay đổi trong menu Options của một số ứng dụng,...
Registry được coi là trái tim của windows, mọi thay đổi trong registry sẽ dẫn tới sự thay đổi bên ngoài mà chúng ta có thể nhận thấy được.
Trong phần mềm, registry thường được sử dụng để lưu trữ thông tin bản quyền người dùng, thông tin sản phẩm….
Để thao tác được với registry, chúng ta làm như sau:
Ví dụ: Tìm tất cả các chuơng trình startup cùng window
Code:
using System;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
namespace registry
{
public partial class Form1 : Form
{
public Form1(){
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e){
RegistryKey rg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
string[]s=rg.GetValueNames();
foreach(string ex in s) {
adone(ex,rg.GetValue(ex).ToString(),listView1);
}
}
private void adone(String name, String path,ListView l){
int n = l.Items.Count;
l.Items.Add(n.ToString());
l.Items[n].SubItems.Add(name);
l.Items[n].SubItems.Add(path);
}
}
}
Xóa file vào xọt rác bằng C#
Chỉ với 3 bước đơn giản sau, bạn có thể code cho ứng dụng của mình chức năng xóa file vào xọt rác của windows.
1. Add reference Microsoft.VisualBasic
2. using Microsoft.VisualBasic.FileIO;
3. dùng hàm FileSystem.DeleteFile với tham số thứ 3 là lựa chọn RecycleOption.SendToRecycleBin
Chuyển tiếng việt có dấu thành không dấu
Khi lập trình, có rất nhiều trường hợp bạn cần chuyển tiếng việt có dấu thành không dấu.
Ví dụ để rewrite url thân thiện với SEO hơn, ta phải chuyển tiêu đề bài viết từ tiếng việt có dấu sang không dấu.
Để làm được việc này, chúng ta sử dụng hàm sau:
public string LocDau(string giatri)
{
try
{
Regex regex = new Regex("\\p{IsCombiningDiacriticalMarks}+");
string strRuler = accented.Normalize(System.Text.NormalizationForm.FormD);
strRuler = regex.Replace(strRuler, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');
return Regex.Replace(strRuler, @"[^\w\.-]", " ");
}
catch {
return "Co loi khi chuyen doi!";
}
}
Chúc các bạn thành công!
Chương trình chụp màn hình đơn giản
Đầu tiên bạn thêm vào form một control là PictureBox.
Sau đó add một button vào form. sửa tên button thành : btnCapture
Nhấp sự kiện button đó và code giống như đoạn code dưới đây.
private void btnCapture_Click(object sender, EventArgs e)
{
Bitmap Bitmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(Bitmp);
g.CopyFromScreen(0, 0, 0, 0, Bitmp.Size);
pictureBox1.Image = Bitmp;
}
Vậy là bạn có chương trình đơn giản về chụp màn hình.
Lấy code html của 1 trang web
Trong quá trình lập trình ứng dụng, chắc hẳn các bạn đã gặp phải trường hợp phải lấy code html từ một URL trên mạng.
Để làm được việc này, bạn chỉ cần sử dụng đoạn code sau.
string url=”http://iloveit1208.blogspot.com“;
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream stream = httpWebResponse.GetResponseStream();
StreamReader streamReader =new StreamReader(stream, Encoding.ASCII);
string html=streamReader.ReadToEnd();
Tạo hình dáng của form theo ý muốn từ các file ảnh
Bạn muốn tạo ra ứng dụng với các form với hình dáng đẹp, không phải dạng hình chữ nhật như bình thường. Bài viết này sẽ giúp bạn làm điều đó.
Có 2 cách để làm việc này:
Cách 1: Bạn dùng Window Region để tạo hình dáng form theo ý muốn.
Cụ thể hơn, bạn có một hình bất kỳ theo ý muốn, các phần không muốn hiển thị sẽ có một màu đặc biệt nào đó (Key color, Transparent coloer), dùng thuật toán tạo Region từ hình đó, set giá trị Region cho form.
Code:
public static Region BitmapToRegion(Bitmap bitmap, Color transparencyColor)
{
if (bitmap == null)
throw new ArgumentNullException("Bitmap", Strings.BitmapCannotBeNull);
int height = bitmap.Height;
int width = bitmap.Width;
GraphicsPath path = new GraphicsPath();
for (int j=0; j<height; j++ )
for (int i=0; i<width; i++)
{
if (bitmap.GetPixel(i, j) == transparencyColor)
continue;
int x0 = i;
while ((i < width) && (bitmap.GetPixel(i, j) != transparencyColor))
i++;
path.AddRectangle(new Rectangle(x0, j, i-x0, 1));
}
Region region = new Region(path);
path.Dispose();
return region;
}
}
Cách dùng:
Code:
Bitmap background = new Bitmap("background.gif");
this.Region = GraphicsUtility.BitmapToRegion(background, Color.Green);
Cách 2: Dùng Layered windows. Bạn tham khảo cách này ở bài viết này:
http://www.codeproject.com/cs/media/perpxalpha_sharp.asp
Thay đổi con trỏ chuột bằng 1 hình ảnh bất kỳ ??
Bạn muốn ứng dụng của mình thật lung linh, đẹp mắt đến từng chi tiết, với con trỏ của windows, bạn đã quá nhàm chán, bạn muốn khi vào ứng dụng của mình, con trỏ sẽ được thay đổi tùy ý. Bài viết này sẽ hướng dẫn bạn là điều đó.
Đầu tiên bạn cần 1 ảnh.
Ví dụ: 1.jpeg
Sau đó sử dụng đoạn code sau lúc khởi tạo form.
Code:
Bitmap b = new Bitmap("1.jpeg");
IntPtr ptr = b.GetHicon();
Cursor c = new Cursor(ptr);
this.Cursor = c;
Cách lấy dung lượng RAM
Bài viết này sẽ hướng dẫn các bạn các code để lấy được dung lượng RAM trên máy tính của bạn để hiển thị lên ứng dụng của mình.
Đầu tiên phải add reference Microsoft.VisualBasic từ solution explorer
Code:
using Microsoft.VisualBasic;
var ram = new PerformanceCounter("Memory", "Available MBytes");
// lấy dung lượng RAM free thời điểm hiện tại
float cur = ram.NextValue();
// lấy dung lượng tổng cộng của các thanh RAM
ulong max = new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory;
Bounce Rate là gì ? Những lý do khiến tỉ lệ BR cao
Bounce Rate là một trong những yếu tố có tầm ảnh hướng mạnh nhất đến sự thành công của một website. Bạn có thể có ranking cao và một lượng truy cập lớn mà việc sử dụng dịch vụ SEO mang lại cho website, nhưng với một tỉ lệ Bounce Rate cao trên mức cho phép thì mọi sự đầu từ cũng như nỗ lực cố gắng đây cao traffic cho website đều trở nên vô nghĩa. Đối với những SEOer chuyển nghiệp, họ đều có những phương thức cụ thể để theo dỏi và điều hướng bounce rate hằng ngày, nhằm nhanh tróng tìm ra ly dó và đề ra cách khắc phục tốt nhất. Nhưng ngược lại đối với những người làm SEOer không chuyên, thì bounce rate hình như vẫn là một định nghĩa còn quá xa lạ.
Bounce Rate là gì ?
Theo google analytic blog thì Bounce Rate là tỷ lệ phần trăm lượng truy cập vào website hoặc từ trang web khác tới rời bỏ website của bạn. Có nghĩa là tỉ lệ người truy cập không tìm thây thông tin hữu ích trên website của bạn.
Theo một số chuyên gia về SEO hàng đầu, thì những trang web dạng CMS thông tin, tin tức cập nhật ngay tại trang đích thì tỉ lệ bounce rate đạt khoảng 35% là tốt nhất. Trong khi nhưng website dạng thương mại, có trang đích như là một trang giới thiệu (dạng giống SEO Việt Nam) thì tỷ lệ bounce rate khoảng 50% thì được xem là thành công.
Hãy dành chút thời gian để quan sát và theo dỏi bounce rate của website bạn, thông số này được thống kê rất chi tiết trong Google analytics / Visitor. Nhưng website nào có tỷ lệ bounce rate trên 70%, thì cũng đừng băn khoăn là tại sao traffic vài trăm lượt truy cập 1 ngày, nhưng đơn đặt hàng thì chẳng có , vì đơn giản là chỉ có chưa được 30% của còn số vài trăm đó cảm thấy thông tin trên website của bạn là có ích.
Những nguyên nhân khiến website của bạn có tỉ lệ Bounce Rate cao
ON PAGE SEO:
1. Web design & tính khả dụng: Những thiết kế trong cách trình bày website là rất quan trọng trong vấn đề này. Theo nghiên cưu thì có đến 30% người được cho là sẽ rời website của bạn nếu họ phải trờ quá 30s và gấp đôi số đó nếu thời gian trờ lên đến 50s.
2. Nội dung: Đây là một vấn đề cũng quan trọng không kém, hãy chắc rằng trang đích của bạn chứa nội dung tập trung vào những vấn đề cụ thể liên quan đến những từ khóa cụ thể. Tránh trường lạc đề và không mang lại kết quả cụ thể.
3. Danh mục chính trên website: Đây cũng là một lý do thu hút người xem thích ở lại với website của bạn. Những danh mục chính cần được bố chí hướng tới người dùng, sắp xếp khoa học dẫn tới những bài viết liên quan hoặc những chuyên mục liên quan đến vấn đề tìm kiếm của người dùng.
4. Vấn đề về kĩ thuật: Sự đa dạng của các trình duyệt web mang lại rất nhiều lợi ích cho người sử dụng, nhưng đồng thời cũng đẩy webmaster vào một cuộc chiến rắc rối, đó là làm vừa lòng tất cả các trình duyệt này. Bạn cần chắc chắn webiste của bạn hiện thị tốt trên mọi trình duyệt và không có hiện tượng don’t send hay not responding ^^
5. Lựa chọn từ khóa: Trong thế giới marketing online thì việc lựa trọn từ khóa tốt có thể đem lại cho website của bạn rất rất nhiều traffic từ số lượng người tìm kiếm từ khóa đó. Nhưng vấn đề ở đây là vì tham lam những từ khóa giàu tài nguyên đó mà bạn bỏ qua yếu tố người dùng ở đây. Một ví dụ và các bạn sẻ hiểu vấn đề này:
Cách đây vài tháng mình có một khách hàng làm về “thiết kế kiến trúc”, nhưng họ cứ khăng khăng là website của họ phải ranking cao với những từ khóa: “thiet ke” , “noi that” , “van phong” …, sau khi được mình phân tích và tư vấn thì họ mới đồng ý làm việc với những từ khóa như “thiet ke noi that”, “thiet ke van phong”… nhưng tư khóa liên quan trực tiếp đến ngành nghề của họ. Và hiện tại website này đang rất thành công. Điều này chứng minh rằng những từ khóa short team (ngắn) tất nhiên sẻ có nhiều lượt tìm kiếm hơn, nhưng nó cũng bao hàm một ý nghĩa hoàn toàn khác nếu đằng sau nó là những từ khác nhau.
6. Ad copy: Những mẫu quản cáo PPC trên các search engine có thể mang lại rất nhiều traffic cho website, nhưng khi những bản copy của các mẩu quảng cáo này được điều hướng hiển thị không đúng nội dung mà nó cần được dẫn tới, hoặc thông tin trên nhưng mẫu quảng cáo được copy không thích hợp với nội dung trang hiển thị quảng cáo, nó có thể chỉ khiến bạn mất tiền vô ích.
7. Title và description: Những phần title và description hiển thị mang tính chung chung hoặc không diễn giải đúng nội dung cả trang đích sẽ khiến website của bạn mất đi niềm tin từ người đọc.
8. Ranking không đúng từ khóa: Google rất thông minh, những vẫn chưa thông minh đến độ phần biệt được ngữ nghĩa của các từ gần gần giống nhau. Trường hợp ở đây có thể là “SEO” và “sẹo” hoặc “seo” của search engine optimization và “seo” của seo ju jin gì gì bên hàn ^^
9. Xây dựng backlink: Một vấn đề rất hi hữu những đôi khi các bạn rất dễ mắc phải, đó là xây dựng một lượng lớn backlink với những anchor text chẳng liên quan gì đến website của bạn cả. Thủ thuật này cũng đươc dùng khá phổ biến trong việc đẩy nhanh việc xếp hạng PR của các SEOer mũ đen. Và điều tất yếu là những liên kết này sẻ dẫn đên một nội dung chẳng ăn nhằm gì với suy nghĩ của người dùng.
Việc giảm thiểu tối đa tỷ lệ bounce rate cũng đồng nghĩa với việc giữ chân khách hàng ở lại lâu hơn trên website của bạn. Đó là một phần tất yếu cần phải có của việc phát triển SEO – Marketing, để hướng đến một tỷ lệ chuyển đổi cao cho hoat động kinh doanh thì trước hết bạn phải biết cách để giữ chân những khách hàng tiềm năng mà bạn đã có trước đã.