Chuyên đề 2: Công nghê.NET

Giá trị mà thuộc tính này nhận là tên của một Button trên Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím ESC thì sự kiện Click của Button mà bạn chọn được thực thi mà không cần nhấn chuột vào Button đó (tương tự như thuộc tính AcceptButton ). Nhận một trong hai giá trị True hay False - True: Cho phép các các nút: MaximizeBox, MinimizeBox, Close trên Titlebar xuất hiện - False: Không Cho phép các các nút: MaximizeBox, MinimizeBox, Close trên Titlebar xuất hiện (Khi đó các thuộc tính MaximizeBox, MinimizeBox của Form cũng mất đi)

doc101 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 2764 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Chuyên đề 2: Công nghê.NET, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ộc tính thường dùng Tên Ý nghĩa Items Thêm các mnu con, kiểu của menu (Menu con, Textbox, Combobox, gạch phân cách). Thông qua giao diện đồ họa bạn có thể thêm các menu vào (Collection) RightToLeft Nhận một trong hai giá trị True hay False True: Trình bày menu từ phải qua trái (căn lề là bên phải) False: Trình bày menu từ trái qua phải (căn lề là bên trái) ShowImageMargin Hiển thị phần hình ảnh? Các điều khiển bên trong ContextMenuStrip → Hoàn toàn tương tự các điều khiển bên trong điều khiển MenuStrip (ToolStripSeparator (Gạch phân cách), ToolStripMenuItem (Menu con), ToolStripCombobox (Combobox), ToolStripTextbox (Textbox)) Chú ý: Nhóm các điều khiển menu còn có một số điều khiển: MainMenu (không có sẵn trong hộp công cụ Toolbox), StatusStrip, ToolStrip. MỘT SỐ ĐIỀU KHIỂN HỘP THOẠI (DIALOG) *** I. OPEN FILE DIALOG Chức năng Điều khiển OpenFileDialog cho phép bạn chọn (select) tập tin đang tồn tại trên hệ thống, kiểm tra xem một tập tin có tồn tại hay không. Trong trường hợp bạn có nhu cầu chọn một Foder (chứ không phải File) thì bạn chọn điều khiển FolderBrowserDialog Ví dụ: Hộp thoại mở ra khi chúng ta chọn File → Open của chương trình Word hay Notepad… Một số thuộc tính thường dùng Tên Ý nghĩa AddExtension Nhận một trong hai giá trị True hay False True: Cho phép thêm vào tên mở rộng (.txt, .jpg…) vào file False: Ngược lại CheckFileExists Nhận một trong hai giá trị True hay False True: Xuất hiện hộp cảnh báo nếu bạn nhập vào một tên file không tồn tại (nhập vào ô File name: trên hộp thoại OpenFileDialog ) False: Ngược lại CheckPathExists Nhận một trong hai giá trị True hay False True: Kiểm tra đường dẫn tới file có hợp lệ hay không trước khi trả về. False: Ngược lại DefaultExt Chọn tên mở rộng cho file (.txt, .jpg…) mặc định nếu người dùng không cung cấp tên mở rộng cho tập tin. Filter Chọn bộ lọc cho hộp thoại (Chỉ chọn File nào). Ví dụ: File Text (*.txt)|*.txt| Word File (*.doc)|*.doc; FilterIndex Chọn số thứ tự cho bộ lọc (bộ lọc sẽ hiển thị trong mục Files Of Types) FileName Set or Get tên tệp tin bạn chọn FileNames Set or Get mảng chứa tệp tin chọn (trong trường hợp chọn nhiều tập tin) InitialDirectory Đường dẫn mặc định khi hộp thoại OpenFileDialog mở ra Multiselect Nhận một trong hai giá trị True hay False True: Cho phép bạn chọn nhiều tập tin (ví du: Chọn nhiều bản nhạc để nghe…) False: Ngược lại ReadOnlyChecked Nhận một trong hai giá trị True hay False True: Check vào hộp thoại Checkbox Open as Read-Only bên dưới Combobox Files Of Types False: Ngược lại (☻) (với điều kiện thuộc tính ShowReadOnly = True) RestoreDirectory Nhận một trong hai giá trị True hay False True: Mở lại thư mục vừa mở ra lần trước, với điều kiện thuộc tính InitialDirectory không đặt gì False: Không mở lại thư mục vừa mở lần trước ShowReadOnly Nhận một trong hai giá trị True hay False True: Xuất hiện hộp Checkbox Open as Read-Only bên dưới Combobox Files Of Types False: Ngược lại Title Đặt tiêu đề (xuất hiện trên Titlebar) cho hộp thoại OpenFileDialog Minh họa sử dụng hộp thoại OpenFileDialog Giả sử chúng ta có một form có tên: frmOpenFileDialog, trên form có một điều khiển Textbox có tên Textbox1và một điều khiển OpenFileDialog có tên openFileDialog1. Chúng ta sử dụng hộp thoại OpenFileDialog để load nội dung một tệp text vào Textbox private void frmOpenFileDialog_Load(object sender, EventArgs e) { //Đặt một số thuộc tính bằng Code openFileDialog1.AddExtension = false; openFileDialog1.CheckFileExists = true; openFileDialog1.ReadOnlyChecked = true;//Check vào checkbox ->thuộc tính ShowReadOnly = true openFileDialog1.Filter = "File Text (*.txt)|*.txt| File Rtf (*.rtf)|*.rtf| All File|*.*"; openFileDialog1.FilterIndex = 0;//Chọn bộ lọc "File Text (*.txt)|*.txt" -> Chỉ chọn file Text openFileDialog1.FileName = "";//thay cho chuỗi openFileDialog1 xuất hiện trong hộp FileName openFileDialog1.InitialDirectory = "C:\\"; //Mở ổ C khi hộp thoại này hiển thị openFileDialog1.Multiselect = true; openFileDialog1.ShowReadOnly = true;//Xuất hiện Checkbox openFileDialog1.Title = "Cong nghe NET"; //Kiển tra hộp thoại có mở ra không //Sử dụng phương thức ShowDialog() if (openFileDialog1.ShowDialog() == DialogResult.OK) { //Lấy về File bạn chọn. Giả sử tôi chọn File C:\CongNgheNET.txt string FileBanChon = openFileDialog1.FileName; //Đọc file StreamReader sr = new StreamReader(FileBanChon); textBox1.Text = sr.ReadToEnd(); //Đóng luồng đọc sr.Close(); } } II. SAVE FILE DIALOG *** Chức năng Điều khiển SaveFileDialog cho phép bạn ghi một nội dung ra một tập tin (file) mới hay ghi đè lên tập tin đang tồn tại trên hệ thống của bạn. Ví dụ: Hộp thoại mở ra khi chúng ta chọn File → Save của chương trình Word, Notepad…. Một số thuộc tính thường dùng Tên Ý nghĩa AddExtension Nhận một trong hai giá trị True hay False True: Cho phép thêm vào tên mở rộng (.txt, .jpg…) False: Ngược lại CheckFileExists Nhận một trong hai giá trị True hay False True: Xuất hiện hộp cảnh báo nếu bạn nhập vào một tên file không tồn tại (nhập vào ô File name: trên hộp thoại SaveFileDialog ) False: Ngược lại CheckPathExists Nhận một trong hai giá trị True hay False True: Kiểm tra đường dẫn tới file có hợp lệ hay không trước khi trả về. False: Ngược lại Filter Chọn bộ lọc cho hộp thoại (Chỉ chọn File nào). Ví dụ: File Text (*.txt)|*.txt| Word File (*.doc)|*.doc; FilterIndex Chọn số thứ tự cho bộ lọc (bộ lọc sẽ hiển thị trong mục Files Of Types) FileName Set or Get tên tệp tin InitialDirectory Đường dẫn mặc định khi hộp thoại SaveFileDialog mở ra RestoreDirectory Nhận một trong hai giá trị True hay False True: Mở lại thư mục vừa mở ra lần trước, với điều kiện thuộc tính InitialDirectory không đặt gì False: Không mở lại thư mục vừa mở lần trước Title Đặt tiêu đề (xuất hiện trên Titlebar) cho hộp thoại SaveFileDialog ShowHelp Cho phép xuất hiện Button Help (?) hay không? OverwritePrompt Xuất hiện cảnh báo nếu bạn ghi đè vào một tập tin đã tồn tại Minh họa sử dụng SaveFileDialog Giả sử chúng ta có một form có tên: frmSaveFileDialog, trên form có một điều khiển Textbox có tên Textbox1và một điều khiển SaveFileDialog có tên saveFileDialog1. Chúng ta sử dụng hộp thoại SaveFileDialog để ghi nội dung Textbox vào một tệp Text qua sự kiện Click của một Button có tên btSave private void btSave_Click(object sender, EventArgs e) { //Đặt một số thuộc tính bằng Code saveFileDialog1.AddExtension = true;//Cho phép thêm vào tên mở rộng saveFileDialog1.OverwritePrompt = true;//Xuất hiện cảnh báo nếu tập tin đã tồn tại saveFileDialog1.DefaultExt = "txt";//Chạy nếu: saveFileDialog1.AddExtension = true saveFileDialog1.CheckPathExists = true;//Kiểm tra đường dẫn có hợp lệ hay không saveFileDialog1.FileName = ""; saveFileDialog1.Filter = "Text File (*.txt)|*.txt"; saveFileDialog1.FilterIndex = 0; //saveFileDialog1.InitialDirectory = "C:\\";//Chọn đường dẫn khi hộp thoại mở ra saveFileDialog1.RestoreDirectory = true;//ĐK không đặt saveFileDialog1.InitialDirectory saveFileDialog1.ShowHelp = true; saveFileDialog1.Title = "Cong nghe NET"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { //Lấy nội dung cần ghi string strNoiDung=textBox1.Text; //Lấy ra tên file cần ghi string strFileSave = saveFileDialog1.FileName; //Ghi file StreamWriter sw = new StreamWriter(strFileSave); sw.Write(strNoiDung); //đóng luồng sw.Close(); }//ví dụ rất đơn giản FOLDER BROWSER DIALOG *** Chức năng Điều khiển FolderBrowserDialog cho phép người dùng chọn (Select) thư mục đang tồn tại trong hệ thống, đồng thời có thể tạo mới thư mục ngay trong thư mục đang chọn (Chú ý: Điều khiển OpenFileDialog chỉ cho phép chọn file). Một số thuộc tính thường dùng Tên Ý nghĩa Description Chuỗi mô tả về hộp thoại, xuất hiện bên dưới khung Title RootFolder Thư mục mặc định chọn khi hộp thoại mở ra. Bao gồm rất nhiều lựa chọn có sẵn SelectedPath Trả về tên thư mục (cả đuờng dẫn đầy đủ) mà người sử dụng chọn (các bạn chú ý thuộc tính này) ShowNewFolderButton Nhận một trong hai giá trị True hay False True: Xuất hiện Buttons Make New Folder cho phép người dùng tạo ra thư mục mới trong thư mục bạn chọn False: Ngược lại Minh họa sử dụng hộp thoại FolderBrowserDialog Chúng ta minh họa sử dụng điều khiển FolderBrowsersDialog qua ứng dụng tạo Slide ảnh. Giả sử chúng ta có một form có tên: frmFolderBrowserDialog, trên form có chứa một số điều khiển sau: PictureBox có tên pictureBox1 để hiển thị ảnh Điều khiển folderBrowserDialog có tên folderBrowserDialog1 dùng để chọn thư mục chứa ảnh Điều khiển Timer có tên timer1 Button có tên btOpen → XEM CODE TRONG PROJECT KÈM THEO (frmFolderBrowserDialog) //Khai báo mảng string[] MangAnh = null; int Index = 0; int CountImage; //Load private void frmFolderBrowserDialog_Load(object sender, EventArgs e) { this.WindowState = FormWindowState.Maximized; pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; } //Mở thư mục chứa các File ảnh private void btOpen_Click(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { //Khai báo các mảng để chứa các ảnh khác nhau: jpg, jpeg string[] MangAnhJpg = null, MangAnhJpeg = null, MangAnhBitmap = null; //Lấy ra các phần tử của mảng bảng cách dùng lớp Directory //Ở đây tôi chọn thư mục: D:\Pictures chứa rất nhiều ảnh của tôi MangAnhJpg = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.jpg");//CHÚ Ý CÂU LỆNH NÀY MangAnhJpeg = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.jpeg");//CHÚ Ý CÂU LỆNH NÀY MangAnhBitmap = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.bmp");//CHÚ Ý CÂU LỆNH NÀY //Lấy ra chiều dài mảng int i = MangAnhJpg.Length; int j = MangAnhJpeg.Length; int k = MangAnhBitmap.Length; //Khai báo mảng mới là tổ hợp của 3 mảng MangAnh = new string[i+j+k]; //CHÚ Ý CÂU LỆNH NÀY //Xử lý về mảng Array.Copy(MangAnhJpg, 0, MangAnh, 0,i); //CHÚ Ý CÂU LỆNH NÀY Array.Copy(MangAnhJpeg, 0, MangAnh, i, j); //CHÚ Ý CÂU LỆNH NÀY Array.Copy(MangAnhBitmap, 0, MangAnh, i+j, k); //CHÚ Ý CÂU LỆNH NÀY //3 CÂU LỆNH NÀY ĐÚNG LOGIC CHƯA????? ^_^ ☺ //Lấy ra số ảnh CountImage = MangAnh.Length; //Hết ForEach timer1.Enabled = true; } } //Chú ý: Đặt thuộc tính cho Timer //Enabled=true //Interval=2000 > sau 2 giây chuyển sang ảnh tiếp theo private void timer1_Tick(object sender, EventArgs e) { //Khai bào Image > Chú ý câu lệnh này Image img = Image.FromFile(MangAnh[Index]); //Hiển thị nên Picture pictureBox1.Image = img; //Chuyển đến ảnh tiếp theo Index++; if (Index >= End) Index = 0; } V. FilE SYSTEM WATCHER *** Chức năng Theo dõi sự thay đổi của File và Folder (thay đổi về tên, nội dung…) của các ổ đĩa, các thư mục… do bạn chỉ định Một số thuộc tính thường dùng Tên Ý nghĩa Path Đường dẫn cần theo dõi (có thể là ổ đĩa hay một thư mục) (kết hợp sử dụng với điều khiển FolderBrowserDialog để theo dõi sự thay đổi của một folder bất kì do bạn chọn) Filter Bộ lọc loại tập tin (theo dõi sự thay đổi của các file Text, file doc hay tất cả các file) EnableRaisingEvents Nhận một trong hai giá trị True hay False True: Cho phép các sự kiện có hiệu lực khi có thay đổi không (thường chọn là true) False: ngược lại IncludeSubdirectories Nhận một trong hai giá trị True hay False True: Theo dõi sự thay đổi của cả các thư mục con của thư mục bạn chọn False: Ngược lại (tất nhiên rồi ☻) NotifyFilter Bộ lọc đối với sự kiện Changed (thay đổi về tên, thuộc tính file, thời gian truy cập…) Một số phương thức thường dùng Tên Ý nghĩa Created sự kiện này xảy ra khi có tạo mới file hay folder Deleted Tương tự như trên Changed Renamed Minh họa sử dụng điều khiển FileSystemWatcher Giả sử chúng ta có form có tên: frmFileSystemWatcher. Trên form đó có chứa: điều khiển FolderBrowserDilog có tên folderBrowserDialog1 để chọn thư mục bất kì cần theo dõi, điều khiển FileSystemWatcher có tên fileSystemWatcher1, một listbox có tên lstFileSystemWatcher (mỗi khi có sự thay đổi thì dòng thông báo được thêm vào Listbox này) và một Button có tên btSelect để chọn thư mục cần theo dõi. → XEM CODE TRONG PROJECT KÈM THEO (frmFileSystemWatcher) //Chọn thư mục cần theo dõi private void btSelect_Click(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { string strFolderCanTheoDoi = folderBrowserDialog1.SelectedPath; //Đường dẫn cần theo dõi fileSystemWatcher1.Path = strFolderCanTheoDoi; //Bộ lọc loại tập tin theo dõi theo dõi tất cả các loại tập tin .txt, .doc..... fileSystemWatcher1.Filter = "*.*"; // Cho phép sử dụng các sự kiện khi có thay đổi fileSystemWatcher1.EnableRaisingEvents = true; //Theo dỏi cả các thư mcụ con trong thư mục vừa chọn fileSystemWatcher1.IncludeSubdirectories = true; //Bộ lọc đối với sự kiện Changed fileSystemWatcher1.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.Size; //Xử lý các sự kiện //Nếu thuộc tính EnableRaisingEvents=False thì các câu lệnh này không có hiệu lực fileSystemWatcher1.Created += new FileSystemEventHandler(CreatedFileAndFolder); fileSystemWatcher1.Deleted += new FileSystemEventHandler(Delete); fileSystemWatcher1.Changed += new FileSystemEventHandler(Changed); fileSystemWatcher1.Renamed += new RenamedEventHandler(Renamed); } } //Các sự kiện //Phương thức thực thi khi có file hay folder được tạo ra public void CreatedFileAndFolder(object sender, FileSystemEventArgs e) { lstFileSystemWatcher.Items.Add("Create: " + e.FullPath + "Vừa được tạo ra"); } //Phương thức thực thi khi có file hay folder được Xóa đi public void Delete(object sender, FileSystemEventArgs e) { lstFileSystemWatcher.Items.Add("Delete: " + e.FullPath + "Vừa được Xóa đi"); } //Phương thức thực thi khi có file hay folder thay đổi nội dung public void Changed(object sender, FileSystemEventArgs e) { lstFileSystemWatcher.Items.Add("Changed: " + e.FullPath + " Vừa mới thay đổi!"); } //Phương thức thực thi khi có file hay folder thay đổi tên public void Renamed(object sender, RenamedEventArgs e) { lstFileSystemWatcher.Items.Add("Renamed: " + e.OldName + " được đổi tên thành: " + e.Name + "(" + e.OldFullPath + " -> " + e.FullPath + ")"); } Chú ý: Nhóm các điều khiển hộp thoại (Dialog) còn có một số điều khiển: ColorDialog (Cho phép chọn màu), FontDialog (cho phép chọn font chữ) MỘT SỐ ĐIỀU KHIỂN KHÁC *** I. TOOLTIP Chức năng Điều khiển Tooltip hỗ trợ cách sử dụng các điều khiển khác trên form bằng cách trình bày cửa sổ nhỏ hình chữ nhật với các diễn giải ngắn gọn khi người sử dụng di chuyển chuột vào điều khiển đó. Một số thuộc tính thường dùng Tên Ý nghĩa Active Nhận một trong hai giá trị True hay False True: Cho phép cửa sổ Tooltip được xuất hiện False: Không cho phép BackColor Chọn mầu nền cho cửa sổ Tooltip (chính là khung hình chữ nhật hiện ra) AutomaticDelay Thời gian tính bằng phần ngàn giây áp dụng cho 3 thuộc tính ở dưới đây: AutoPopDelay, InitiaDelay, ReshowDelay AutoPopDelay Khoảng thời gian mà cửa sổ điều khiển tooltip xuất hiện kể từ lúc người dùng di chuyển chuột vào điều khiển cho đến khi kết thúc (1000=1s). (Nói gắn gọn: Khoảng thời gian mà nó sẽ được xuất hiện khi người dùng di chuyển chuột vào điều khiển) InitialDelay Khoảng thời gian mà cửa sổ điều khiển tooltip sẽ chờ để được xuất hiện kể từ khi người dùng di chuyển chuột vào điều khiển (Ví dụ đặt thuộc tính là 1000 thì sau khi di chuyển chuyển vào điều khiển 1s thì cửa sổ tooltip sẽ xuất hiện) ReshowDelay Khoảng hời gian mà cửa sổ sẽ tắt kể từ khi người dùng di chuyển chuột ra ngoài điều khiển IsBalloon Nhận một trong hai giá trị True hay False True: Cửa sổ hình chữ nhật bật nên với các góc bo tròn False: Cửa sổ hiện nên có hình chữ nhật TooltipIcon Biểu tượng xuất hiện trên hộp Tooltip TooltipTitle Chuỗi xuất hiện bên cạnh Icon ở trên(Không phải là Tooltip) Sử dụng điều khiển Tooltip Khi kéo một điều khiển Tooltip vào Form thì mặc định tên của nó là: toolTip1. Khi đó các điều khiển trên Form (Textbox, Button hay Label…..) tự động có thêm một thuộc tính nữa là: Tooltip on Tooltip1 (Với Tooltip1 là tên của điều khiển vừa đưa vào - Thuộc tính mới này nằm trong hộp thoại Properties). Bạn chỉ cần đặt giá trị cho thuộc tính này (thuộc tính Tooltip on Tooltip1 của các điều khiển như Textbox, Button…chứ không phải của tooltip) là một chuỗi gợi nhắc nào đó. Lúc chạy chương trình khi trỏ chuột vào điều khiển đó hiện nên thông báo (Chuỗi vừa nhập ở thuộc tính Tooltip on Tooltip1) ERROR PROVIDER *** Chức năng Điều khiển này cung cấp giao tiếp giữa người sử dụng với các thông tin lỗi của các điều khiển trên Form Một số thuộc tính thường dùng Tên Ý nghĩa BlinkRate Khoảng thời gian giữa hai lần nhấp nháy (1000=1s) BlinkStyle Chọn kiểu hiển thị cho điều khiển ErrorProvider. Nhận 1 trong 3 giá trị: Khi có lỗi mới nhấp nháy (BlinkIfDifferentError - mặc định). Nhấp nháy liên tục (AlwaysBlink), Không bao giờ nhấp nháy (NeverBlink). Icon Icon xuất hiện bên cạnh điều khiển, có thể chọn Icon bất kì trên máy tính của bạn chứ không nhất thiết là Icon mặc định của VS (hình tròn đỏ) Một số phương thức thường sử dụng Tên Ý nghĩa SetError Khai báo chuỗi xuất hiện tương tự như thuộc tính Error on errorProvider1. GetError Nhận chuỗi từ thuộc tính Error on errorProvider1 của điều khiển. Clear Loại bỏ tất cả các chuỗi diển giải cho các điều khiển Sử dụng điều khiển ErrorProvider Khi kéo một điều khiển ErrorProvider vào Form thì mặc định tên của nó là: errorProvider1. Khi đó các điều khiển trên Form (Textbox, Button hay Label…..) tự động có thêm một thuộc tính nữa là: Error on errorProvider1 (Với errorProvider1 là tên của điều khiển Error Provider vừa đưa vào - Thuộc tính mới này nằm trong hộp thoại Properties). Bạn chỉ cần đặt giá trị cho thuộc tính này là một chuỗi nào đó (thuộc tính Error on errorProvider1 của các điều khiển như Textbox, Button…chứ không phải của điều khiển ErrorProvider). Lúc chạy chương trình thì có một biểu tượng hình tròn đỏ bên cạnh điều khiển mà bạn đặt thuộc tính Error on errorProvider1, khi trỏ vào đó sẽ xuất hiện dòng thông báo trên). Ví dụ: Chúng ta có một form: frmErrorProvider. Trên form có 2 điều khiển Textbox có tên là: txtUser, txtPass và một button có tên btLogin. Khia nhấn vào nút btLogin nếu giá trị của 2 ô txtUser và txtPass để trống (“”) thì xuất hiện điều điều khiển ErrorProvider bên cạnh các điều khiển này private void btLogin_Click(object sender, EventArgs e) { //Chúng ta có thể kéo một điều khiển ErrorProvider vào form và đặt các thuộc tính //Cho các điều khiển txtUser, txtPass và điều khiển ErrorProvider bạn vừa tạo ra //Ở đây khai báo đối tượng ErrorProvider bằng code //Khai báo đối tượng thuộc kiểu ErrorProvider ErrorProvider ep = new ErrorProvider(); //Đặt các thuộc tính ep.Clear(); ep.BlinkRate = 300; ep.BlinkStyle = ErrorBlinkStyle.BlinkIfDifferentError; //Đặt cho một một điều khiển (Textbox) sử dụng phương thức SetError if (txtUser.Text == "") ep.SetError(txtUser, "User không được để trống"); if (txtPass.Text == "") ep.SetError(txtPass, "Pass không được để trống"); } PROGRESSBAR *** Chức năng Điều khiển ProgressBar dùng trình bày thời lượng thực hiện công việc (ví dụ: thanh tiến trình trên trình duyệt IE…). Một số thuộc tính thường dùng Tên Ý nghĩa Maximum Giới hạn trên (cực đại) của điều khiển ProgressBar Minimum Giới hạn dưới (cực tiểu) của điều khiển ProgressBar Value Giá trị hiện hành đang xử lý trên điều khiển ProgressBar Style Kiểu trình bày của ProgressBar và nhận 1 trong 3 giá trị: Blocks: Tô từng khối (các khối có cách nhau) màu xanh từ trái qua phải Continuous: Tô màu xanh (liền nhau) từ trái qua phải Marquee: Cuộn màu xanh chạy từ trái qua phải Step Bước nhảy của ProgressBar Ví dụ đơn giản về ProgressBar Giả sử chúng ta có form: frmProgresBar. Trên form có một điều khiển ProgressBar có tên progressBar1, một điều khiển timer có tên timer1 và một label có tên là label1. Chúng ta minh họa sử dụng ProgressBar qua ví dụ đơn giản sau: int i = 1; private void frmProgresBar_Load(object sender, EventArgs e) { //Đặt một số thông số cho ProgressBar progressBar1.Maximum = 100; progressBar1.Minimum = 0; //Đặt một số thông số cho Timer timer1.Interval = 1000; //1 giây timer1.Enabled = true; } //Sự kiện Tick của Timer private void timer1_Tick(object sender, EventArgs e) { progressBar1.Value = 10 * i; label1.Text = i.ToString(); i = i + 1; if (i > 10) i = 1; } LISTVIEW *** Chức năng Điều khiển ListView dùng để trình bày các phần tử dạng danh sách với nhiều hình dạng khác nhau. Một số thuộc tính thường dùng Tên Ý nghĩa CheckBoxes Nhận một trong hai giá trị True hay False (mặc định là False) True: Hiển thị một checkbox bên cạnh phần tử đầu tiên của mỗi hàng (1 hàng = 1 ListviewItem) trong Listview False: Ngược lại Columns Tập các cột trong ListView là một Collection. Thông qua thuộc tính này có thể thêm các cột vào Listview (Có thể thêm các cột vào Listview thông qua giao diện đồ họa hay có thể viết Code. Chú ý: Phải đặt thuộc tính View là Detail thì bạn mới có thể nhìn thấy các cột này) ContextMenuStrip Gắn một menu ngữ cảnh với điều khiển ListView (khi nhấn chuột phải vào Listview thì sẽ hiển thị menu này) FullRowSelect Nhận một trong hai giá trị True hay False True: Cho phép chọn (bôi đen) cả hàng (của phần tử đang được chọn. Chú ý: Thuộc tính View = Detail) False: Ngược lại GridLines Nhận một trong hai giá trị True hay False True: Hiển thị lưới bao quanh và ngăn cách các hàng (Chỉ có hiệu lực nếu thuộc tính View = Detail) False: Ngược lại Group Khai báo nhóm để phân loại các phần tử sau khi trình bày trên điều khiển Listview HeaderStyle Đây là thuộc tính cho phép chọn Style cho Listview trong chế độ View là Report Items Là một Collection. Cho phép tạo ra các giá trị cho các hàng, cột trong Listview (tất nhiên có thể dùng giao diện đồ họa hay viết Code) LabelEdit Nhận một trong hai giá trị True hay False True: Cho phép thay đổi (sửa) Text của các phần tử (các Ô). False: Ngược lại LabelWap Nhận một trong hai giá trị True hay False True: Chuỗi §HSPKTHYẽ tự động xuống hàng khi chiều dài không đủ để trình bày False: Ngược lại MultiSelect Nhận một trong hai giá trị True hay False True: Cho phép chọn nhiều hàng (ListviewItem). Mặc định là True False: Không cho phép chọn nhiều hàng LargeImageList Đối tượng ImageList chứa danh sách các Image theo chỉ số (Index) từ 0 đến n-1. Được sử dụng nếu thuộc tính View là LargeIcon SmallImageList Đối tượng ImageList chứa danh sách các Image theo chỉ số (index) từ 0 đến n-1. Được sử dụng nếu thuộc tính View là SmallIcon Scrollable Nhận một trong hai giá trị True hay False True: Cho phép xuất hiện thanh trượt trong Listview (Khi số ListViewItem nhiều và vượt qua chiều cao của ListView) False: Ngược lại Sorting Sắp xếp giá trị các hàng (ListViewItem) trong ListView (Chỉ có hiệu lực nếu thuộc tính View là Detail). Thuộc tính này nhận một trong các giá trị sau None: Không Sắp xếp Ascending: Sắp xếp tăng Descending: Sắp xếp giảm SelectedItems Trả về danh sách các phần tử được chọn (bôi đen) CheckedItems Trả về danh sách các phần tử được check (tất nhiên thuộc tính CheckBoxes = True) View Các kiểu Hiển thị trên ListView. Thuộc tính View có thể nhận một số giá trị sau: LargeIcon SmallIcon List Detail Title → Mặc định là: LargeIcon Một số phương thức thường dùng Tên Ý nghĩa Clear Xóa tất cả ListView RemoveAt Xóa bỏ một cột có chỉ số (ở vị trí) nào đó ……………………………… Một số sự kiện thường dùng Tên Ý nghĩa SelectedIndexChanged Xảy ra khi người sử dụng thay đổi phần tử được chọn trong ListView ItemActivate Xảy ra khi chọn phần tử trên ListView ItemChecked Khi Check vào biểu tượng Checkbox của mỗi phần tử trên điều khiển ListView Một số khái niệm liên quan đến ListView Hình 1: Minh họa về ListView Hình 2: Cột trong ListView Hình 3: Khái niệm ColumnHeader Hình 4: Khái niệm ListViewItem Hình 5: Khái niệm SubItems Hình 6: Minh họa về Group Minh họa ListView Giả sử chúng ta có một điều khiển ListView có tên là LV (thuộc tính Name=LV), và có thuộc tính View=Detail. Chúng ta minh họa ListView qua một số bước sau: Bước 1: ListView khi chưa làm gì. Bước 2: Thêm một cột vào ListView LV.Columns.Add("Name",100,HorizontalAlignment.Left); //Hoặc 3 câu lệnh dưới đây //ColumnHeader ch = new ColumnHeader("clName"); //ch.Text = "Name"; //LV.Columns.Add(ch); Bước 3: Thêm cột thứ 2 vào ListView LV.Columns.Add("Size",100,HorizontalAlignment.Left); //Hoặc 3 câu lệnh dưới đây //ColumnHeader ch = new ColumnHeader("clSize"); //ch.Text = "Size"; //LV.Columns.Add(ch); Bước 4: Tạo hàng mới và Add các giá trị vào hàng mới đó ListViewItem lvi; lvi= new ListViewItem("TK4.doc"); lvi.SubItems.Add("30Kb"); LV.Items.Add(lvi); ////Hoặc sử dụng 3 câu lệnh sau //string[] HangMoi = new string[] { "TK4.doc", "30Kb" }; //ListViewItem lvi = new ListViewItem(Them); //LV.Items.Add(lvi); Sử dụng điều khiển ListView qua một số Code Giả sử chúng ta có một form có tên: frmListView. Trên đó có chứa một số điều khiển sau: Điều khiển ListView có tên listView1 (Chúng ta để tất cả các thuộc tính của listView1 với giá trị mặc định). Button btCheck: minh họa việc duyệt các hàng được check trên ListView Buttonbt RemoveAtColumns: Minh họa xóa một cột trong ListView Buttonbt RemoveAtItems: Minh họa xóa một hàng trong ListView Buttonbt ShowFile: Minh họa hiển thị tất cả các file trong một thư mục nên ListView Button btGroup: Minh họa về Group trong ListView Chúng ta sẽ minh họa sử dụng ListView qua sự kiện Click của các button trên. 7.1. Tạo các cột, hàng cho ListView bằng code private void frmListView_Load(object sender, EventArgs e) { //Đặt một số thuộc tính cho điều khiển ListView1 bằng code //Bạn chỉ có thể nhìn thấy các cột nếu đặt thuộc tính View=Detail listView1.View = View.Details; listView1.GridLines = true; listView1.CheckBoxes = true;//Hiển thị checkbox: các bạn xem kết quả ở hinhg minh họa. //Thêm 4 cột vào Listview //Có thể thêm cột vào ListView theo cách này listView1.Columns.Add("Họ và tên", 100, HorizontalAlignment.Center); listView1.Columns.Add("Quê quán", 100, HorizontalAlignment.Center); listView1.Columns.Add("Lớp", 100, HorizontalAlignment.Center); //Cách 2: Có thể thêm vào theo cách này: Sử dụng ColumnHeader ColumnHeader ch = new ColumnHeader("chNgaySinh"); ch.Text = "Ngày sinh"; ch.TextAlign = HorizontalAlignment.Center; ch.Width = 100; listView1.Columns.Add(ch); //Thêm hàng thứ nhất vào ListView string[] Them = new string[] { "Nguyễn Văn Hải", "Hưng Yên", "TK4N1", "29-03-1987" }; ListViewItem lv = new ListViewItem(Them); listView1.Items.Add(lv); //Thêm hàng thứ 2 string[] Them2 = new string[] { "Nguyễn Văn Hạnh", "Hà Nội", "TK4N1", "24-04-1987" }; ListViewItem lv2 = new ListViewItem(Them2); listView1.Items.Add(lv2); //Thêm hàng thứ 3 string[] Them3 = new string[] { "Phạm Thị Hạnh", "Hải Dương", "TK4N1", "04-10-1988"}; ListViewItem lv3 = new ListViewItem(Them3); listView1.Items.Add(lv3); //Thêm hàng thứ 4 string[] Them4 = new string[] { "Vũ Thị Hảo", "Bắc Ninh", "TK4N1", "25-12-1987" }; ListViewItem lv4 = new ListViewItem(Them4); listView1.Items.Add(lv4); } → Sau khi chạy có hình như sau: 7.2. Duyệt xem những hàng nào được Check private void btCheck_Click(object sender, EventArgs e) { //Bạn phải tạo ra một Listview như mục 7.1 trước đã MessageBox.Show("Tên các sinh viên được Check là","Check",MessageBoxButtons.OK); //Duyệt các phần tử được Check thông qua thuộc tính CheckedItems foreach (ListViewItem lvi in listView1.CheckedItems) { //Lấy về phần tử thứ mấy (ô thứ mấy) của ListViewItem (của 1 hàng): sử dụng SubItems //DataGridView ListView MessageBox.Show(lvi.SubItems[0].Text); } //Giờ thì bạn chạy và check thử vài hàng để thấy rõ kết quả } 7.3. Xóa một Cột tại vị trí nào đó private void btRemoveAtColumns_Click(object sender, EventArgs e) { //Chú ý: Tập các column trong Listview là một Collection nên có đầy đủ các phương thức của một Collection. //Ví dụ: Xóa một cột ở vị trí nào đó //Tất nhiên bạn phải tạo ra một listview với các giá trị như mục 7.1 listView1.Columns.RemoveAt(1); //Giờ thì bạn chạy và nhấn vào Button này để thấy kết qủa để xem các kết quả } Hình 7.2: Columns ↔ Collection 7.4. Xóa một hàng tại một vị trí nào đó → Hoàn toàn tương tự như xóa một cột private void btRemoveAtItems_Click(object sender, EventArgs e) { //Chú ý: Tập các Items trong Listview là một Collection nên có đầy đủ các phương thức của một Collection. //Ví dụ: Xóa một cột ở vị trí nào đó (tất nhiên bạn phải tạo ra một listview với các giá trị như mục 7.1) listView1.Items.RemoveAt(1); //Giờ thì bạn chạy và nhấn vào Button này để xem các kết quả } Hình 7.4: Items ↔ Collection 7.5. Duyệt tất cả các file trong một thư mục và hiển thị nên ListView private void btShowFile_Click(object sender, EventArgs e) { //Listview (listView1) này hiển thị tất cả các File trong C:\WINDOWS //Bạn có thể dùng hộp thoại FolderBrowserDialog để duyệt file trong thư mục bất kì mà bạn chọn //Phương thức Clear xóa toán bộ Listview listView1.Clear(); //Chọn một số thuộc tính cho Listview thông qua mã lệnh listView1.View = View.Details; listView1.FullRowSelect = true;//Cho phép chọn cả hàng như hình kết quả dưới listView1.GridLines = true; //Add các cột vào Listview bằng mã lệnh //Mỗi file có các đặc tính của file: Tên, kích thước, kiểu file (ReadOnly, System...) nên chúng ta tạo ra các cột tương ứng listView1.Columns.Add("Number", 100, HorizontalAlignment.Left); listView1.Columns.Add("Name", 300, HorizontalAlignment.Left); listView1.Columns.Add("Size", 150, HorizontalAlignment.Left); listView1.Columns.Add("Type", 100, HorizontalAlignment.Left); //Nên khai báo đổi tượng DirectoryInfo để duyệt file //DirectoryInfo là một lớp nằm trong System.IO DirectoryInfo dir = new DirectoryInfo(@"C:\WINDOWS"); //Khai báo i để lấy về Số thứ tự file: 1, 2, 3.... int i = 0; //Khai báo một ListviewItem - Một Hàng ListViewItem lvi; //Duyệt File () foreach (FileInfo f in dir.GetFiles("*.*")) { //Tăng giá trị i nên 1 i++; //Gán các thành phần cho lvi qua thuộc tính SubItems.Add lvi = new ListViewItem(i.ToString()); lvi.SubItems.Add(f.Name); lvi.SubItems.Add(f.Length.ToString()); lvi.SubItems.Add(f.Attributes.ToString()); //Sau khi đã gán phải Add vào Listview listView1.Items.Add(lvi); } //Hết } Hình 7.5: Kết quả sau khi nhấn vào Button Show File 7.6. làm việc với Group trong ListView private void btGroup_Click(object sender, EventArgs e) { //Ý tưởng: Chúng ta muốn đưa tất cả các file có cùng thuộc tính vào một nhóm //làm việc với nhóm các bạn chú ý đối tượng ListViewGroup //Xóa Listview trướcđã listView1.Clear(); //Đặt một số thuộc tính bằng Code listView1.View = View.Details; //Khai báo 3 nhóm ListViewGroup gArchive; ListViewGroup gSystem; ListViewGroup gNormal; //Add các cột vào Listview bằng mã lệnh listView1.Columns.Add("Number", 100, HorizontalAlignment.Left); listView1.Columns.Add("Name", 300, HorizontalAlignment.Left); listView1.Columns.Add("Size", 150, HorizontalAlignment.Left); listView1.Columns.Add("Type", 100, HorizontalAlignment.Left); //Add 3 nhóm - Group vào Listview gArchive = new ListViewGroup("Archive"); gSystem = new ListViewGroup("System"); gNormal = new ListViewGroup("Normal"); listView1.Groups.Add(gArchive); listView1.Groups.Add(gSystem); listView1.Groups.Add(gNormal); //Listview này hiển thị tất cả các File trong C:\WINDOWS //Nên khai báo đổi tượng DirectoryInfo DirectoryInfo dir = new DirectoryInfo(@"C:\WINDOWS"); //Khai báo i để lấy về Số thứ tự file: 1, 2, 3.... int i = 0; string ThuocTinhFile = ""; //Khai báo một ListviewItem-Một Hàng ListViewItem lvi; //Duyệt file và đưa vào Group các file cùng thuộc tính foreach (FileInfo f in dir.GetFiles("*.*")) { i++; //Gán các thành phần cho lvi qua thuộc tính SubItems.Add lvi = new ListViewItem(i.ToString()); lvi.SubItems.Add(f.Name); lvi.SubItems.Add(f.Length.ToString()); //Lấy về thuộc tính tập tin và xử lý ThuocTinhFile = f.Attributes.ToString(); lvi.SubItems.Add(ThuocTinhFile); //Nhóm tập tin Archive if (ThuocTinhFile.StartsWith("Archive")) gArchive.Items.Add(lvi); //Nhóm tập tin Archive if (ThuocTinhFile.StartsWith("System")) gSystem.Items.Add(lvi); //Nhóm tập tin Archive if (ThuocTinhFile.StartsWith("Normal")) gNormal.Items.Add(lvi); //Sau khi đã gán phải Add vào Listview listView1.Items.Add(lvi); } //Hết- Kết quả xem hình dưới } Hình 7.6: Group 7.7. Lấy về giá trị của một ô (SubItems) bất kì nào đó trên ListView (sự kiện listView1_ItemActivate) Giả sử chúng ta có hình như sau: Chúng ta muốn lấy thông tin về sinh viên “Phạm Thị Hạnh” bạn có thể sử dụng đoạn code sau: private void listView1_ItemActivate(object sender, EventArgs e) { ListViewItem lvi = listView1.FocusedItem; MessageBox.Show(lvi.Text);//Lấy ra giá trị ô text đầu tiên //Lấy về cột thứ 1 - Cột Quê quán (Cột trông ListView có chỉ số bắt đầu = 0) string Cot1 = lvi.SubItems[1].Text; MessageBox.Show("Giá trị cột thứ 1: " + Cot1); //Lấy về cột thứ 2 - Cột Lớp string Cot2 = lvi.SubItems[2].Text; MessageBox.Show("Giá trị cột thứ 2: " + Cot2); //Giờ thì bạn chạy và Click vào một hàng xem để xem kết quả //Ứng dụng: Thường ứng dụng trong lập trình CSDL: Hiển hị tất cả các các thông tin (sinh viên chả hạn) //nên ListView. khi người dùng chọn một hàng trên ListView thì hiển thị các giá trị tương ứng nên //Các Textbox. khi đó bạn có thể chỉnh sửa các thông tin và Update vào CSDL.... //................ } V. DATAGRID VIEW *** 1. Chức năng Điều khiển DataGridView dùng để hiển thị dữ liệu. 2. Một số thuộc tính thường dùng Tên Ý nghĩa AutoSizeColumnsMode Các kiểu lựa chọn với Cột (Đặt các chế độ khác nhau) AutoSizeRowsMode Các kiểu lựa chọn với Hàng (Đặt các chế độ khác nhau) BackGroundColor Chọn mầu nền cho DataGridView BorderStyle Đặt kiểu đường viền ngoài bao quanh cho DataGridView CellBorderStyle Đặt đường viền cho các ô ColumnHeadersBorderStyle ColumnHeadersHeight ColumnHeadersVisible Nhận một trong hai giá trị True hay False True: Cho phép hiển thị tiêu đề các cột False: Không cho phép hiển thị tiêu để các cột Columns Làm việc với cột (Đặt tiêu đề cho Headers, lựa chọn kiểu cột (Checkbox, Button, Image…). → Trong DataGridView một cột có thể là: Cột các Button, Cột các Checkbox… DataMember Chọn cơ sở dữ liệu để hiển thị nên DataGridView DataSource Chọn nguồn dữ liệu cho DataGridView (hai thuộc tính DataSource và DataMember hay đi với nhau) GridColor Chọn màu cho lưới (các hàng, các cột được ngăn cách nhau bởi lưới) MultiSelect Cho phép/Không cho phép chọn nhiều dòng? ReadOnly Nhận một trong hai giá trị True hay False True: Cho phép thay đổi giá trị các các phần tử (các ô hay các Cell). False: không cho phép thay đổi giá trị các phần tử. RowHeadersBorderStyle Chọn kiểu viền cho các Hàng (Rows). RowHeaderVisible Nhận một trong hai giá trị True hay False True: Cho phép hiển thị Headers của hàng(Cột đầu tiên ở mép ngoài bên trái) False: Ngược lại 3. Một số sự kiện thường dùng Tên Ý nghĩa CellClick Xảy ra khi người dùng nhấn chọn một ô bất kì nào đó trên DataGridView (tất nhiên DataGridView phải có dữ liệu) Chú ý: Trong DataGridView thì khái niệm Ô ≡ Cell ……………………………… 4. Một số khái niệm liên quan đến DataGridView Hình 1: Ví dụ về DataGirdView Hình 2: Khái niệm Columns trong DataGridView Hình 3: Khái niệm về Rows trong DataGridView Hình 4: Khái niệm về Cells trong DataGridView → DataGridView ≡ Mảng 2 chiều → Có 2 cách để truy xuất đến một ô (để lấy giá trị) trong DataGridView (các bạn chú ý hai câu lệnh này) Cách 1: Tên_DataGridView[Chỉ_số_cột, Chỉ_số_hàng].Value Cách 2: Tên_DataGridView.Rows[Chỉ_số_hàng].Cells[Chỉ_số_Cột].Value Ví dụ: Có một DataGridView như sau: Chúng ta muốn lấy giá trị của một ô bôi đen (Phạm Thị Hạnh) chúng ta có thể sử dụng câu lệnh sau (tên của DataGridView là: dgSinhVienTK4): string str = dgSinhVienTK4[0, 2].Value.ToString(); Hoặc string str = dgSinhVienTK4.Rows[2].Cells[0].Value.ToString(); 5. Sử dụng điều khiển DataGridView qua một số Code Giả sử chúng ta có một form có tên: frmDataGridView. Trên đó có chứa một số điều khiển sau: Điều khiển DataGridView có tên dataGridView1(Chúng ta để tất cả các thuộc tính của dataGridView1với giá trị mặc định). Button btCreate: minh họa việc tạo DataGridView với số hàng và số cột xác định Button btRemove: Minh họa xóa một cột, một hàng trong DataGridView Button btGet: Minh họa việc lấy số hàng và số cột trong DataGridView Button btAddCombobox: Minh họa việc Add một cột là Combobox vào DataGridView Button btAddCheck: Minh họa việc Add một cột là Checkbox vào DataGridView Giao diện của chương trình như sau: Chúng ta sẽ minh họa sử dụng DataGridView qua sự kiện Click của các button trên. 5.1. Tạo các cột trong DataGridView (bằng Code) //Sự kiện Load của Form private void frmDataGridView_Load(object sender, EventArgs e) { //Đặt thuộc tính cho DataGridView thông qua mã lệnh dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này //Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính COLUMNS trên hộp thoại Properties //Hoặc bạn có thể thêm bằng Code dataGridView1.Columns.Add("clName", "Họ và Tên"); dataGridView1.Columns.Add("clQueQuan", "Quê quán"); dataGridView1.Columns.Add("clLop", "Lớp"); dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh"); //Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì) dataGridView1.Rows.Add(); //Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú ý có hai cách như thế này dataGridView1[0, 0].Value = "Nguyễn Văn Hải"; dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên"; dataGridView1[2, 0].Value = "TK4N1"; dataGridView1.Rows[0].Cells[3].Value = "29-03-1987"; } //Hết → sau khi chạy chương trình: form frmDataGridView sẽ có kết quả như sau: 5.2. Đặt số hàng và số cột cho DataGridView //Sự kiện Load của Form private void btCreate_Click(object sender, EventArgs e) { //Đặt số hàng và số cột cho DataGridView (Ví dụ: thiết kế trong chơi cờ Caro) //Ví dụ: Tạo một DataGridView với 50 hàng và 50 Cột dataGridView1.ColumnCount = 50; //Chú ý thuộc tính này dataGridView1.RowCount = 50; //Chú ý thuộc tính này //Thiết lập độ rộng cho các Ô for (int i = 0; i < 50; i++) { dataGridView1.Columns[i].Width = 15; dataGridView1.Rows[i].Height = 15; } } //Đã xong rồi. Giờ thì bạn chạy xem nào 5.3. Xóa một hàng (hay 1 cột, hay tất cả các hàng các cột) của DataGridView private void brRemove_Click(object sender, EventArgs e) { //Tập các hàng, các cột trong DataGridView là một Collection //Nên nó có đầy đủ các thuộc tính và phương thức của một Collection //Xóa hàng thứ 1 (có chỉ số là 0) dataGridView1.Rows.RemoveAt(0); //Xóa tất cả các hàng: dataGridView1.Rows.Clear(); //Tất nhiên nếu chúng ta có 2 hàng thì chúng ta không thể thực hiện câu lệnh: dataGridView1.Rows.RemoveAt(2); //Xóa cột thứ 2 (có chỉ số là 1) dataGridView1.Columns.RemoveAt(1); //Xóa tất cả các Cột: dataGridView1.Columns.Clear(); } Rows ↔ Collection Columns ↔ Collection 5.4. Lấy về số hàng và số cột hiện có của DataGridView private void btGet_Click(object sender, EventArgs e) { //Lấy về số hàng và số cột int i = dataGridView1.Rows.Count; //Lấy về số hàng int j = dataGridView1.Columns.Count;//Lấy về số cột //Thông báo string HC = "Số hàng: " + i.ToString() +'\n' + "Số cột: " + j.ToString(); MessageBox.Show(HC); } 5.5. Add thêm một cột là Combobox vào DataGridView private void frmDataGridView_Load(object sender, EventArgs e) { //Đặt thuộc tính cho DataGridView thông qua mã lệnh dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này //Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính COLUMNS trên hộp thoại Properties //Hoặc bạn có thể thêm bằng Code dataGridView1.Columns.Add("clName", "Họ và Tên"); dataGridView1.Columns.Add("clQueQuan", "Quê quán"); dataGridView1.Columns.Add("clLop", "Lớp"); dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh"); //Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì) dataGridView1.Rows.Add(); //Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú ý có hai cách như thế này dataGridView1[0, 0].Value = "Nguyễn Văn Hải"; dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên"; dataGridView1[2, 0].Value = "TK4N1"; dataGridView1.Rows[0].Cells[3].Value = "29-03-1987"; } //Phương thức đưa dữ liệu vào Combobox private static void AddData(ref DataGridViewComboBoxColumn comboboxColumn) { { comboboxColumn.Items.AddRange( new string[] { "SV1", "SV2", "SV3"}); } } // Add thêm một cột là Combobox vào DataGridView!!! private void btAddCombobox_Click(object sender, EventArgs e) { //Khai báo mảng làm DataSource cho Combobox string[] Mang = { "SV1", "SV2", "SV3" }; //Khai báo một cột thuộc kiểu Combobox DataGridViewComboBoxColumn comboboxColumn = new DataGridViewComboBoxColumn(); //Đặt thông số và đưa dữ liệu vào Combobox comboboxColumn.HeaderText = "Cột Combobox"; AddData(ref comboboxColumn);// Câu lệnh nàycomboboxColumn.DataSource = Mang; //Câu lệnh Insert này đưa cột vào vị trí đầu của DataGridView dataGridView1.Columns.Insert(0, comboboxColumn); // Add một cột vào vị trí cuối cùng của DataGridView (Chưa có dữ liệu). comboboxColumn = new DataGridViewComboBoxColumn(); comboboxColumn.HeaderText = "Cột Combobox "; dataGridView1.Columns.Add(comboboxColumn); //Sử dụng phương thức Add mà chưa có thông số comboboxColumn.DisplayIndex = 3; //Thì mặc định đưa vào cuối DataGridView còn nếu có //comboboxColumn.DisplayIndex = 3; thì đưa vào cột 3 } → Sau khi chạy có kết quả như sau: 5.5. Add thêm một cột là Checkbox vào DataGridView //Sự kiện Load của Form private void frmDataGridView_Load(object sender, EventArgs e) { //Đặt thuộc tính cho DataGridView thông qua mã lệnh dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này //Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính COLUMNS trên hộp thoại Properties //Hoặc bạn có thể thêm bằng Code dataGridView1.Columns.Add("clName", "Họ và Tên"); dataGridView1.Columns.Add("clQueQuan", "Quê quán"); dataGridView1.Columns.Add("clLop", "Lớp"); dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh"); //Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì) dataGridView1.Rows.Add(); //Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú ý có hai cách như thế này dataGridView1[0, 0].Value = "Nguyễn Văn Hải"; dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên"; dataGridView1[2, 0].Value = "TK4N1"; dataGridView1.Rows[0].Cells[3].Value = "29-03-1987"; } //Add private void btAddCheckbox_Click(object sender, EventArgs e) { DataGridViewCheckBoxColumn ch = new DataGridViewCheckBoxColumn(); { ch.HeaderText = "Check"; //Chọn vị trí hiển thị của cột: Cột thứ 0, 1 hay 2... ch.DisplayIndex = 3; //Có cho phép Chọn nhiều hay không? (Chỉ Check được vào một Checkbox) ch.FalseValue = true; //Nếu cho phép chọn nhiều thì dùng lệnh này: ch.TrueValue = true; } //Chèn vào DataGridView dataGridView1.Columns.Add(ch); // dgSinhVienTK5.Columns.Insert(3,ch); } → Sau khi chạy có kết quả như sau: 5.6. Lấy giá trị của một ô bất kì bạn chọn trên DataGridView Giả sử chúng ta có một DataGridView có các giá trị như sau: Yêu cầu: Chúng ta muốn lấy ra giá trị của một ô (Cells) bất kì mà bạn chọn Giải quyết: Sử dụng sự kiện CellClick của điều khiển DataGridView như sau: //CÁC BẠN HỌC CÔNG NGHỆ NET HÃY NHỚ ĐOẠN MÃ NÀY private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { //Lấy về vị trí của Hàng và cột đang được chọn //Hai câu lệnh này QUAN TRỌNG các bạn chú ý int Hang = e.RowIndex; // int HangHienTai = dataGridView1.CurrentRow.Index; int Cot = e.ColumnIndex; //Lấy ra vị trí (Hàng và cột) mà bạn chọn string ViTriBanChon = '\n' + "Hàng: " + Hang.ToString() + '\n' + "Cột: " + Cot.ToString(); MessageBox.Show("Vị trí đang chọn: " + ViTriBanChon); //Lấy ra giá trị của ô (Cells) mà bạn chọn string GiaTri = dataGridView1[Cot, Hang].Value.ToString(); //Hoặc: string GiaTri = dataGridView1.Rows[Hang].Cells[Cot].Value.ToString(); MessageBox.Show("Ô bạn chọn có giá trị: "+GiaTri); //Giờ các bạn chạy thử xem nào? ^.^ } 5.7. Bắt sự kiện SelectedIndexChanged của cột là combobox //Khai báo kiểu cột DataGridViewComboBoxColumn cbcl; private void frmDataGridView_Load(object sender, EventArgs e) { //Đặt một số thuộc tính thông qua Code (sau khi Add các cột vào) dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; ///Đặt số cột //dataGridView1.ColumnCount = 10; //dataGridView1.RowCount = 10; ///Add thêm các cột vào dataGridView1.Columns.Add("clMaSV", "Mã SV"); dataGridView1.Columns.Add("clTen", "Tên"); dataGridView1.Columns.Add("clLop", "Lớp"); dataGridView1.Columns.Add("clNgaySinh", "Ngày sinh"); dataGridView1.Columns.Add("clQuequan", "Quê quán"); ///Add thêm một cột vào DataGridView (Chưa có giá trị) dataGridView1.Rows.Add(); dataGridView1[0, 0].Value = "M01"; dataGridView1[1, 0].Value = "Nguyễn Tuấn Anh"; dataGridView1[2, 0].Value = "Tk4N1"; dataGridView1[3, 0].Value = "13-02-1986"; dataGridView1[4, 0].Value = "Hưng Yên"; //Thêm một hàng mới - Cách 2 string[] str = new string[5] { "M02", "Nguyễn Thị Bích", "TK4N2", "14-02-1985", "Hưng Yên"}; dataGridView1.Rows.Add(str); ///Phươnng thức Add, remove...Một cột hay hàng ///Lấy giá trị của một ô bất kì: Sự kiên CellClick ///Lấy ra giá trị của một ô và hiển thị nên các textbox ///Lấy sự kiện của cột là Combobox ///----------------------------------------------------------------------------------- //Add thêm một cột là combobox vào string[] Mang = new string[5] { "M01", "M02", "M03", "M04", "M05" }; // cbcl= new DataGridViewComboBoxColumn(); cbcl.HeaderText = "Cột Combobox"; cbcl.Items.AddRange(Mang); dataGridView1.Columns.Add(cbcl);//Add vào vị trí cuối cùng (Cột cuối cùng) cbcl.DisplayIndex = 2; //Add+DisplayIndex thì đưa vào vị trí chỉ định Insert (nhưng # Insert ở chỗ: chỉ số vẫn là cuối cùng) //Còn hiển thị so ta chỉ định //Add thêm một cột với vị trí chỉ định: Insert cbcl = new DataGridViewComboBoxColumn(); cbcl.HeaderText = "Cột Combobox2"; cbcl.Items.AddRange(Mang); dataGridView1.Columns.Insert(0, cbcl); } //------------------------------------------------------------------------------------------------------------------ //Lây về sự kiện của Combobox (Cột trong DataGridView) ComboBox Combo; int i = 1; void SuKien(object sender, EventArgs e) { string str = Combo.Text; if(i==1) { MessageBox.Show(str); i = 0; } } //Quan trọng private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (e.Control is ComboBox) { Combo = (ComboBox)e.Control; Combo.SelectedIndexChanged += new EventHandler(SuKien); i = 1; } } //Sự kiện CellClick lấy về giá trị của một Ô private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { int Cot = e.ColumnIndex; int Hang = e.RowIndex; if (dataGridView1[Cot, Hang].Value != null) { MessageBox.Show(dataGridView1[Cot, Hang].Value.ToString()); } } //End DEPLOYMENT *** Các bước tạo bộ cài đặt với “Setup Wizard” (VS2008) Bước 1: Mở Project (viết bằng C# hay VB.NET) mà bạn muốn tạo bộ cài đặt. Bước 2: Add thêm một Project vào bằng cách: Bước 3: Chọn loại Project như dưới đây (Có thể là Setup Wizard hay Setup Project đều được). Ở đây tôi chọn là Setup Wizard Bước 4: Trình Wizard sẽ xuất hiện. Làm lần lượt theo các bước như hình dưới đây: $ $ $ $ → Nhấn Finish để kết thúc quá trình Wizard Bước 5: Giao diện sẽ như hình dưới. Trong khung thoại này chú ý các folder: Application Folder: Mọi thứ chứa trong Folder khi cài đặt (bằng file Setup được tạo ra) thì sẽ có trong thư mục cài đặt trong C:\Program File\Tên_Folder_Cài_Đặt → Có thể tạo ra các thư mục mới và thêm vào các file vào trong thư mục này (Nhất là với các ứng dụng về CSDL thì phải làm như vậy mới giải quyết vấn đề đường dẫn động của CSDL). User’s Desktop: Dùng để tạo ra Shortcut của ứng dụng trên Desktop. User’s Programs Menu: Dùng để tạo ra các folder và Icon trên menu Start → Programs Bước 6: Cấu hình một số thông số (Xem hình): $ Bước 7: Tạo Shortcut cho ứng dụng, Shortcut này sẽ hiện ra Desktop khi ứng dụng cài đặt xong. $ Bước 8: Di chuyển Icon vừa tạo vào thư mục Usert’s Desktop Bước 9: Tạo thư mục con bên trong thư mục User’s Programs Menu và Lập lại việc tạo Shortcut sau đó di chuyển Shortcut vào thư mục con vừa tạo ở trên. Bước 10: Tạo ra các Folder trong thư mục Application Folder và Add các file (CSDL, Text…) vào các thư mục này (ví dụ nếu CSDL đặt trong Debug\FolderCSDL\CSDL.mdb thì tạo folder FolderCSDL sau đí Add file CSDL.mdb vào Folder này thế là giải quyết vấn đề đường dẫn động CSDL khi tạo bộ cài đặt) Bước 11: Lựa chọn thư mục cài đặt Bước 12: Tùy biến các cài đặt (Version, Tên tác giả...) Bước 13: Biên dịch: Các bước tạo bộ cài đặt với “Setup Project” → Hoàn toàn tương tự so với “Setup Wizard”

Các file đính kèm theo tài liệu này:

  • docCông nghêNET.doc
Tài liệu liên quan