ViewData, ViewBag và TempData – các tùy chọn truyền dữ liệu trong ASP.NET MVC

ASP.NET MVC cung cấp 3 tùy chọn ViewData, ViewBag và TempData để truyền dữ liệu từ controller vào view và trong request kế tiếp. ViewData và ViewBag tương tự như nhau, TempData thực hiện thêm nhiệm vụ. Chúng ta sẽ nói về điểm chính của 3 đối tượng:

Sự giống nhau giữa ViewBag và ViewData:

1. Giúp duy trì dữ liệu khi bạn di chuyển từ view vào controller

2. Được dùng để truyền dữ liệu từ controller vào view tương ứng

3. Chu kỳ tồn tại ngắn, giá trị sẽ thành null khi redirect xuất hiện. Đây là bởi vì mục tiêu thiết kế các đối tượng này là để giao tiếp giữa controller và view

Sự khác nhau giữa ViewBag và ViewData:

1. ViewData là 1 từ điển các đối tượng (dictionary) kế thừa từ lớp ViewDataDictionary và có thể truy cập dùng chuỗi key.

2. ViewBag là thuộc tính động (dynamic) mang đến thuận lợi từ đặc tính mới của C# 4.0

3. ViewData yêu cầu chuyển kiểu với các kiểu dữ liệu phức tạp và kiểm tra giá trị null để tránh lỗi

4. ViewBag không yêu cầu chuyển kiểu với các kiểu dữ liệu phức tạp

Ví dụ về ViewBag và ViewData:

public ActionResult Index()
{
    ViewBag.Name = "Ngoc Dinh NGUYEN";
    return View();
}
public ActionResult Index()
{
    ViewData["Name"] = "Ngoc Dinh NGUYEN";
    return View();
}

Trong View:

@ViewBag.Name 
@ViewData["Name"]

TempData:

TempData cũng là 1 từ điển đối tượng (dictionary) kế thừa từ lớp TempDataDictionary, được lưu trong 1 chu kỳ rất ngắn. Điểm khác biệt chính là chu kỳ sống của đối tượng. TempData giữ thông tin trong khoảng thời gian HTTP Request. Điều này có nghĩa là chỉ từ 1 trang đến 1 trang khác. Điều này cũng hoạt động với 302/303 redirection bởi vì nó cùng HTTP Request. Giúp duy trì dữ liệu khi bạn di chuyển từ 1 controller sang 1 controller khác hoặc từ hành động này sang hành động khác. Nói cách khác, khi bạn redirect, TempData giúp duy trì dữ liệu giữa các redirect. Nó là biến cục bộ dùng trong session. Nó yêu cầu chuyển kiểu cho các kiểu dữ liệu phức tạp, và kiểm tra giá trị null để tránh lỗi. Thông thường nó dùng để lưu error message hoặc validation message.

public ActionResult Index()
{
    var model = new Review()
                {
                    Body = "Start",
                    Rating = 5
                };
    TempData["ModelName"] = model;
    return RedirectToAction("About");
}

public ActionResult About()
{
    var model = TempData["ModelName"];
    return View(model);
}

 

Useful Tools for ASP.NET Developers

This post lists useful tools for ASP.NET developers.

Tools

  1. Visual Studio

    1. Visual Studio Productivity Power toolextensions to Visual Studio Professional (and above) with rich features like quick find, solution navigator, searchable add-reference dialog, etc.

    2. ReSharperProductivity tools for .NET developers. improves code quality, eliminates errors by providing quick fixes, etc.

    3. Web EssentialsBoosts productivity and helps if efficiently writing CSS, JavaScript, HTML, etc.

    4. MSVSMONThe Remote Debugging Monitor (msvsmon.exe) is a small application that Visual Studio connects to for remote debugging. During remote debugging, Visual Studio runs on one computer (the debugger host) and the Remote Debugging Monitor runs on a remote computer together with the applications that you are debugging.

    5. WIX toolsetbuilds Windows installation packages from XML source code.

    6. Code diggerCode Digger is Visual Studio 2012/2013 extension which helps you to understand behavior of your code.

    7. CodeMaidCodeMaid is an open source Visual Studio 2012/2013/2015 extension to cleanup, dig through and simplify your code.

    8. OzCodePowerful Visual Studio debugger visualizer.

    9. CodeRushIt is a refactoring and productivity plugin for Visual Studio.

    10. T4 Text TemplateIn Visual Studio, T4 Text Template is used as template to generate code files. The template can defined by writing text block and control logic.

    11. Indent GuidesAdds vertical lines at each indent level.

    12. PowerShell Tools: A set of tools for developing and debugging PowerShell scripts and modules in Visual Studio 2015.

  2. ASP.NET

    1. FiddlerTo capture http request/response as well as simulate request behavior.

    2. AutoMapperObject to object mapping. Like, the tool can be used to map entity objects to domain objects instead of writing manual mapping code.

    3. Unity/Ninject/Castle Windsor/StructureMap/Spring.NetDependency injection framework. There are a lot of DI frameworks available.

    4. .NET Reflector.NET assembly decompiler.

    5. dotPeek.NET assembly decompiler.

    6. ILSpy.NET assembly decompiler.

    7. memprofilerPowerful tool to find memory leak and optimize memory usage.

    8. PostSharpRemoves repetitive coding and prevent code bloating due to cross-cutting concerns with aspect oriented programming.

    9. ASPhere: Web.config editor with GUI.

  3. WCF

    1. SOAP UIAPI testing tool which supports all standard protocol and technologies.

    2. WireSharkIt is a network protocol analyzer for Unix and Windows. It can capture traffic at TCP level and help you see soap envelop.

    3. Svc TraceViewerprovides better view of huge trace file which is produced by WCF.

    4. Svc Config Editor: GUI tool for managing WCF related configurations.

  4. MSMQ

    1. ​​​​​​​QueueExplorer 3.4copy, move or delete messages, save and load, stress test, view and edit full message bodies (with special support for .Net serialized objects), and much more for MSMQ.

  5. LINQ

    1. LINQ Pad?: LINQPad is a light weight tool to test linq queries against SQL Server database. It can also test code snippet written in different .NET languages like C#, VB, etc.

    2. LINQ InsightLINQ Insight Express is a Visual Studio add-in that allows you to analyze your LINQ queries at design-time and simplifies writing and debugging LINQ queries.

  6. RegEx

    1. RegEx tester: Extension for Visual Studio for regular expression testing.

    2. regexr: Online RegEx develop and testing tool.

    3. regexpalOnline RegEx develop and testing tool.

    4. Expresso: Expresso is a destop tool for RegEx develop and testing.

    5. RegexMagic : Tools to auto-generate regular expression from text pattern. The user need to feed the pattern by marking the substrings and selecting different options. Based on that the regex will be auto-generated. The tools also generates the required code in different language.

  7. Javascript/JQuery/AngularJS

    1. JSHint: JavaScript code quality tool. There is one more tool JSLine which enforces stricter rules.

    2. JSFiddle: It provides an environment inside the browser to test HTML, CSS and Javascript/JQuery.

    3. Protractor: End to end framework to test angular application.

  8. SQL Server

    1. SQL ProfilerSQL trace for monitoring instance of database engine.

    2. SQL Sentry Plan explorerThe tool provides better graphical view of SQL Query execution plan.

    3. SQL CompleteProvides Intellisense functionality and Improved SQL Formatter in SQL Server Management Studio and Visual Studio.

    4. NimbleTextText manipulation and code generation tool.

    5. Query Express: Light weight SQL Query analyzer like tool.

    6. IO MeterProvides detail of IO subsystem.

    7. sqldecryptorDecrypts SQL Server objects like Stored Procedures, Functions, Triggers, Views which were encrypted WITH ENCRYPTION option.

    8. SpatialViewerTo view and create spatial data.

    9. ClearTraceimports trace and profiler files into SQL Server and displays summary performance information.

    10. Internals Viewer for SQL ServerInternals Viewer is a tool for looking into the SQL Server storage engine and seeing how data is physically allocated, organized and stored.

    11. PALreads in a perfmon log and analyzes it using known thresholds.

    12. sqlquerystressassists with performance stress testing of T-SQL queries and routines.

  9. NHibernate

    1. NHibernate Mapping Generator generates NHibernate mapping files and corresponding domain classes from existing DB tables.

  10. Tally

    1. Tally ERP 9

    2. Tally dlla dynamic link library for .net to integrate your application with Tally Accounting software to push and pull data progrmmatically.

  11. Code Review

    1. StyleCopStyleCop is a static code analysis tool which enforces set of configured style and consistency rules for your C# source code. It can be run from inside of Visual Studio or integrated into an MSBuild project. 

    2. FxCop?: FxCop is a static code analysis tool which enforces development standards by analyzing .NET assembly.

  12. Traffic Capture

    1. WireShark: It is a network protocol analyzer for Unix and Windows. It can capture traffic at TCP level. 

    2. HTTP Monitorenables the developer to view all the HTTP traffic between your computer and the Internet. This includes the request data (such as HTTP headers and form GET and POST data) and the response data (including the HTTP headers and body).

  13. Diagnostic

    1. Glimpse: Provides server side diagnostic data. Like, for an ASP.NET MVC project, you need to add it from NuGet. The Glimpse data can show you latency at different levels and really indicate areas where you can optimize your code/solution to boost performance.

  14. Performance

    1. PerfMon: monitors system performance using performance counters.

    2. yslowYSlow analyzes web pages and indicates why they’re slow based on Yahoo!’s rules for high performance web sites.

  15. Code Converter

    1. Telerik Code ConverterC# to VB and VB to C# code converter. It is an online editor. But you can choose 'Batch Converter' and upload files in zip format.

  16. Data Extraction and Loading

    1. FileHelpers.NET library to import/export data from fixed length or delimited records in files, strings or streams.

    2. LogParser: You can write SQL to queries against a variety of log files and export the data to a variety of destinations like SQL tables, CSV files.

  17. Screen Recording

    1. Wink: Presentation creation software. Using Wink, you can capture screenshots, add explanations, comments, etc. and create the demo.

  18. Text Editor

    1. Notepad++: Source code editor. 

    2. Notepad2Light-weight feature rich Notepad-like text editor.

    3. sublimetext: A feature rich text editor.

  19. Documentation

    1. GhostDocGhostDoc is a Visual Studio extension that automatically generates XML documentation comments for methods and properties based on their type, parameters, name, and other contextual information.

    2. helpndoc: helpndoc is a tool to create help files. It can generate files in different formats from a single source.

  20. Others

    1. FileZilla: FileZilla is a free FTP solution. FileZilla Client for FTP file uploadingand FileZilla Server for file share.

    2. TreeTrimTreeTrim is a tool that trims the source code tree. It removes debug files, source control bindings, and temporary files.

    3. BrowserStack: cross browser testing website.

    4. Firebug: Feature rich firefox add on for CSS, HTML and JavaScript development on generated web page.

    5. BugShooting: Screen capture software which takes a screen shot and attaches to the work items, bugs, issue tracker items, etc.

    6. Postman: REST client. You can send http request and analyze response for REST applications.

    7. Web developer checklist: the checklist ensures best practices for web development.

    8. XRAY: Firefox add-on. Feature rich bookmarklet. Provides information about element in webpage.

    9. PowerGUIhelps to quickly adopt and use PowerShell to efficiently manage your entire Windows environment.

Hiển thị định dạng thời gian thông minh giống Facebook với SQL Server

Nhiều lần, có một yêu cầu để hiển thị ngày cuối cùng hoạt động và thời gian thông minh cho cuối cùng đăng nhập, tin nhắn cuối cùng, trò chuyện cuối cùng, vv.. giống như các mạng xã hội Vì vậy, tôi đã tạo ra một chức năng trong Microsoft SQL, mà sẽ trả về ngày hoạt động cuối cùng hoặc thời gian. Chức năng này sẽ so sánh thời gian ngày cuối cùng với thời gian ngày hiện tại đó là ‘GETDATE ()’ và sẽ trả về kết quả phù hợp.


Đây là các câu lệnh test

SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(day,-1,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(day,-2,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(month,-1,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(month,-2,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(year,-3,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(year,-1,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (getdate())

 

 

Còn đây là Function dùng để format thời gian:

CREATE FUNCTION [dbo].[F_GetLastActiveDateTime]
(
-- Add the parameters for the function here
@lastActiveDate Datetime
)
RETURNS varchar(30)
AS
BEGIN
DECLARE @LastActivity varchar(100)
SET @LastActivity = '';
-- Add the T-SQL statements to compute the return value here
DECLARE @today datetime, @nowLastActiveDate datetime
DECLARE @years int, @months int, @days int, @hours int, @minutes int, @seconds int, @h int, @m int, @s int
 
SELECT @today = GETDATE()
SELECT @nowLastActiveDate = DATEADD(year,DATEDIFF(year, @lastActiveDate, @today), @lastActiveDate)
 
SELECT @years = DATEDIFF(year, @lastActiveDate, @today) - (CASE WHEN @nowLastActiveDate > @today THEN 1 ELSE 0 END)
SELECT @months = MONTH(@today - @nowLastActiveDate) - 1
SELECT @days = DAY(@today - @nowLastActiveDate) - 1
 
SELECT @h = DATEDIFF(HOUR, @lastActiveDate, @today)
SELECT @m = DATEDIFF(MINUTE, @lastActiveDate, @today)
SELECT @s = DATEDIFF(SECOND, @lastActiveDate, @today)
 
SET @hours = (@h%24)
SET @minutes = (@m%60)
SET @seconds = (@s%60)
 
SET @LastActivity =
(CASE
WHEN @years = 1 THEN '1 year ago'
WHEN @years > 1 THEN convert(varchar(3),@years) + ' years ago'
WHEN @months = 1 THEN '1 month ago'
WHEN @months > 1 THEN convert(varchar(3),@months) + ' months ago'
WHEN @days = 1 THEN '1 day ago'
WHEN @days > 1 THEN convert(varchar(3),@days) + ' days ago'
WHEN @hours = 1 THEN '1 hour ago'
WHEN @hours > 1 THEN convert(varchar(3),@hours) + ' hours ago'
WHEN @minutes = 1 THEN '1 minute ago'
WHEN @minutes > 1 THEN convert(varchar(3),@minutes) + ' minutes ago'
WHEN @seconds = 1 THEN '1 second ago'
ELSE 'just now'
END)
 
RETURN @LastActivity;
 
END

 

 

Phím tắt mặc định trong PhpStorm

Như đã giới thiệu ở bài viết trước, PhpStorm hiện tại đang là IDE tuyệt vời và đáng để trải nghiệm nhất cho các lập trình viên, tuy nhiên để chúng ta có thể tận dụng được tối đa những gì công cụ cung cấp và để tiết kiệm thời gian cho những thao tác bằng tay thì chúng ta nên tìm hiểu và sử dụng những tổ hợp phím để cho công việc của chúng ta thêm hiệu quả.

**Lưu ý: Ở đây mình cũng đã highlight những hot key thường xuyên được sử dụng.

Sau đây là Keymap mặc định của PhpStorm trên Windows:

1.Chỉnh sửa

1 Ctrl + Space Gợi ý hoàn thiện những hàm, biến đang được viết dở
2 Ctrl + Shift + Enter Hoàn thiện nốt dòng đang viết.  
3 Ctrl + P Hiển thị thông tin các tham số cần điền trong hàm.
4 Ctrl + Q Tra cứu tài liệu nhanh chóng.
5 Ctrl + trỏ chuột lên phía trên của code Giới thiệu tóm tắt thông tin.
6 Ctrl + F1 Hiển thị mô tả về lỗi hoặc cảnh báo.
7 Alt + Insert Tạo mã … (Getters, Setters, Constructors).
8 Ctrl + O Override một method.
9 Ctrl + I Implement một method.
10 Ctrl + Alt + T Tạo ngoặc ngọn với … (if..else, try..catch, cho, vv).
11 Ctrl + / Comment / bỏ ghi chú với dòng bình luận.
12 Ctrl + Shift + / Comment / bỏ ghi chú với khối bình luận (nhiều dòng).
13 Ctrl + W Chọn liên tục (bôi đen) tăng khối mã (code).
14 Ctrl + Shift + W Giảm lựa chọn hiện tại trạng thái trước (13).
15 Alt + Q Thông tin Context.
16 Alt + Enter Hiển thị ý định hành động và sửa chữa tức thì.
17 Ctrl + Alt + L Định dạng lại code trong tab đang được hiển thị.
18 Ctrl + Alt + I Tự động xét con trỏ xuống dòng.
19 Tab / Shift + Tab Con trỏ xuống / lên chọn dòng.
20 Ctrl + X hoặc Shift + Delete Cắt dòng hiện hoặc khối đã chọn vào clipboard.
21 Ctrl + C hoặc Ctrl + Insert Sao chép dòng hiện tại hoặc khối đã chọn vào clipboard.
22 Ctrl + V hoặc Shift + Insert Dán từ clipboard.
23 Ctrl + Shift + V Dán từ bộ đệm gần đây …
24 Ctrl + D Duplicate dòng hiện hoặc khối đã chọn.
25 Ctrl + Y Xóa dòng, khối dòng đang được chọn.
26 Ctrl + Shift + J Đưa trỏ đến tham số kế tiếp.
27 Ctrl + Enter Đưa trỏ đến cuối dòng.
28 Shift + Enter Bắt đầu dòng mới.
29 Ctrl + Shift + U Bật tắt trường hợp cho chữ tại dấu nháy hoặc khối đã chọn.
30 Ctrl + Shift +] / [ Chọn cho đến khối mã kết thúc / bắt đầu.
31 Ctrl + Delete Xóa từ vị trí con trỏ đến cuối.
32 Ctrl + Backspace Xóa từ vị trí con trỏ đến đầu.
33 Ctrl + Numpad +/- Mở rộng / thu gọn khối mã.
34 Ctrl + Shift + Numpad + Mở rộng tất cả.
35 Ctrl + Shift + NumPad – Thu gọn tất cả.
36 Ctrl + F4 Đóng tab đang hoạt động biên tập.

2. Điều hướng

37 Ctrl + N  Tới Class
38 Ctrl + Shift + N  Đi tới file
39 Ctrl + Alt + Shift + N Đi tới biểu tượng
40 Alt + Left / Right Mở tab phía trước/sau
41 F12 Quay trở lại cửa sổ công cụ trước
42 Esc  Quay trở lại màn hình edit code
43 Shift + Esc Đóng hoạt động hoặc qua cửa sổ đang mở
44 Ctrl + Shift + F4 Đóng, dừng hành động Run/ Message / Search/ …
45 Ctrl + G Di chuyển đến dòng số
46 Ctrl + E Mở danh sách những tập tin đc mở gần đây
47 Ctrl + Alt + Left / Right Chuyển tới file đc edit trước/sau
48 Ctrl + Shift + Backspace Chuyển đến file chỉnh sửa cuối cùng
49 Alt + F1 Chọn file hoặc biểu tượng bất kì với kí tự được nhập
50 Ctrl + B hoặc Ctrl + Click  Chuyển tới nơi biến/hàm được khai báo
51 Ctrl + Alt + B  Chuyển tới nơi hàm/class được triển khai (s)
52 Ctrl + Shift + I  Mở tra cứu định nghĩa
53 Ctrl + Shift + B  Chuyển tới nơi kiểu được định nghĩa
54 Ctrl + U Chuyển tới super-method/super-class được định nghĩa
55 Alt + Up / Down Chuyển tới method trước/sau
56 Ctrl +] / [ Di chuyển đến nơi khối mã kết thúc / bắt đầu
57 Ctrl + F12 Mở popup cấu trúc project
58 Ctrl + H Mở hệ thống phân cấp các kiểu dữ liệu
59 Ctrl + Shift + H Mở hệ thống phân cấp các method
60 Ctrl + Alt + H Mở hệ thống phân cấp
61 F2 / Shift + F2  Highlight lỗi trước/sau
62 F4 / Ctrl + Enter Sửa nguồn / Xem mã nguồn
63 Alt + Home Hiển thị thanh điều hướng
64 F11 Chuyển đổi bookmark
65 Ctrl + F11 Chuyển đổi bookmark với mnemonic
66 Ctrl + # [0-9] Tới bookmark đánh số
67 Shift + F11 Hiển thị bookmark

3. Tìm kiếm và thay thế

68 Ctrl + F  Tìm
69 F3 Tới kết quả tiếp theo
70 Shift + F3 Tới kết quả trước đó
71 Ctrl + R  Thay thế
72 Ctrl + Shift + F  Tìm trong trong tất cả tập tin trong thư mục chỉ định
73 Ctrl + Shift + R Thay thế trong trong tất cả tập tin trong thư mục chỉ định

4. Tìm kiếm cách sử dụng

74 Alt + F7 / Ctrl + F7 Tìm những nơi được sử dụng/được sử dụng trong file
75 Ctrl + Shift + F7 Highlight những nơi được sử dụng
76 Ctrl + Alt + F7 Hiển thị cách dùng

5. Running

77 Alt + Shift + F10 Chọn cấu hình và chạy
78 Alt + Shift + F9 Chọn cấu hình và thực hiện debug
79 Shift + F10 Run
80 Shift + F9 Debug
81 Ctrl + Shift + F10 Run cấu hình context từ editor
82 Ctrl + Shift + X Mở command line

6. Debug

83 F8 Chạy qua
84 F7 Chạy vào
85 Shift + F7 Chạy vào thông minh
86 Shift + F8 Chạy ra khỏi context hiện tại
87 Alt + F9 Run từ nơi trỏ chuột
88 Alt + F8 Bảng đánh giá
89 F9 Resume chương trình
90 Ctrl + F8 Bật tắt breakpoint
91 Ctrl + Shift + F8 Xem breakpoint

7. Refactor

92 F5  Sao chép file
93 F6  Di chuyểnfile
94 Alt + Delete  Xóa file an toàn
95 Shift + F6   Rename file
96 Ctrl + Alt + N Hiển thị thông tin biến của hàm
97 Ctrl + Alt + M Hiển thị thông tin chi tiết của hàm
98 Ctrl + Alt + V Hiển thị thông tin chi tiết của biến
99 Ctrl + Alt + F Hiển thị thông tin của line
100 Ctrl + Alt + C Hiển thị thông tin của Constant

8. Version controls (svn/git)

101 Alt + backquote () Mở nhanh popup version controls
102 Ctrl + K Commit code
103 Ctrl + T Update code
104 Alt + Shift + C Xem thay đổi gần đây

9. Chỉnh sửa chung

105 Ctrl + Shift + A  Tìm kiếm action
106 Alt + # [0-9] Mở cửa sổ công cụ tương ứng
107 Ctrl + Shift + F12 Mở rộng tab đang được edit
108 Alt + Shift + F Thêm vào mục ưa thích
109 Alt + Shift + I Kiểm tra tập tin với cấu hình hiện tại
110 Ctrl + backquote () Switch schema
111 Ctrl + Alt + S Mở cửa sổ cài đặt nhanh
112 Ctrl + Tab Chuyển đổi giữa các tab và cửa sổ công cụ

10. Tổng kết

Trên đây là toàn bộ những phím tắt bạn có thể sử dụng trong PhpStorm. Bạn cũng có thể đặt lại những phím này để cho phù hợp với bản thân bằng cách mở cửa sổ Setting (Ctrl + Alt + S) sau đó search từ khóa “Keymap” sẽ có danh sách các hotkey hiện tại. Chúc các bạn làm việc hiệu quả và nếu có thắc mắc hoặc chia sẻ thì hãy để lại comment nhé.

How To Add Placeholder Text To Textbox In C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MyApp
{
    public partial class TextBoxPalceHolder : Form
    {
        public TextBoxPalceHolder()
        {
            InitializeComponent();
        }
        private void TextBoxPalceHolder_Load(object sender, EventArgs e)
        {
            this.ActiveControl = label1;
            textBox1.GotFocus += new EventHandler(this.TextGotFocus);
            textBox1.LostFocus += new EventHandler(this.TextLostFocus);
        }
        public void TextGotFocus(object sender , EventArgs e)
        {
            TextBox tb = (TextBox)sender;
            if (tb.Text == "Your Text ..........")
            {
                tb.Text = "";
                tb.ForeColor = Color.Black;
            }
        }
        public void TextLostFocus(object sender , EventArgs e)
        {
            TextBox tb = (TextBox)sender;
            if(tb.Text=="")
            {
                tb.Text = "Your Text ..........";
                tb.ForeColor = Color.LightGray;
            }
        }
    }
}