Lập trình Windows - Chương 3: Lập trình C# trên Windows

ListBox control cho phép hiển thị danh sách các mục để user chọn Properties MultiColumn – chia list thành các cột khi dữ liệu không hiển thị hết một lúc trên list SelectionMode – quy định chế độ chọn các mục trong list TopIndex – Cuộn ListBox đến TopIndex Methods void ClearSelected() bool GetSelected(int index) void SetSelected(int index, bool value)

pptx220 trang | Chia sẻ: huyhoang44 | Lượt xem: 692 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Lập trình Windows - Chương 3: Lập trình C# trên Windows, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình Windows Chương 3. Lập trình C# trên Windows1Nội dungWindows Form2Lập trình C# trên WindowsKhái niệm thông điệp (Message)Là một số nguyên được quy ước trước giữa Windows và các ứng dụng (Application) Các dữ liệu nhập (từ bàn phím, từ chuột, ) đều được Windows chuyển thành các message và một số thông tin kèm theo messageVí dụ0x0001 WM_CREATE 0x0002 WM_DESTROY0x0003 WM_MOVE0x0005 WM_SIZE0x0012 WM_QUITHàng đợiSystem QueueWindows chứa các message trong một hàng đợi gọi là hàng đợi hệ thống Application QueueCác ứng dụng có hàng đợi riêng để chứa các message của ứng dụng gọi là hàng đợi ứng dụng. Windows sẽ tự động phân bố các message từ System Queue đến các Application QueueLập trình trên WindowsHardware inputHệ điều hành WindowsỨng dụng ANhận và xử lýỨng dụng BNhận và xử lýMessage loopMessage loopSystem QueueApplication Queue AApplication Queue BEvent-driven programming model Message loop (vòng lặp thông điệp)Mỗi Application tại một thời điểm có một message loop để lấy các message trong Application Queue về để phân bố cho các cửa sổ (Window) trong ApplicationHàm Window ProcedureMỗi cửa sổ (Window) trong Application đều có một hàm Window Procedure để xử lý các message do message loop nhận vềEvent-driven programming model WM_PAINTWM_MOUSEMOVEWM_KEYDOWNOnKeyDownOnMouseMoveOnPaintMessagesMessage queueApplicationMessage handlersMessage loopWindow procedureRetrieved messagesDispatched messagesEvent-driven programming modelỨng dụng phản ứng các sự kiện (nhấn phím, click chuột, ...) bằng cách xử lý các message do Windows gởi đếnMột ứng dụng Windows điển hình thực hiện một lượng lớn các xử lý để phản hồi các message nó nhận. Và giữa các message nó chờ message kế tiếp đếnMessage queue: Các message được chờ trong message queue cho đến khi chúng được nhận để xử lýEvent-driven programming modelHàm Main: Tạo một cửa sổ và vào message loopMessage loopNhận các message và phân bố chúng đến Window Procedure của các cửa sổMessage loop kết thúc khi nhận được WM_QUIT (chọn Exit từ menu File, click lên close button)Window Procedure: Phần lớn các đoạn mã đặt trong Window Procedure Window Procedure xử lý các message gởi đến cửa sổWindow Procedure điển hình chứa câu lệnh switch lớn với mỗi case là một message riêngMessage handler: Code cung cấp để xử lý message cụ thểEvent-driven programming model trong C#Message Loop  Application.Run()Window  FormWindow Procedure  WndProc(ref Message m)Phần lớn Message handlers được cài đặt sẵn trong các lớp có thể nhận message (Control, Form, Timer,) dưới dạng:protected void OnTenMessage(xxxEventArgs e)(xxxEventArgs có thể là EventArgs hay các lớp con của EventArgs) Mỗi message có một biến event tương ứngCác Message handlers mặc nhiên gọi các event tương ứng của messageCác hàm gán cho event gọi là event handlerEvent-driven programming model trong C#WM_PAINTWM_MOUSEMOVEWM_KEYDOWNOnKeyDownOnMouseMoveOnPaintMessagesMessage queueApplicationMessage handlers gọi các sự kiện tuơng ứngApplication.Run()WndProc(ref Message m)Retrieved messagesDispatched messagesTạo ứng dụng Windows Forms từ đầuCác bước cơ bản tạo ứng dụng WindowsBước 1: Thiết kế giao diệnBước 2: Xử lý các message do Windows gởi đếnBước 3: Xử lý nghiệp vụCác bước cơ bản tạo ứng dụng WindowsCách 1: Trực tiếp – thừa kếThiết kế giao diệnTạo lớp thừa thừa kế từ lớp FormBố cục các controlThiết lập các property cho các controlXử lý các thông điệp do Windows gởi đến: bằng cách override các message handlerXử lý các nghiệp vụ trên các message handlerCác bước cơ bản tạo ứng dụng WindowsCách 2: Gián tiếp qua các field eventThiết kế giao diệnBố cục các controlThiết lập các property cho các controlBắt các sự kiện: bằng cách viết các event handlerXử lý nghiệp vụ trên các event handlerCác bước cơ bản để tạo ứng dụng WindowsBước 1: Tạo Empty ProjectFile  New  ProjectProject Type: Visual C#  Windows Template: Empty Project Bước 2: Thêm referencesClick phải lên References  Add Reference...System.Windows.FormsSystem.Drawing[System.Core]Bước 2: using các namespace using System.Windows.Forms; using System.Drawing; Bước 3: Thêm class fileClick phải lên project  Add  Class...Bước 4: Viết code Bước 5: menu Project  Property  Output type: Windows ApplicationDùng Form, Không thừa kếclass Program { static void Main() { Form form = new Form(); form.Text = “First Application”; Application.Run(form); } }Dùng Form, Không thừa kếclass Program { static void Main() { Form form = new Form(); form.Text = "WinForm"; form.BackColor = Color.Green; form.Width = 300; form.Height = 300; form.MaximizeBox = false; form.Cursor = Cursors.Hand; form.StartPosition = FormStartPosition.CenterScreen; Application.Run(form); } }Thuộc tínhDùng Form, Không thừa kếclass Program { static void Main() { Form form = new Form(); form.Text = “WinForm”; form.Click += form_Click; Application.Run(form); } static void form_Click(object sender, EventArgs e) { MessageBox.Show("Ban da click vao form"); } }Event HandlerDùng Form, Không thừa kếclass Program { static void Main() { Form form = new Form(); form.Text = "WinForm"; Button button = new Button(); button.Text = "OK"; button.Location = new Point(100, 100); button.Click += new EventHandler(button_Click); form.Controls.Add(button); Application.Run(form); } static void button_Click(object sender, EventArgs e) { MessageBox.Show("Ban da click vao nut OK"); } }Thêm control vào formDùng form bằng cách kế thừaclass MainForm:Form { private Button button; public MainForm() { this.Text = "WinForm"; button = new Button(); button.Text = "OK"; button.Location = new Point(100, 100); button.Click += new EventHandler(button_Click); this.Controls.Add(button); } void button_Click(object sender, EventArgs e) { MessageBox.Show("Ban da click vao nut OK"); } }Dùng form bằng cách kế thừaclass Program { static void Main() { MainForm form = new MainForm(); Application.Run(form); } }Dùng form bằng cách kế thừaBắt các sự kiện trên formCách 1: Thông qua field eventclass MainForm:Form { public MainForm() { this.Text = "WinForm"; this.Click += form_Click; } void form_Click(object sender, EventArgs e) { MessageBox.Show("Ban da click vao form"); } }Dùng form bằng cách kế thừaclass MainForm:Form { public MainForm() { this.Text = "WinForm"; } protected override void OnClick(EventArgs e) { base.OnClick(e); MessageBox.Show("Ban da click vao form"); } }Bắt các sự kiện trên formCách 2: Thông Qua override các message handlerTạo ứng dụng Windows Forms từ WizardTạo ứng dụng bằng WizardBước 1: Tạo Empty ProjectFile  New  ProjectProject Type: Visual C#  Windows Template: Windows Forms Application Tạo ứng dụng bằng WizardCác thành phần của cửa sổ thiết kếForm đang thiết kếToolboxProperties WindowsSolution WindowsTạo ứng dụng bằng WizardBước 2: Thiết kế giao diện: Kéo các đối tượng từ Toolbox vào formTạo ứng dụng bằng WizardBước 3: Thiết lập các Property cho các đối tượng trên form thông qua Properties WindowsObject Drop-DownHiển thị theo vầnHiển thị theo loạiPropertiesEventsGiải thích ý nghĩa của mục đang chọnTạo ứng dụng bằng WizardBước 4: Bắt các sự kiện cho các đối tượng trên form từ Properties WindowsTạo ứng dụng bằng WizardBước 5: Xử lý nghiệp vụ: viết code cho các event handlerCode do Wizard sinh raLớp ProgramCode do Wizard sinh raLớp MainFormCode do Wizard sinh raPhương thức InititiallizeComponent()Tổng quan các đối tượng trong Windows FormsCấu trúc của ứng dụngỨng dụng Windows Forms có 3 phần chínhApplicationCác Form trong ApplicationCác Controls và Components trên FormLớp ApplicationKhái niệmLớp Application cung cấp các phương thức tĩnh và các property tĩnh để quản lý ứng dụngCác phương thức start, stop ứng dụng, xử lý Windows messagesCác property lấy thông tin về ứng dụngLớp này không thể thừa kế NamespaceSystem.Windows.FormAssemblySystem.Windows.Form (System.Windows.Form.dll)Propertiespublic sealed class Application { // Properties public static string CommonAppDataPath { get; } public static RegistryKey CommonAppDataRegistry { get; } public static string CompanyName { get; } public static CultureInfo CurrentCulture { get; set; } public static InputLanguage CurrentInputLanguage { get; set;} public static string ExecutablePath { get; } public static string LocalUserAppDataPath { get; } public static bool MessageLoop { get; } public static FormCollection OpenForms {get; } public static string ProductName { get; } public static string ProductVersion { get; } public static bool RenderWithVisualStyles { get; } public static string SafeTopLevelCaptionFormat { get; set; } public static string StartupPath { get; } public static string UserAppDataPath { get; } public static RegistryKey UserAppDataRegistry { get; } public static bool UseWaitCursor { get; set; } public static VisualStyleState VisualStyleState { get; set; } }Methodspublic sealed class Application { // Methods public static void AddMessageFilter(IMessageFilter value); public static void DoEvents(); public static void EnableVisualStyles(); public static void Exit(); public static void ExitThread(); public static bool FilterMessage(ref Message message); public static ApartmentState OleRequired(); public static void RaiseIdle(EventArgs e); public static void RegisterMessageLoop(MessageLoopCallback callback); public static void RemoveMessageFilter(IMessageFilter value); public static void Restart(); public static void Run(); public static void Run(ApplicationContext context); public static void Run(Form mainForm); public static void UnregisterMessageLoop(); public static void SetCompatibleTextRenderingDefault(bool defaultValue); }Eventspublic sealed class Application { // Events public static event EventHandler ApplicationExit; public static event EventHandler EnterThreadModal; public static event EventHandler Idle; public static event EventHandler LeaveThreadModal; public static event ThreadExceptionEventHandler ThreadException; public static event EventHandler ThreadExit; }Một số phương thức thông dụngRun() bắt đầu message loop của ứng dụngExit(Form) dừng message loopDoEvents() xử lý các message trong khi chương trình đang trong vòng lặpEnableVisualStyles() các control sẽ vẽ với kiểu visual nếu control và hệ điều hành hỗ trợRestart() dừng ứng dụng và Tự động restart lạiMột số property thông dụngExecutablePath Đường dẫn đến file .exe StartupPath Đường dẫn đến thư mục chứa file .exeUseWaitCursor Hiện cursor dạng WaitEvent thông dụngIdle Xuất hiện khi ứng dụng hoàn thành việc xử lý Ví dụclass Program { static void Main() { Application.Run(new MainForm); } }class MainForm:Form { private Button btnClose; public MainForm() { btnClose = new Button(); btnClose.Click += btnClose_Click; this.Controls.Add(btnClose); } private btnClose_Click(object sender, EventArgs e) { Application.Exit(); } }Bài tậpTìm đường dẫn đến file .exe Tìm đường dẫn đến thư mục chứa file .exeShutdown ứng dụng và tự động restart lạiThực hiện những công việc khi ứng dụng rãnh rỗiHiện Cursor dạng Wait khi ứng dụng đang bận thực thi công việcXử lý trường hợp một phương thức thực thi mất nhiều thời gianLớp MessageBoxLớp MessageBoxMessage Box hiện một thông báo hay một hướng dẫn cho userLớp MessageBox chỉ chứa một phương thức tĩnh duy nhất: Show()DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options);NamespaceSystem.Windows.FormsAssemblySystem.Windows.Forms (System.Windows.Forms.dll)Lớp MessageBoxCác EnumerationsMessageBoxButtonsMessageBoxIconMessageBoxDefaultButtonMessageBoxOptionsDialogResultpublic enum MessageBoxButtons { OK, OKCancel, AbortRetryIgnore, YesNoCancel, YesNo, RetryCancel }public enum MessageBoxIcon { Asterisk = 0x40, Error = 0x10, Exclamation = 0x30, Hand = 0x10, Information = 0x40, None = 0, Question = 0x20, Stop = 0x10, Warning = 0x30 }Lớp MessageBoxpublic enum MessageBoxDefaultButton { Button1 = 0, Button2 = 0x100, Button3 = 0x200 }public enum MessageBoxOptions { DefaultDesktopOnly = 0x20000, RightAlign = 0x80000, RtlReading = 0x100000, ServiceNotification = 0x200000 }Lớp MessageBoxpublic enum DialogResult { None, OK, Cancel, Abort, Retry, Ignore, Yes, No }Lớp FormKhái niệmLớp Form thể hiện một cửa sổ (window) hay một dialog box tạo nên giao diện của ứng dụngThông thường tạo custom form bằng cách thừa kế từ FormNamespaceSystem.Windows.FormAssembly:System.Windows.Form (System.Windows.Form.dll)PropertiesPropertiesEventsEventsMethodsMột số phương thức thông dụngShow(), ShowDialog(), Hide(), Close()CenterToScreen(), DrawToBitmap(), Invalidate()CreateGraphic();Một số property thông dụng khác (không có trong Design)MdiParent, MdiChildenDialogResultControlsModalclass MyForm : Form { public MyForm() { this.ShowInTaskbar = false; this.Location = new Point(10, 10); this.Size = new Size(100, 100); } }Lớp Form Chu trình đời sống của formMột số vấn đề liên quan đến FormTạo custom formClick phải lên project trong solutionChọn Add  Windows Forms Cho custom form thừa kế từ lớp FormHiện custom formModal FormformName.ShowDialog();Modeless FormformName.Show ();Một số vấn đề liên quan đến FormNút OK và CancelTrước khi có thể nhận dữ liệu từ Form đang hiển thị, phương thức ShowDialog() phải trở về, có nghĩa là form phải đóng lạiXác định button nào đã nhấn (OK hay Cancel, ) chúng ta dùng property DialogResultMột số vấn đề liên quan đến FormNút OK và CancelCách 1private void btnOK_Click(object sender, EventArgs e) { this.Close(); } private void btnCancel_Click(object sender, EventArgs e) { this.Close(); }Một số vấn đề liên quan đến FormKhi gọi phương thức Close() thì phương thức ShowDialog() sẽ trả về DialogResult.CancelChúng ta có thể trả về các giá trị khác của enum DialogResultenum DialogResult { Abort, Cancel, // kết quả mặc nhiên khi gọi Form.Close() Ignore, No, None, OK, Retry, Yes }Một số vấn đề liên quan đến FormKiểm tra giá trị trả về từ phương thức ShowDialog() là cách nhanh nhất để kiểm tra giá trị của thuộc tính DialogResultHai đoạn mã sau là tương đươngdlg.ShowDialog(); DialogResult res = dlg.DialogResult; if (res == DialogResult.OK) { }if (dlg.ShowDialog() == DialogResult.OK) { }Một số vấn đề liên quan đến FormCách 2private void btnOK_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); } private void btnCancel_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); }Chú ý: - Nút OK không phải phím mặc định- Nút Cancel không được gọi khi phím ESC nhấn- Nút Enter không được gọi khi phím Enter nhấn- Khi gán thuộc tính DialogResult thì không cần gọi phương thức Close()Một số vấn đề liên quan đến FormGán phím Enter/ESC cho nút OK/CancelDùng Designer thiết lập 2 thuộc tính của form: AcceptButton và CancelButtonprivate void InitializeComponent() { this.AcceptButton = this.btnOK; this.CancelButton = this.btnCancel; }Một số vấn đề liên qua đến FormCách 3: (Dùng Designer)Thiết lập property DialogResult của nút OK: DialogResult.OKThiết lập property DialogResult của nút Cancel: DialogResult.CancelTrên formThiết lập property AcceptButton: btnOKThiết lập property CancelButton: btnCancelMột số vấn đề liên quan đến FormNút OK và CancelCách 3: (Dùng Designer)private void InitializeComponent() { this.btnOK.DialogResult = DialogResult.OK; this.btnCancel.DialogResult = DialogResult.Cancel; this.AcceptButton = this.btnOK; this.CancelButton = this.btnCancel; }Một số vấn đề liên quan đến FormThiết lập giá trị tùy theo Form là Modal hay ModelessTùy thuộc việc dùng Show() hay ShowDialog(), property Modal sẽ có giá trị true hay falseCách các form được hiển thị không được biết khi form được tạo, cho nên giá trị Modal không thể xác định trong constructor mà phải xác định trong sự kiện load hay các sự kiện sau đó.Một số vấn đề liên quan đến Formprivate void Form_Load(object sender, EventArgs e) { if (this.Modal) { // Khởi tạo giá trị khi là form Modal this.FormBorderStyle = FormBorderStyle.FixedDialog; } else { // Khởi tạo giá trị khi là form Modeless this.FormBorderStyle = FormBorderStyle.Sizable; } }Một số vấn đề liên quan đến FormKiểm tra có muốn đóng Form hay khôngXử lý sự kiện ClosingNếu không muốn đóng form: e.Cancel = trueThứ tự active của các control trên form (TabIndex)View  Tab OrderBài tậpHãy hiện ra một messagebox để xác nhận user muốn đóng formHiện form ở giữa màn hìnhKhông cho user thay đổi kích thước formKhông cho form hiện trong taskbarHiện form phủ cả màn hình (bao gồm taskbar)Tạo form kiểu splash screenThay đổi icon của formBố cục các controls trên FormBố cục các controls trên formAnchor: Chỉ ra các cạnh của container để biết control sẽ thay đổi kích thước như thế nào khi cha nó thay đổi kích thước Các cạnh của containerLeft, Top, Right, BottomDock: Chỉ ra các cạnh của control sẽ bám vào containerLeft, Top, Right, Bottom, FillBố cục các controls trên formLớp Splitter: Một splitter control cho phép thay đổi kích thước của các control đã dockCác control thông dụngCác control thông dụngText ControlText EditText DisplayLabelLinkLabelStatusBarTextBoxLabelLabel control dùng để cung cấp chuỗi mô tả cho control Một số property thông dụngText, TextAlign Image, ImageAlign, VisibleBackColor, ForeColorFont Một số phương thức thông dụngHide(), Show()Một số event thông dụngPaintTextBoxTextBox control dùng để nhập chuỗi vào ứng dụngCho phép nhập nhiều dòngTạo mặt nạ để nhập passwordMột số property thông dụngText, CharacterCasting, ReadOnly, PasswordChar (Multiline=false), MaxLengthMultiline, ScrollBars, WordWrap, Lines[], AcceptTab, AcceptReturnMột số phương thức thông dụng Clear(), Cut(), Paste(), Copy(), Undo(), Select(), SelectAll(), DeselectAll(), ProcessCmdKey() Một số event thông dụngClick, Enter, Leave,TextChanged, MultilineChanged, KeyPress Validating, ValidatedTextBoxAuto Completion TextControls: TextBox và ComboBox AutoCompleteSource RecentlyUsedList HistoryList AllUrl = RecentlyUsedList + HistoryList ListItems AutoCompleteMode Append Suggest SuggestAppend TextBoxAuto Completion TextCustom Source  AutoCompleteCustomSource: danh sách data AutoCompleteSource: CustomSourceViết codeAutoCompleteStringCollection data = new AutoCompleteStringCollection(); data.Add(“Le"); data.Add(“Tran"); data.Add(“Nguyen"); cb.AutoCompleteCustomSource = data; TextBoxBài tập luyện tậpHãy ngăn cản menu context khi click phải lên textboxPhím Ctrl+VTextbox tự động chuyển thành chữ hoa hay chữ thường khi nhập liệuDùng Textbox để nhập passwordHãy giới hạn số ký tự trong TextboxHãy focus đến control tiếp theo khi nhấn enterLinkLabelLinkLabel control: Là một label cho phép chứa các hyperlinkMột số property thông dụngLinkBehaviour , LinkVisitedVisitedLinkColor, LinkColor, ActiveLinkColor, DisabledLinkColor LinkArea (một liên kết), Links (nhiều liên kết)Một số event thông dụngLinkClickedLinkLabelBài tập luyện tậpHãy tạo form About giới thiệu về chương trình, có các hyperlink trên đóStatus BarCông dụng:Hiện tình trạng hiện tại của ứng dụngButtonButton control: cho phép user click lên nó để thực hiện một hành độngMột số property thông dụngText, Image, TextAlign, ImageAlign, DialogResultMột số phương thức thông dụngPerformClick()Một số event thông dụngClick, MouseEnter, MouseLeaveButtonCác cách chọn Button controlDùng mouse click buttonGọi sự kiện Click của buttonFocus button (tab) sau đó nhấn SPACEBAR hay ENTERNhấn Access Key (ALT + Ký tự gạch dưới)Nếu button là “access” button của form  nhấn ENTERNếu button là “Cancel” button của form  nhấn ESCGọi phương thức PerformClick() ButtonAccess Key cho controlAccess Key là ký tự gạch dưới trong text của menu, menuitem, label của các controls như buttonUser có thể “click” vào control bằng cách nhấn ALT + Access keyTạo Access KeybuttonName.Text = “&Print”;ButtonBài tập luyện tậpThay đổi text của buttonThay đổi text của một button và thay đổi chức năng tương ứngHai phương thức vào một sự kiệnTạo Button độngCho nhập thông tin (vi trí, text, ) rồi hiện button trên formPopup Text cho button (HelpProvider)ButtonBài tập luyện tậpLàm thế nào để click button bằng lập trìnhLàm thế nào phát sinh sự kiện click của button trong những khoảng thời gian khi mouse đang click lên button được (giống scrollbar button)Làm thế nào đặt ảnh hay icon lên buttonCheckBox và RadioButtonCheckBoxPropertiesText – chữ hiện kế bên checkboxChecked Checked = true –check box đã được checkChecked = false –check box chưa được checkEvents CheckedChanged – sự kiện phát sinh khi thay đổi trạng thái check CheckBoxCác dạng khác của CheckBoxThreeState = true: CheckBox có 3 trạng tháiAppearance =Button: CheckBox là một buttonCheckBox 3 trạng tháiDùng property CheckState để kiểm tra nó có là một trong 3 trạng tháiCheckedUnchecked Indeterminate Radio ButtonsRadio buttons tương tự checkbox, tuy nhiênCác button trong cùng nhóm chỉ có một button được check tại một thời điểmMột nhóm: Các radio button được đặt trong cùng container – thường là panel hay group boxRadio ButtonsProperty Checked – Cho biết button có được check hay khôngEvent CheckedChanged – Sự kiện phát sinh khi check box được check hay không được checkList ControlsList ControlsCó 3 list controlsListBox CheckedListBox ComboBox Lớp cơ sở: thừa kế từ lớp trừu tượng ListControlList ControlsPropertiesItems – danh sách các item có trong listSorted = true: tự động sắp xếp theo từ điểnSelectedIndex, SelectedIndices, SelectedItem, SelectedItems và Text – cung cấp các cách khác nhau để truy cập các mục đã chọnMethodsint FindString(string s) – tìm chuỗi s có trong list hay không EventsSelectedIndexChangedList ControlsThêm item vào item listlistName.Items.Add(“”);listName.Items.AddRange(String []);Chèn item vào item listlistName.Items.Insert(index, data);Xóa:listName.Items.Remove(data);listName.Items.RemoveAt(index);listName.Items.Clear();Tìm kiếmlistName.Items.Indexof(object obj);ListBoxListBox control cho phép hiển thị danh sách các mục để user chọn PropertiesMultiColumn – chia list thành các cột khi dữ liệu không hiển thị hết một lúc trên listSelectionMode – quy định chế độ chọn các mục trong list TopIndex – Cuộn ListBox đến TopIndexMethodsvoid ClearSelected()bool GetSelected(int index) void SetSelected(int index, bool value)ComboBox=LISTBOX+TEXTBOXComboBox control cho phép hiển thị danh sách các mục dạng drop down để user chọn PropertiesMaxDropDownItems, DropDownStyleMethodsvoid Select(int start, int length)void SelectAll()EventsDropDownCheckedListBoxCheckedListBox control – Hiện danh sách các checkboxPropertiesCheckedItems và CheckedIndices – truy cập mục đã chọnMultiColumn – chia list thành các cột khi dữ liệu không hiển thị hết một lúc trên listSelectionMode – quy định chế độ chọn các mục trong listTopIndex – Cuộn CheckedListBox đến TopIndexCheckedListBoxMethodsvoid ClearSelected()bool GetSelected(int index) void SetSelected(int index, bool value)bool GetItemChecked(int index)CheckState GetItemCheckState(int index)void SetItemChecked(int index, bool value)void SetItemCheckedState(int index, CheckState value) EventsItemCheckCheckedListBoxList ControlsBài tập luyện tậpLàm thế check hay unchecked tất cả các mục trong CheckListBoxLàm thế nào mặc nhiên chọn item đầu tiên trong ComboBoxCuộn Listbox hay ChecklistBox sao cho thấy được mục vừa mới thêm gần nhấtData binding Có thể kết nối control với dữ liệu thông qua property DataSource vớiDataSet, Mảng (tĩnh và động)Ví dụ: string[] cityChoices = { "Seattle", "New York", "Signapore", "Montreal"}; lstCity.DataSource = cityChoices; Data bindingItems trong list control là một tập các object.Chú ý: Để hiển thị item trong trong list, list control gọi phương thức ToString()  Có thể kết hợp các đối tượng thuộc các lớp tự tạo với list control ImageListImageListImageList là một kiểu collection đặc biệt chứa các ảnh có kích thước và độ sâu màu được xác định trước. Các control khác nếu có hổ trợ dùng ImageList thì dùng các ảnh trong ImageList thông qua chỉ mục.ListView, TreeView, ToolBar, Button, PropertiesImages – collection các ảnhImageSize – kích thước của các ảnhTransparentColor – Định nghĩa màu trong suốtMethodDraw() Vẽ ảnh lên bề mặt GDI+ImageListThêm/xóa/sắp xếp các ảnh trong ImageListCách 1: Dùng Designer để thêm các ảnh (bmp, jpg, ico, ) vào Click () kế bên thuộc tính Image trong PropertiesImageListThêm/xóa/sắp xếp các ảnh trong ImageListChú ý: các file ảnh được thêm vào resource file khi dùng designerCách 2: Nạp các file ảnh từ file vào ImageListImageListImageList iconImage = new ImageList(); // Cấu hình ImageList iconImages.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; iconImages.ImageSize = new System.Drawing.Size(16, 16); // Lấy các file trong thư mục hiện tại string[] iconFiles = Directory.GetFiles(Application.StartupPath, "*.ico"); // Thêm vào ImageList foreach (string iconFile in iconFiles) { Icon newIcon = new Icon(iconFile); iconImages.Images.Add(newIcon); }ListView và TreeViewListViewListViewListview là control dùng để trình bày danh sách các mục mà có thể trình bày bằng 1 trong 4 cách khác nhauCác item trong ListView là một đối tượng ListViewItemListText có icon nhỏText có icon lớnDetailsTileListViewListViewListViewPropertiesItems – Một collection các đối tượng ListViewItem được hiển thị trong ListViewColumns – Một collection các đối tượng ColumnHeader được dùng trong Details ViewSelectedItems, SelectedIndicesLargeImageList = imageList objectSmallImageList = imageList objectMultiSelect = boolView: LargeIcon, SmallIcon, List, Details, Tile Sorting = Acending/DescendingFullRowSelect = boolListViewMethodsListViewItem GetItemAt(int x, int y) – lấy item tại (x,y)void Clear() – Xóa các item và các cột EventsColumnClick, ItemCheck ListViewThêm một item đơn giảnListViewItem item = new ListViewItem(string);listView.Items.Add(item);Thêm item có ảnhTạo imagelistGán imagelist cho LargeImageList/SmallImageListitem.ImageIndex=chỉ số hình trong imagelistThêm item có nhiều subitemstring[] data = {string1, string2, };ListViewItem item = new ListViewItem(data);listView.Items.Add(item);ListViewNhận dữ liệu trên ListViewListViewItem item = lstSignature.SelectedItems[0];string sub1 = item.SubItems[0].Text;string sub2 = item.SubItems[1].Text;Tạo detailView: DetailGridLines: trueColumns: Thêm các columnListViewListText có icon nhỏText có icon lớnDetailsCác loại Viewcủa ListViewTileListViewThay đổi ViewlistView.View = View.SmallIconSmallIconLargeIconDetailsListTileChú ý: Details phải có columnListViewMột số properties khácAllowColumnReorderAutoArrange CheckBoxes, CheckedIndices, CheckedItems GridLinesMột số methods khácBeginUpdate(), EndUpdate()TreeViewTreeView là một collection các node dạng phân cấpCác node trong cây thuộc lớp TreeNode, có thể được lồng không giới hạn. TreeViewPropertiesNodesSelectedNode, ShowRootLines , ImageIndex, ShowPlusMinus MethodsExpandAll(), GetNodeAt(), GetNodeCount(), CollapseAll() EventsAfterCheck, AfterCollapse, BeforeCheck, BeforeCollapse, AfterSelect, AfterExpand, BeforeSelect, BeforeExpand TreeViewThêm một nodeCách 1: tree.Nodes.Add(string);Cách 2:TreeNode newNode = new TreeNode(); newNode.Text = “"; newNode.Tag = “"; tree.Nodes.Add(newNode);TreeViewCấu trúc TreeViewCác nodes có thể lồng nhiều cấpThêm node con:Tìm node chaThêm node con vào node chaVí dụ 1 TreeNode node; node = tree.Nodes.Add(“cha”); node.Nodes.Add(“con”);TreeViewCấu trúc TreeViewVí dụ 2: TreeNode[] nodes = new TreeNode[n]; nodes[0] = new TreeNode(“cha”); nodes[0].Nodes.Add(“con”); tree.Nodes.AddRange(nodes);Ví dụ 3: tree.BeginUpdate(); tree.EndUpdate();TreeViewDuyệt các phần tử của TreeView: 2 kỹ thuật cơ bảnDùng kỹ thuật đệ quyvoid XuLyCacNode(TreeNodeCollection nodes) { foreach (TreeNode node in nodes) { // Xử lý node XuLyCacNode (node.Nodes) } }TreeViewDuyệt các phần tử của TreeView: 2 kỹ thuật cơ bảnDùng các properties của nodeParentFirstNodeLastNodePrevNodeNextNodeTreeViewDuyệt các phần tử của TreeView: 2 kỹ thuật cơ bảnDùng các properties của nodevoid XuLyCacNode(TreeNode node) { do { // Xử lý node if (node.Nodes.Count>0) XuLyCacNode(node.FirstNode); node = node.NextNode; } while (node != null); }TreeViewThao tác trên treeviewXóa node: Remove()Tham chiếu đến node cần xóa: Xóa nodeTìm vị trí node: xóa node tại vị trí đóXóa các node: Clear()Tìm kiếm vị trí: IndexOf()TreeViewNode ảnhẢnh cho toàn TreeViewtree.ImageList = imageList;tree.ImageIndex = vị tríẢnh cho từng nodetree.ImageList = imageList;node.ImageIndex = vị trínode.SelectedImageIndex = vị tríTreeViewExpand và collapsTree ExpandAll() CollapseAll() Node Collapse(), Expand(), ExpandAll(), Toggle(). TreeViewMột số properties khác của TreeViewCheckBoxes = boolFullRowSelect = boolIndent = numberShowLines, ShowPlusMinus, và ShowRootLinesSorted = boolMột số properties khác của TreeNodeChecked = boolIsSelected = boolIsExpanded = boolNumericUpDown, DomainUpDown, TrackBar và HScrollBar, VScrollBarNumericUpDown và DomainUpDownNumericUpDownNumericUpDown control cho phép chọn một số (nguyên/thực) trong miền giới hạnPropertiesMaximum, Minimum – Giá trị lớn nhất và nhỏ nhất có thể chọnIncrement – Bước nhảy mỗi lần clickDecimalPlaces – Số chữ số lẻValue – Giá trị hiện tại của controlMethodsvoid DownButton()void UpButton() EventsValueChanged – Sự kiện xảy ra khi value thay đổiDomainUpDownDomainUpDown cung cấp một danh sách các option (tương tự như List control), nhưng người dùng chỉ có thể chọn các item thông qua up/down button PropertiesTextSelectedIndexSelectedItemItemsMethodsvoid DownButton()void UpButton()DomainUpDownThêm chuỗi vào DomainUpDown// Add Items udCity.Items.Add("Tokyo"); udCity.Items.Add("Montreal"); udCity.Items.Add("New York"); Chọn item đầu tiênudCity.SelectedIndex = 0; TrackBarTrackBar cho phép người dùng chọn giá trị số nguyên một cách đồ họa dùng Tab acrossPropertiesMaximum, MinimumValueTickFrequencySmallChange, LargeChangeEventsValueChangedScroll HScrollBar và VScrollBarPropertiesValue: intMaximun: intMinimum: intSmallChange: intLargeChange: int RightToLeft: RightToLeftYesNoEventsScroll, ValueChanged HScrollBar và VScrollBarBài tập luyện tậpViết chương trình chỉnh sửa màu có giao diện như sauProgressBarProgressBarProgressBarProgressBar cho phép hiển thị tiến trình hoạt động của chương trìnhPropertiesStep – Bước nhảy mỗi lầnMaximum, Minimum – Giá trị lớn nhất và nhỏ nhất Value – Giá trị hiện tạiPhương thứcvoid PerformStep() – Tăng một lượng Stepvoid Increment(int value) – Tăng một lượng valuePictureBox và BitmapPictureBoxPictureBoxPropertiesImage – Lưu trữ hình đang hiện trên PictureBox*.gif, *.jpg, *.jpeg, *.bmp, *.wmf, *.png, *.tiffSizeMode – Kiểu enum PictureBoxSizeModeAutoSizeCenterImageNormalStretchSizeZoomEventsSizeModeChangedPictureBoxNạp ảnh từ filestring path = “”; Bitmap bitmap = new Bitmap(path); pic.Image = bimap; pic.SizeMode=PictureBoxSizeMode.StretchImage;BitmapImageBitmapMetafileBitmapBitmap bao bọc GDI+ bitmap: gồm dữ liệu pixel và các thuộc tính của bitmapPropertiesWidth,Height, Size – chiều rộng, chiều cao ảnh (pixel)Methodsvoid GetPixel(int x, int y)void SetPixel(int x, int y, Color color)void RotateFlip(RotateFlipType rotate);Save(string fileName)Save(string fileName, ImageFormat format)PictureBox và BitmapBài tập luyện tậpViết chương trình xử lý ảnh cơ bản, gồm những chức năng cơ bản sauChọn file ảnh, Lưu ảnhQuay ảnhHiện thị thông tin của ảnhCách hiện thị ảnh (SizeMode)Lấy màu tại vị trí chuột trên ảnhMaskedTextBox và RichTextBoxMaskedTextBox và RichTextBoxMaskedTextBoxRichTextBoxMaskedTextBoxMaskedTextBox là mở rộng của TextBox control bằng cách dùng một mặt nạ (Mask) để hướng dẫn nhập dữ liệu đúng đắnYêu cầu phải nhập hay Option Kiểu dữ liệu mong đợi tại vị trí cụ thểChú ý: MaskedTextBox không hổ trợ Multiline và UndoMaskedTextBoxPropertiesMask: string Methods void ResetText() – Thiết lập default textvoid Copy(), Cut(), Paste()MaskedTextBoxMask0 – phải nhập số ([0..9])9 – số hay space (option)L – phải nhập ký tự chữ ([a-zA-Z])? – ký tự chữ (option)& – phải nhập ký tự ascii C – nhập ký tự ascii (option)A – phải nhập Alphanumeric a – nhập Alphanumeric (option)MaskedTextBoxMask. – thập phân, – phân cách phần ngàn: – phân cách thời gian/ – phân cách ngày$ – ký hiệu tiền tệ – chuyển sang chữ HOA\ – Escape (\\ là \)MaskedTextBoxVí dụ00/00/0000 – ngày(999)-000-0000 – số điện thoại Mỹ$999,999.00 – tiền từ 0 đến 999999RichTextBoxPropertiesText: string – Văn bản trong RichTextBox Rtf: string – Code của văn bản SelectionText, SelectionRtf: string – Một phần văn bản hay code của văn bản được chọnSelectionColor, SelectionBackColor : Color văn bản được chọnSelectionFont: Font – font của văn bản được chọnRedoActionName – Lấy tên action khi phương thức Redo() gọiUndoActionName – Lấy tên action khi phương thức Undo() gọiZoomFactor – Mức zoomRichTextBoxMethodsvoid LoadFile(string path)void SaveFile(string path)void Redo()void Undo()void Copy() void Cut()void Paste()void Clear() – Xóa tất cả các textvoid SelectAll() – Chọn tất cả các textint Find(string string str)EventsLinkClicked, SelectionChanged RichTextBoxBài tập luyện tậpViết chuơng trình soạn thảo văn bản có định dạng như MS.WordDateTimePicker, MonthCalender và TimerDateTimePicker, MonthCalender và TimerDateTimePickerMonthCalenderTimerDateTimePicker và MonthCalenderChọn một ngàyChọn một vùng ngày DateTimePickerMonthCalenderDateTimePickerDateTimePicker cho phép user chọn một ngàyPropertiesText, Value: Text trả về chuỗi ngày đã được định dạng, Value trả về đối tượng DateTimeFormat: định dạng hiển thịlong, short, time, customCustomFormat:dd/mm/yyyy: Ngày/Tháng/Nămhh:mm:ss: Giờ:Phút:GiâyMinDate, MaxDate : Chỉ ra vùng ngày user có thể chọnMonthCalenderMonthCalender cho phép user chọn một số ngày trong thángPropertiesSelectionStart, SelectionEnd: trả về các ngày đã chọnSelectionRange: cấu trúc chứa SelectionStart và SelectionEndMaxDate, MinDate, MaxSelectionCount: ngày tối đa và tối thiểu được chọn trong calender, và số ngày liên tục có thể chọn tại một thời điểmTimerTimer sinh ra sự kiện Tick theo định kỳ PropertiesInterval: int – thời gian sự kiện xảy ra (tính bằng millisecond)Enabled: bool – Cho phép timer start hay stopMethodsvoid Start() – Start timervoid Stop() – Stop timerEventsTickMenu, Toolbar và StatusbarMenu và ToolbarMenuMột menu gồm 2 phần: Các mục menu (Item) và bộ chứa các mục menu (Container)Container: Lớp MenuStripItems – Chứa các MenuItem/TextBox/ComboBoxVisible – Ẩn hiện menuTextDirection – Hướng vẽ text trên itemLayoutStyle – Cách hiển thị menuCác mục menu: Lớp ToolStripMenuItemTextVisibleShortcutKeysShowShortcutKeys CheckedLớp ToolStripTextBoxLớp ToolStripComboBoxMenuTự thiết kế menuHotKey: thêm ký tự & trước ký tự muốn làm hot keyĐánh tên các mục menuMenuThêm menu chuẩnClick vào ký hiệu tam giác  Insert Standard ItemsMenuTạo Shortcut keyChọn mục menuVào properties thiết lập ShortcutKeysMenuCác loại menu itemMenuItemComboBoxTextBoxSeparatorChú ý: Click mũi tên xuống tại nơi muốn tạo menu item để chọn các loại menu itemMenuXử lý sự kiện:Xử lý sự kiện cho từng mục menu itemClick DoubleClickCheckedChangedCheckStateChangedContext menuContext menu là menu ngữ cảnh xuất hiện tại các control khi click phải chuột lên control đó để trợ giúp user hiểu về controlContainerContextMenuStripCác bước tạo Context menuB1: Tạo ContextMenuStripB2: Vào Properties của control muốn có menu ngữ cảnh: gán ContextMenuStrip bằng contextmenu đã tạo ở B1B3: Xử lý các sự kiện trên các menu item của Context menuToolBarToolBar chứa tập các nút có những chức năng khác nhauContainer: Lớp ToolStripCác item: LớpToolStripSplitButtonToolStripDropDownbuttonToolStripLabelToolStripProgressBarToolStripSeparatorToolStripComboBoxToolStripTextBoxToolBarCác loại ItemToolBarCác bước tạo toolbarB1: Tạo container: Kéo ToolStrip vào formB2: Tạo các itemChọn loại itemChọn hìnhB3: Xử lý các sự kiện cho các itemStatusBarContainer: StatusStripCác loại itemNotifyIcon và ToolTipNotifyIcon và ToolTipNotifyIconToolTipNotifyIconNotifyIcon dùng để tạo một icon trên System TrayPropertiesBalloonTipIcon: ToolTipIconBalloonTipText: stringBalloonTipTitle: stringContextMenuStripIcon: IconText: stringMethodsvoid ShowBalloonTip(int timeout)void ShowBalloonTip(int timeout, string title, string text, ToolTipIcon icon)ToolTipToolTip một công cụ trợ giúp user hiểu rõ các control trên form. ToolTip sẽ hiển thị một text khi user rê chuột vào control ToolTipPropertiesInitialDelay: intAutomaticDelay: int ShowAlways: boolBackColor, ForeColor: ColorToolTipTitle: stringToolTipIcon: ToolTipIcon.(Error, Info, None, Warning)EventsGetToolTip, SetToolTip, RemoveAllToolTipCác bước tạo tooltipB1: Kéo ToolTip vào form và thiết lập các propertiesB2: Chọn control muốn có propertiesB3: Vào properties nhập dòng văn bản tại: “ToolTip on têntooltip”Grouping ControlsGrouping ControlsCác loại Grouping ControlsFormPanelGroupBoxTab ControlForm, Panel, GroupBoxPropertiesEnabled: boolSize: SizeVisible: boolMethodsvoid Focus()void Refresh()EventsEnterLeavePaintGroupBoxHiện border xung quanh nhóm các controlProperty Text – gán Text label cho GroupBoxControl có thể được thêm vàoĐặt control vào trong GroupBox khi thiết kếViết codePanelPanel giống GroupBox nhưng không có text labelPanel chứa một các control như GroupBoxBorderStyle – get/set border style nhưBorderStyle.Fixed3DBorderStyle.FixedSingleBorderStyle.NoneTabControlPropertiesTabPagesSelectedTabShowTooltips , Multiline, TabCount, SelectedIndex EventsSelectedIndexChangedCác dialog thông dụngCác dialog thông dụngCác loại DialogCustom Dialog BoxesCommon Dialog BoxesOpenFileDialogSaveFileDialogFontDialogColorDialogFolderBrowserDialogPageSetUpDialogPrintPreviewDialog PrintDialogCác dialog thông dụngBốn bước sử dialogCấu hình dialog (thiết lập các properties)Hiện dialog bằng phương thức ShowDialog()Xác định người dùng nhấn OK hay Apply (đựa trên kiểu trả về DialogResult)Viết code thực hiện dựa trên hành động của user trên dialogCác dialog thông dụng: OpenFileDialogOpenFileDialog dùng để chọn một file để mở ra xử lýPropertiesFileName: stringFileNames: string[]Filter: stringCác dialog thông dụng: OpenFileDialogPropertiesDefaultExt: stringAddExtension: boolTitle: stringIntialDirectory: stringShowReadOnly: boolReadOnlyChecked: boolMultiSelect: boolMethodsDialogResult ShowDialog()Stream OpenFile()Các dialog thông dụng: SaveFileDialogSaveFileDialog dùng để chọn/nhập một file để lưu nội dung lên đĩaCác dialog thông dụng: SaveFileDialogPropertiesOverwritePrompt: boolFileName: stringFileNames: string[]Filter: stringDefaultExt: stringAddExtension: boolTitle: stringIntialDirectory: stringMethodsStream OpenFile()DialogResult ShowDialog()Các dialog thông dụng: FontDialogFontDialog dùng để chọn font chữ có trên máyCác dialog thông dụng: FontDialogPropertiesFontColorMaxSize, MinSizeShowColor: boolShowApply: boolShowEffects: boolMethodsDialogResult ShowDialog()void Reset()Các dialog thông dụng: ColorDialogColorDialog dùng để chọn màu có trên máyCác dialog thông dụng: ColorDialogPropertiesColorAllowFullOpen: bool FullOpen: boolMethodsDialogResult ShowDialog()void Reset()Các dialog thông dụng: FolderBrowserDialogFolderBrowserDialog dùng để chọn thư mục có trên máyCác dialog thông dụng: FolderBrowserDialogPropertiesDescription: stringRootFolder: Environment.SpecialFolderSelectedPath: stringShowNewFolderButton: boolMethodsDialogResult ShowDialog()void Reset()MDITạo MDITạo Form chaIsMdiContainer = trueTạo form conTạo object form con: ChildFormName f = new ChildFormName()f.MdiParent = this;f.Show();Tìm các form trong MDITìm form con đang activethis.ActiveMdiChild Tìm form chathis.MdiParentTìm các form conthis.MdiChildrenĐồng bộ dữ liệuChú ý: Form cha lưu các form conMỗi form con lưu 1 form chaĐồng bộ dữ liệu giữa các form conB1: Con gởi message nhờ form cha đồng bộ dữ liệuB2: Form cha duyệt các form con để đồng bộ dữ liệuSắp xếp các form conTạo menu item chứa danh sách form conTạo menu itemThiết lập MdiWindowListItem của menu container = menu item trênSắp xếp các form conthis.LayoutMdi(MdiLayout.ArrangeIcons); Cascade, TileHorizontal, TileVerticalMinimize các form conDuyệt các form con: this.MdiChildren Thiết lập thuộc tính: WindowState = FormWindowState.Minimized Đọc file dữ liệu văn bảnFile văn bảnNamespaceSystem.IOClass cơ bảnStreamReaderStreamWriterFile văn bảnĐọc file văn bảnStreamReader sr = new StreamReader(path);string data = sr.ReadLine();sr.Close();Một số lệnh hay dùngsr.EndOfStreamstring data = sr.ReadToEnd();int data = sr.Peek();File văn bảnGhi file văn bảnStreamWriter sw = new StreamWriter(path);sw.WriteLine();sw.Close();Một số lệnh hay dùngsw.Write();Một số Bài tập lớnBài tập luyện tập: Mô phỏng các chương trình sau NotePad, WordPadCalculatorAddress BookDuyệt fileDuyệt webPaintChương trình xem ảnhTừ điển Anh – ViệtGame MinesweeperQ&A220

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

  • pptxlap_trinh_tren_windows_chuong3_windowsform_1512.pptx