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)
101 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2864 | Lượt tải: 1
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:
- Công nghêNET.doc