1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình Lập trình Windows Forms với C

310 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo Trình Lập Trình Windows Forms Với C#
Trường học Trường Đại Học Lạc Hồng
Chuyên ngành Công Nghệ Thông Tin
Thể loại Giáo Trình
Định dạng
Số trang 310
Dung lượng 11,78 MB

Cấu trúc

  • Chương 1: Giới thiệu về C# (7)
    • 1.1. Giới thiệu về Microsoft .NET Framework (7)
      • 1.1.2. Các thành phần của Microsoft .NET Framework (7)
    • 1.2. Tổng quan (8)
    • 1.3. Cấu trúc tổng quát của một chương trình C# (10)
      • 1.3.1. Soạn thào bằng Notepad (0)
      • 1.3.2. Soạn thảo bằng Microsoft Visual Studio 2010 (11)
    • 1.4. Biến và kiểu dữ liệu (14)
      • 1.4.1. Biến (14)
      • 1.4.2. Kiểu dữ liệu (15)
        • 1.4.2.1. Kiếu giá trị (0)
        • 1.4.2.2. Kiểu tham chiếu (16)
        • 1.4.2.3. So sánh sự khác biệt giữa kiểu giá trị và kiểu tham chiếu (0)
        • 1.4.2.4. Chuyển kiểu dữ liệu (17)
    • 1.5. Câu lệnh phân nhánh (19)
      • 1.5.1. Câu lệnh if (19)
      • 1.5.2. Câu lệnh switch (19)
    • 1.6. Câu lệnh lặp (20)
      • 1.6.1. Lệnh lặp while (20)
      • 1.6.2. Lệnh lặp do/ while (21)
      • 1.6.3. Lệnh lặp for (21)
      • 1.6.4. Lệnh lặp foreach (22)
    • 1.7. Lớp String (23)
      • 1.7.1. Giới thiệu về chuỗi ký tự (23)
      • 1.7.2. Phương thức và thuộc tính lớp String (24)
    • 1.8. Mảng (37)
      • 1.8.1. Mảng một chiều (37)
      • 1.8.2. Mảng hai chiều (38)
    • 1.9. Tạo và sử dụng DLL trong C# (39)
      • 1.9.1. Ưu điểm và nhược điểm khi sử dụng DLL (39)
      • 1.9.2. Các bước để tạo tập tin DLL (40)
      • 1.9.3. Các bước để sử dụng tập tin DLL (42)
    • 1.10. Bài tập cuối chương (45)
  • Chương 2: Giới thiệu về Windows Forms (46)
    • 2.1. Giới thiệu (46)
      • 2.1.1. Ứng dụng Windows Forms (46)
      • 2.1.2. Không gian tên (namespace) (50)
      • 2.1.3. Thanh công cụ (Toolbox) (52)
      • 2.1.4. Định dạng mã C# (54)
    • 2.2. Các loại Form (54)
      • 2.2.1. Thuộc tính Form (54)
      • 2.2.2. Các loại Form (59)
      • 2.2.3. Các hình dạng của Form (61)
      • 2.2.4. Biến cố của Form (63)
      • 2.2.5. Phương thức (66)
    • 2.3. Bài tập cuối chương (70)
  • Chương 3: Các điều khiển thông thường (72)
    • 3.1. Điều khiển Label (72)
    • 3.2. Điều khiển Button (76)
    • 3.3. Điều khiển TextBox (79)
    • 3.4. Điều khiển ComboBox và ListBox (0)
      • 3.4.1. ListBox (84)
      • 3.4.2. ComboBox (88)
      • 3.4.3. Phương thức và sự kiện của ComboBox và ListBox (91)
    • 3.5. Điều khiển CheckBox và RadioButton (95)
      • 3.5.1. CheckBox (95)
      • 3.5.2. RadioButton (99)
    • 3.6. Bài tập cuối chương (103)
  • Chương 4: Các điều khiển đặc biệt (109)
    • 4.1. Điều khiển Tooltip, HelpProvider, ErrorProvider (109)
      • 4.1.1. Điều khiển Tooltip (109)
      • 4.1.2. Điều khiển HelpProvider (112)
      • 4.1.3. Điều khiển ErrorProvider (115)
    • 4.2. Điều khiển ProgressBar và Timer (0)
      • 4.2.1. Điều khiển ProgressBar (119)
      • 4.2.2. Điều khiển Timer (120)
    • 4.3. Điều khiển ListView (124)
    • 4.4. Điều khiển TreeView (132)
    • 4.5. Điều khiển DateTimePicker, MonthCalendar (0)
      • 4.5.1. Điều khiển DateTimePicker (137)
      • 4.5.2. Điều khiển MonthCalendar (139)
    • 4.6. Bài tập cuối chương (142)
  • Chương 5: Điề u khi ển dùng để xây d ự ng Menu (147)
    • 5.1. Điều khiển ImageList (147)
    • 5.2. Điều khiển MenuStrip (151)
    • 5.3. Điều khiển ContextMenuStrip (159)
    • 5.4. Điều khiển NotifyIcon (163)
    • 5.5. Điều khiển ToolStrip (167)
      • 5.5.1. Điều khiển chứa trong ToolStrip (0)
      • 5.5.2. ToolStripContainer (171)
    • 5.6. Điều khiển StatusStrip (176)
    • 5.7. Bài tập cuối chương (178)
  • Chương 6: Điều khiển chứa các điều khiển khác (182)
    • 6.1. Điều khiển GroupBox (182)
    • 6.2. Điều khiển Panel (187)
    • 6.3. Điều khiển FlowLayoutPanel (188)
    • 6.4. Điều khiển TableLayoutPanel (193)
    • 6.5. Điều khiển TabControl (196)
    • 6.6. Điều khiển SplitContainer (0)
    • 6.7. Bài tập cuối chương (0)
  • Chương 7: Điều khiển Dialog và phương thức Message (0)
    • 7.1. Lớp MessageBox (0)
    • 7.2. Điều khiển ColorDialog (0)
    • 7.3. Điều khiển FontDialog (0)
    • 7.4. Điều khiển OpenFileDialog (0)
    • 7.5. Điều khiển SaveFileDialog (0)
    • 7.6. Điều khiển FolderBrowserDialog (0)
    • 7.7. Bài t ậ p cu ối chương (0)
  • Chương 8: Làm việc với điều khiển in ấn (0)
    • 8.1. Điều khiển PageSetupDialog (0)
    • 8.2. Điều khiển PrintPreviewDialog (0)
    • 8.3. Điều khiển PrintPreviewControl (0)
    • 8.4. Điều khiển PrintDialog (0)
    • 8.5. Điều khiển PrintDocument (0)
  • Chương 9: Điều khiển người dùng tự tạo 9.1. User Control (0)
    • 9.2. Xây dựng User Control (0)
      • 9.2.1. Thêm m ớ i User Control ngay trong d ự án (0)
      • 9.2.2. Tạo lớp và khai báo thừa kế từ lớp Control (0)
      • 9.2.3. Tạo dự án mới bằng cách chọn loại dự án là Windows Control Library (0)
    • 9.3. Sử dụng User Control (0)
    • 9.4. Cách sử dụng những thư viện tạo sẵn để thiết kế giao diện (0)
    • 9.5. Bài tập cuối chương (0)
  • Chương 10: Làm việc với màn hình và hệ thống (0)
    • 10.1. Lớp SystemInformation (0)
    • 10.2. Lớp Screen (0)
    • 10.3. Lớp SendKeys (0)
    • 10.4. Lớp PowerStatus (0)
    • 10.5. Lớp Application (0)
    • 10.6. Lớp Clipboard (0)
    • 10.7. Lớp Cursors (0)
  • Chương 11: Bài tập tổng hợp (0)
  • Tài liệu tham khảo (0)

Nội dung

Giới thiệu về C#

Giới thiệu về Microsoft NET Framework

.NET Framework là nền tảng phát triển lý tưởng của Microsoft, cung cấp cho lập trình viên các thư viện chung hỗ trợ đa dạng cho việc phát triển nhiều loại ứng dụng khác nhau.

 Ứng dụng mạng và các ứng dụng điều khiển truy cập từ xa

1.1.2 Các thành phần của Microsoft NET Framework

.NET Framework gồm hai thành phần chính là: Common Language Runtime (CLR) và thư viện lớp

CLR, hay Common Language Runtime, là nền tảng chính của NET Framework, cho phép Microsoft tích hợp nhiều ngôn ngữ lập trình như VB.NET, C#.NET, và ASP.NET vào Visual Studio.NET Điều này giúp các ứng dụng viết bằng các ngôn ngữ này có thể chạy trên hệ điều hành Windows Microsoft thực hiện điều này nhờ vào việc biên dịch các ngôn ngữ lập trình thành ngôn ngữ trung gian (Intermediate Language - IL) và sử dụng kiểu dữ liệu hệ thống chung (Common Type System) CLR sau đó sử dụng trình biên dịch Just-in-Time (JIT) để chuyển đổi mã IL thành mã máy và thực thi.

Ngoài ra CLR còn làm các thành phần khác như:

Bộ thu gom rác (Garbage Collection - GC) là một thành phần quan trọng trong việc quản lý bộ nhớ tự động Nó hoạt động bằng cách tự động thu hồi các vùng nhớ không còn được sử dụng tại những thời điểm nhất định, giúp tối ưu hóa hiệu suất và giảm thiểu rò rỉ bộ nhớ trong các ứng dụng.

Code Access Security (CAS) đảm bảo quyền hạn cho các chương trình dựa trên thiết lập bảo mật của máy Ví dụ, nếu thiết lập bảo mật cho phép chương trình tạo hoặc sửa file nhưng không cho phép xóa file, CAS sẽ giám sát và ngăn chặn các đoạn mã vi phạm quy định này.

Bộ phận chứng nhận đoạn mã đóng vai trò quan trọng trong việc đảm bảo rằng các đoạn mã được thực thi một cách chính xác và an toàn Nó giúp kiểm tra tính đúng đắn của mã, đồng thời bảo vệ kiểu dữ liệu, ngăn chặn các hành vi vượt quyền như truy cập vào các vùng bộ nhớ không được phép.

Thư viện lớp là bộ sưu tập phong phú các lớp do Microsoft phát triển, được thiết kế trực quan và dễ sử dụng, giúp lập trình viên thực hiện nhiều tác vụ có sẵn trong Windows một cách hiệu quả.

Thư viện lớp cơ bản (Base Class Library) là bộ sưu tập các lớp thiết yếu được sử dụng trong lập trình, bao gồm cả việc xây dựng các lớp cao hơn trong NET Framework Một số lớp nổi bật trong thư viện này bao gồm String, Integer và Exception, giúp lập trình viên dễ dàng phát triển ứng dụng.

ADO.NET và XML là bộ thư viện chứa các lớp hỗ trợ xử lý dữ liệu, trong đó ADO.NET thay thế ADO để thao tác với dữ liệu truyền thống Ngoài ra, các lớp đối tượng XML được cung cấp để làm việc với dữ liệu theo định dạng XML hiện đại Một số thư viện quan trọng trong ADO.NET và XML bao gồm sqlDataAdapter, SqlCommand và DataSet.

Windows Forms là một bộ thư viện lập trình cung cấp các lớp đối tượng cần thiết để xây dựng các ứng dụng Windows cơ bản Một số thư viện phổ biến trong Windows Forms bao gồm: Form, UserControl, TextBox, Label, Button, ComboBox, ListBox, ListView và TreeView.

Web Services là dịch vụ được cung cấp qua Internet, chủ yếu phục vụ cho các nhà phát triển phần mềm thay vì người dùng cuối Những dịch vụ này có thể cung cấp dữ liệu hoặc thực hiện các chức năng tính toán, góp phần hỗ trợ quá trình phát triển ứng dụng và tích hợp hệ thống.

ASP.NET là một nền tảng phát triển ứng dụng web mạnh mẽ, tận dụng toàn bộ khả năng của NET Framework Nó cung cấp cho lập trình viên một bộ các điều khiển Server, cho phép xử lý sự kiện và quản lý dữ liệu của ứng dụng một cách dễ dàng, tương tự như khi làm việc với ứng dụng Windows Một số thư viện quan trọng trong ASP.NET bao gồm WebControl và HTML Control, hỗ trợ tối ưu hóa quá trình phát triển.

Tổng quan

On February 12, 2002, Microsoft launched Visual Studio 2002 alongside NET Framework 1.0, providing a robust platform for developing Windows Forms and web applications The primary programming languages utilized for application development within this framework are C# and Visual Basic.NET.

C# là ngôn ngữ lập trình được phát triển bởi đội ngũ kỹ sư của Microsoft, với sự dẫn dắt của Anders Hejlsberg và Scott Wiltamult Ra đời sau các ngôn ngữ như Java, C, C++, Perl và Visual Basic, C# sở hữu những đặc điểm nổi bật, mạnh mẽ và dễ sử dụng hơn.

Microsoft thêm vào những đặc điểm mới vào để C# dễ sử dụng hơn:

C# là một ngôn ngữ lập trình đơn giản với cú pháp và biểu thức tương tự như C và C++ Ngôn ngữ này loại bỏ những khái niệm phức tạp như con trỏ, macro, đa kế thừa, template và lớp cơ sở ảo, giúp người dùng dễ dàng tiếp cận và sử dụng.

C# là một ngôn ngữ lập trình hiện đại, sở hữu đầy đủ các đặc điểm nổi bật như khả năng xử lý ngoại lệ, thu gom bộ nhớ tự động, hỗ trợ kiểu dữ liệu mở rộng và đảm bảo tính bảo mật cho mã nguồn.

C# là một ngôn ngữ lập trình thuần hướng đối tượng, sở hữu đầy đủ các đặc điểm cần thiết cho lập trình theo hướng đối tượng, bao gồm sự đóng gói (Encapsulation), thừa kế (Inheritance) và đa hình (Polymorphism).

- C# là ngôn ngữ mạnh mẽ và mềm dẻo: Có thể sử dụng cho những dự án khác nhau như: xử lý văn bản, ứng dụng đồ họa, bảng tính, …

C# là một ngôn ngữ lập trình với số lượng từ khóa hạn chế, chỉ khoảng 80 từ khóa, cùng với hơn 10 kiểu dữ liệu được xây dựng sẵn, như đã trình bày trong bảng 1.1.

Table 1.1 provides a comprehensive list of C# keywords, including essential terms such as abstract, default, foreach, and object It encompasses data types like bool, byte, and int, as well as control flow keywords such as if, switch, and while Additionally, it features modifiers like static, virtual, and readonly, along with access modifiers including public, private, and protected The table also includes keywords related to exception handling, such as try and catch, and others like delegate, event, and interface that are crucial for object-oriented programming in C# Overall, this collection of keywords is fundamental for mastering the C# programming language.

Cấu trúc tổng quát của một chương trình C#

Các đoạn mã C# có thể được soạn thảo trong một trình soạn thảo văn bản bất kỳ, sau khi biên soạn xong cần lưu tập tin với đuôi cs

Trong quá trình soạn thảo cần lưu ý C# là một ngôn ngữ thuần hướng đối tượng

Do đó tất cả đoạn mã của chương trình đều phải thuộc lớp

Ví dụ 1.1: Soạn thảo một chương trình C# in dòng chữ Hello World ra màn hình

Hàm Main được khai báo là static, cho phép nó được sử dụng mà không cần phải thông qua một đối tượng nào.

Hàm WriteLine thuộc lớp Console, vì vậy cần khai báo dòng lệnh “Using System;” ở đầu để sử dụng nhanh chóng với cú pháp “Console.WriteLine()” Nếu không khai báo “Using System;”, bạn phải sử dụng cú pháp đầy đủ là “System.Console.WriteLine()”, trong đó System là một namespace.

- C# phân biệt chữ thường và chữ hoa, do đó lệnh writeline khác lệnh WriteLine

 Bước 2: Khi soạn thảo xong Lưu tập tin với tên: ChaoMung.cs

 Bước 3: Thực thi chương trình phải thực hiện hai bước:

Mở cửa sổ Command Line và biên dịch tập tin ChaoMung.cs sang mã máy để tạo file có đuôi exe bằng trình biên dịch dòng lệnh C# (csc.exe), chương trình này được cài đặt cùng với NET Framework Nếu bạn đã cài đặt Framework 4.0, hãy truy cập vào đường dẫn tương ứng để thực hiện biên dịch.

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe

Hình 1.1: Biên dịch tập tin hello.cs

- Thực thi tập tin có đuôi exe như hình 1.2:

Hình 1.2: Thực thi tập tin Hello.exe

1.3.2 Soạn thảo bằng Microsoft Visual Studio 2010

 Bước 1: Mở Microsoft Visual Studio 2010 và tạo 1 dự án mới như hình 1.3

Hình 1.3: Tạo dự án mới

 Bước 2: Tạo một loại dự án đơn giản là Console Application để minh họa bằng ngôn ngữ C# và đặt tên Baitap lưu ở ổ đĩa D như hình 1.4

Hình 1.4: Tạo loại dựán và đặt tên cho dự án

 Bước 3: Soạn thảo mã C# trong trình biên dịch như hình 1.5

Bước 1: Chọn thực đơn File > New

Step 1: Select the type of project For console programming, choose the project type as Console Application If you are developing in a Windows Forms environment, select Windows Forms Application.

Hình 1.5: Giao diện soạn thảo mã lệnh

 Bước 4: Biên dịch chương trình: trên thanh menu chọn Build > Build Solution như hình 1.6 hoặc ấn tổ hợp phím Ctrl + Shift + B

Hình 1.6: Biên dịch chương trình

 Bước 5: Thực thi chương trình: trên thanh menu chọn Debug > Start Debugging như hình 1.7 hoặc phím F5

Hình 1.7: Thực thi chương trình

Biến và kiểu dữ liệu

Biến là thành phần quan trọng trong lập trình, đóng vai trò là nơi lưu trữ dữ liệu của chương trình Dữ liệu trong biến được lưu trữ trong bộ nhớ RAM và có khả năng thay đổi Để sử dụng biến, lập trình viên cần chỉ định kiểu dữ liệu cụ thể cho biến đó.

 Cú pháp khai báo biến:

Lưu ý: Tên biến phải được đặt phù hợp với quy tắc đặt tên

 Cú pháp khởi tạo giá trị cho biến:

= là phép toán gán giá trị

Quy tắc đặt tên: Các tên biến, tên hằng, tên hàm, … trong C# đề phải đặt tên đúng với quy tắc sau:

 Một tên biến có thể bắt đầu bằng chữ hoa hay chữ thường Tên có thể chứa ký tự hay số và ký tự gạch dưới (_)

 Ký tự đầu tiên của biến phải là ký tự , không được là số

 Trong C# phân biệt hoa thường

 Các từ khóa không thể sử dụng để đặt tên cho biến Nếu muốn dùng từ khóa đặt tên thì ta thêm ký tự @ phía trước

Employee: Hợp lệ student: Hợp lệ

@goto: Hợp lệ static: Không hợp lệ, trùng từ khóa

4myclass: Không hợp lệ, không thể bắt đầu bằng ký tự số

Student&Falculty: Không hợp lệ, không được chứa ký tự đặc biệt

Cũng như ngôn ngữ lập trình C++ hay Java, C# chia thành hai tập kiểu dữ liệu chính:

Trong C#, mọi kiểu dữ liệu được phân loại thành hai loại chính: kiểu giá trị và kiểu tham chiếu Kiểu giá trị được lưu trữ trong stack, trong khi kiểu tham chiếu được lưu trữ trong heap.

Stack: một vùng bộ nhớ dành lưu trữ dữ liệu với chiều dài cố định

Ví dụ 1.3: số nguyên kiểu int luôn chiếm dụng 4 bytes

Mỗi chương trình khi thực thi đều được cấp riêng 1 stack mà các chương trình khác không truy cập tới được

Heap: một vùng bộ nhớ dùng lưu trữ dữ liệu có dung lượng thay đổi

Khi tạo một đối tượng thuộc lớp string, đối tượng đó sẽ được xác định bởi hai thành phần: địa chỉ của đối tượng được lưu trữ trong stack, trong khi giá trị của đối tượng sẽ được lưu trong heap.

Kiểu giá trị thường là các kiểu do C# định nghĩa sẵn bao gồm: double, char, int, float, enum, struct, …

Biến kiểu giá trị lưu trữ một giá trị thực, được lưu trữ trong stack, không cho phép giá trị null và phải luôn chứa một giá trị xác định.

Bảng 1.2: Bảng mô tả các kiểu dữ liệu giá trị trong C#

Trong C#, các kiểu dữ liệu cơ bản bao gồm: byte (1 byte) đại diện cho số nguyên dương không dấu từ 0 đến 255; char (2 byte) dùng để lưu trữ ký tự Unicode; bool (1 byte) cho giá trị logic true/false; sbyte (1 byte) là số nguyên có dấu từ -128 đến 127; short (2 byte) tương ứng với Int16, có giá trị từ -32.768 đến 32.767; ushort (2 byte) là số nguyên không dấu từ 0 đến 65.535; và int (4 byte) là số nguyên có dấu từ -2.147.483.647.

2.147.483.647 uint 4 Uint32 Số nguyên không dấu: 0 đến

4.294.967.295 float 4 Single Kiểu dấu chấm động, giá trị xấp xỉ từ

3,4E-38 đến 3,4E+38; với 7 chữ số có nghĩa double 8 Double Kiểu dấu chấm động, giá trị xấp xỉ từ

Kiểu số có độ chính xác cao từ 1,7E-308 đến 1,7E+308, với khả năng biểu diễn 15 đến 16 chữ số có nghĩa và độ chính xác lên đến 28 con số thập phân, thường được sử dụng trong các tính toán tài chính Đặc biệt, kiểu số này yêu cầu phải có hậu tố để đảm bảo tính chính xác trong quá trình xử lý dữ liệu.

“m” hay “M” theo sau giá trị long 8 Int64 Kiểu số nguyên có dấu có giá trị trong khoảng:

-9.233.370.036.854.775.808 đến - 9.233.372.036.854.775.807 ulong 8 Uint64 Số nguyên không dấu từ 0 đến

Trong lập trình, kiểu số thực được hiểu là kiểu double trừ khi được khai báo khác Để gán giá trị kiểu float, cần thêm ký tự 'f' sau số, ví dụ: float a = 0.15f;

Kiểu giá trị bool trong C# nhất thiết phải là true hoặc false

Biến kiểu dữ liệu tham chiếu lưu trữ địa chỉ của biến khác trong bộ nhớ heap Các lớp đối tượng như String, Object và các kiểu dữ liệu do người dùng định nghĩa cũng thuộc loại kiểu dữ liệu tham chiếu.

“A” Địa chỉ biến str Giá trị của biến str

1.4.2.3 Bảng so sánh sự khác biệt giữa kiểu giá trị và kiểu tham chiếu

Bảng 1.3: Bảng so sánh sự khác biệt giữa kiểu giá trị và kiểu tham chiếu

Kiểu giá trị Kiểu tham chiếu Biến lưu trữ Giá trị của biến Địa chỉ của biến

Vị trí lưu trữ giá trị Stack Heap

Giá trị mặc định 0 Null

Phép toán gán Sao chép giá trị Sao chép địa chỉ

Việc chuyển đổi kiểu dữ liệu trong C# có thể thực hiện bằng một trong các cách sau:

Lớp Convert trong C# là một lớp được xây dựng sẵn, giúp chuyển đổi giữa các kiểu dữ liệu khác nhau Hầu hết các phương thức trong lớp này đều là phương thức tĩnh, hỗ trợ người dùng thực hiện các chuyển đổi một cách dễ dàng và hiệu quả.

Tham số có thể là chuỗi ký tự, hằng số, biến số nguyên, số thực hoặc kiểu bool Nếu tham số được chuyển kiểu là null trong quá trình thực hiện, hàm Convert sẽ trả về giá trị mặc định.

 Sử dụng phương thức Parse:

Phương thức Parse trong C# được sử dụng để chuyển đổi chuỗi thành các kiểu dữ liệu cụ thể Mỗi kiểu dữ liệu đều hỗ trợ phương thức này, ví dụ: `int a = Convert.ToInt32("10");` chuyển chuỗi "10" thành số nguyên, trong khi `bool b = Convert.ToBoolean(27);` chuyển số 27 thành kiểu boolean Tuy nhiên, nếu chuỗi không hợp lệ như `bool a = Convert.ToBoolean("hello");`, sẽ gây ra lỗi định dạng Ngoài ra, việc chuyển đổi chuỗi số lớn như `int b = Convert.ToInt32("123456787654");` có thể dẫn đến tràn bộ nhớ, và với `double d = Convert.ToDouble(null);`, phương thức sẽ trả về giá trị mặc định.

- Double.Parse(): Chuyển chuỗi về kiểu Double

- Int32.Parse(): Chuyển chuỗi về kiểu Int32

- Int64.Parse(): Chuyển chuỗi về kiểu Int64

- Boolean.Parse(): Chuyển chuỗi về kiểu Boolean

- Single.Parse(): Chuyển chuỗi về kiểu Single

 Sử dụng phương thức TryParse:

Phương thức TryParse trong C# được sử dụng để chuyển đổi chuỗi thành các kiểu dữ liệu cụ thể, tương tự như phương thức Parse Tất cả các kiểu dữ liệu xây dựng sẵn trong C# đều hỗ trợ phương thức TryParse Sự khác biệt chính giữa TryParse và Parse là cách thức xử lý lỗi: TryParse không ném ra ngoại lệ khi chuyển đổi thất bại, trong khi Parse sẽ ném ra ngoại lệ.

Cú pháp sử dụng TryParse có sự khác biệt với hai tham số: tham số đầu tiên là chuỗi cần chuyển đổi, trong khi tham số thứ hai là biến chứa giá trị chuyển đổi, và biến này phải được truyền vào dưới dạng tham chiếu.

- Giá trị trả về của TryParse sẽ là true nếu chuyển kiểu thành công và trả về false nếu chuyển kiểu không thành công

Casting (ép kiểu) là phương pháp chuyển đổi giữa các kiểu dữ liệu tương tự, thường được áp dụng cho kiểu số Ví dụ, có thể sử dụng Int32.Parse để chuyển đổi chuỗi "123" thành số nguyên, hoặc Float.Parse để chuyển "20.7" thành số thực Tuy nhiên, cần lưu ý rằng nếu chuỗi không đúng định dạng, như "Hello", hoặc vượt quá giới hạn kiểu dữ liệu, như "10000000000" cho kiểu byte, hoặc tham số null, quá trình ép kiểu sẽ không thành công.

Int32.TryParse(“123”, out a); //a sẽ mang giá trị 123 bool b;

Boolean.TryParse(“false”, out b); //b sẽ mang giá trị false int a;

Int32.TryParse("hello", out a); //trả về giá trị false, a mang giá trị 0 bool b;

Boolean.TryParse("", out b); //trả về giá trị false, b mang giá trị false

Trong quá trình chuyển đổi kiểu dữ liệu, có thể xảy ra lỗi do sự không tương thích giữa các kiểu, chẳng hạn như chuyển từ kiểu chuỗi sang kiểu số hoặc từ kiểu boolean sang kiểu float.

Câu lệnh phân nhánh

Phân nhánh trong lập trình có thể được thực hiện thông qua các từ khóa như if, else, switch và case Quá trình này chỉ xảy ra khi biểu thức điều kiện được kiểm tra và xác định là đúng.

Khi trong thân của câu lệnh if hoặc else có nhiều hơn một lệnh, các lệnh này cần được bao trong một khối lệnh, tức là phải nằm trong dấu ngoặc nhọn { }.

Khi có nhiều điều kiện cần lựa chọn, việc sử dụng câu lệnh if có thể trở nên phức tạp và dài dòng Để giải quyết vấn đề này, các ngôn ngữ lập trình cấp cao thường cung cấp câu lệnh switch, cho phép liệt kê các giá trị và chỉ thực hiện các giá trị phù hợp.

] if (biểu thức điều kiện)

}] int x= 10; float y = x; //chuyển đổi ngầm định, y = 10 int z = (int)y; //chuyển đổi rõ ràng, z = 10 int x = 10 ;

Lệnh nhảy trong lập trình được sử dụng để kết thúc một case trong cấu trúc switch, với hai loại lệnh nhảy chính là break và goto Nếu không có lệnh nhảy trong một case, trình biên dịch sẽ thực hiện tuần tự các câu lệnh trong từng case theo thứ tự từ trên xuống dưới.

- Trong trường hợp switch sử dụng nhiều case, có thể nhảy trực tiếp đến case cụ thể nào đó bằng goto; hoặc thoát khỏi switch sử dụng break

- : là hằng nguyên hoặc biến; Nếu là biến bắt buộc phải là biến kiểu số nguyên.

Câu lệnh lặp

C# kế thừa cú pháp câu lệnh của C/C++:

Ngoài ra 3 lệnh lặp cơ bản trên, C# còn có thêm lệnh lặp foreach dùng để làm việc với mảng, tập hợp

C# cũng cung cấp các lệnh nhảy như: break, goto, continue và return sử dụng kết hợp với lệnh lặp

1.6.1 Lệnh lặp while Ý nghĩa của vòng lặp while là: “Trong khi điều kiện đúng thì thực hiện các công việc này”

 Cú pháp: switch (biểu thức điều kiện)

]

Biểu thức của vòng lặp while đóng vai trò quan trọng trong việc xác định điều kiện thực hiện các lệnh bên trong Để vòng lặp hoạt động đúng, biểu thức này cần trả về một giá trị kiểu boolean, tức là true hoặc false.

Ví dụ 1.11: Viết chương trình tính tổng các số lẻ >0 và nhỏ hơn 10

1.6.2 Lệnh lặp do/ while Ý nghĩa của vòng lặp do/ while là: “làm điều này trong khi điều kiện vẫn còn đúng”

Sự khác biệt tối quan trọng của while và do while là tối thiểu sẽ có một lần các câu lệnh trong do while được thực hiện

Ví dụ 1.12: Viết chương trình tính tổng các số lẻ >0 và nhỏ hơn 10

Vòng lặp for bao gồm ba phần chính:

 Khởi tạo biến đếm vòng lặp

 Kiểm tra điều kiện biến đếm, nếu đúng thì sẽ thực hiện các lệnh bên trong vòng for static void Main(string[] args) { int i = 1, tong = 0; while (i < 10) { tong = tong + i; i = i+2;

}while ( điều kiện ); static void Main(string[] args) { int i = 1, tong = 0; do { tong = tong + i; i = i+2;

Ví dụ 1.13: Viết chương trình tính tổng các số lẻ >0 và nhỏ hơn 10

Vòng lặp foreach cho phép tạo vòng lặp thông qua một tập hợp hay một mảng

Vòng lặp foreach trong lập trình cho phép duyệt qua tất cả các thành phần của một mảng hoặc tập hợp theo thứ tự đã sắp xếp Khi đến phần tử cuối cùng trong tập hợp, chương trình sẽ tự động thoát khỏi vòng lặp này.

Ví dụ 1.14: Tính tổng các số lẻ trong mảng A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} for ( [phần khởi tạo] ; [biểu thức điều kiện]; [bước lặp])

} static void Main(string[] args) { int i, tong = 0; for(i=1; i < 10; i=i+2) tong = tong + i;

} foreach ( in < tên tập hợp>)

} static void Main(string[] args) { int[] intArray = {0,1,2,3,4,5,6,7,8,9,10}, tong = 0; foreach( int item in intArray) { if (item % 2 != 0) tong = tong + item;

Lớp String

1.7.1 Giới thiệu về chuỗi ký tự

Trong C#, chuỗi được xem như một kiểu dữ liệu cơ bản, mang lại tính linh hoạt, mạnh mẽ và dễ sử dụng Chỉ mục của chuỗi bắt đầu từ 0, và để làm việc với chuỗi, C# sử dụng lớp System.String Khi khai báo chuỗi bằng từ khóa "string", người dùng thực chất đang tạo ra một đối tượng của lớp System.String.

Ví dụ 1.15: string chuoi=“hello”;

Ngoài việc, ta cũng có thể khởi tạo chuỗi từ 1 mảng char:

// Khởi tạo mảng ký tự char[] chars = {'c', 's', 'h', 'a', 'r', 'p'};

// Khởi tạo chuỗi từ mảng ký tự string str = new string(chars);

 Khi gán giá trị trong chuỗi có thể chứa ký tự escape: „\n‟, „\t‟, „\a‟, …

Ví dụ 1.17: string newString = “Day la chuoi \n trich dan”;

 Trong trường hợp muốn lưu đường dẫn thư mục vào một chuỗi:

Ví dụ 1.18: string path = “ c:\baitap”;

 Do đó muốn trình biên dịch hiểu „\b‟ như những ký tự thông thường thì người dùng phải thêm một ký tự „\‟ phía trước:

Ví dụ 1.19: string path = “ c:\\baitap”;

Ngoài việc sử dụng dấu \ để giữ nguyên các ký tự trong chuỗi, chúng ta còn có thể khai báo chuỗi dưới dạng chuỗi nguyên văn bằng cách thêm ký tự @ ở phía trước chuỗi.

Ví dụ 1.20: string path = @“D:\soft\VMWare”

Trình biên dịch báo lỗi, vì không hiểu ký tự escape „\b‟

1.7.2 Phương thức và thuộc tính lớp String

Bảng 1.4: Bảng tổng hợp các phương thức lớp String

Phương thức/ Thuộc tính Ý nghĩa

Empty Thuộc tính tĩnh; Thể hiện chuỗi rỗng

Compare() Phương thức tĩnh; So sánh hai chuỗi

Phương thức CompareOrdinal() cho phép so sánh hai chuỗi mà không quan tâm đến thứ tự Phương thức Concat() giúp tạo ra một chuỗi mới từ một hoặc nhiều chuỗi khác Phương thức Copy() tạo ra một chuỗi mới bằng cách sao chép từ chuỗi đã có Phương thức Equal() kiểm tra xem hai chuỗi có cùng giá trị hay không Phương thức Insert() trả về chuỗi mới đã được chèn một chuỗi xác định Phương thức LastIndexOf() chỉ ra vị trí xuất hiện cuối cùng của một chuỗi xác định trong chuỗi ban đầu Cuối cùng, phương thức PadLeft() canh lề phải những ký tự trong chuỗi bằng cách chèn vào bên trái khoảng trắng hoặc các ký tự xác định, trong khi phương thức PadRight() canh lề trái bằng cách chèn vào bên phải.

Remove() Xóa đi một số ký tự xác định

Hàm Split() trả về chuỗi được phân tách bởi các ký tự xác định trong chuỗi gốc, trong khi hàm StartWith() kiểm tra xem chuỗi có bắt đầu bằng một số ký tự nhất định hay không.

SubString() Lấy một chuỗi con

Phương thức ToCharArray() cho phép sao chép các ký tự từ một chuỗi vào một mảng ký tự Trong khi đó, ToLower() sẽ trả về một bản sao của chuỗi với tất cả ký tự được chuyển sang kiểu chữ thường, còn ToUpper() sẽ tạo ra một bản sao của chuỗi với tất cả ký tự ở kiểu chữ hoa.

Phương thức tĩnh Format() cho phép định dạng một chuỗi sử dụng các ký tự lệnh định dạng xác định, trong khi phương thức tĩnh Join() dùng để kết nối các chuỗi đã chỉ định, tạo thành một chuỗi duy nhất giữa các thành phần của mảng chuỗi.

Length Trả về chiều dài của chuỗi

CompareTo() So sánh hai chuỗi

Hàm CopyTo() cho phép sao chép một số ký tự nhất định vào một mảng ký tự Unicode Hàm EndsWith() xác định vị trí của chuỗi phù hợp với chuỗi đã cho Hàm Trim() loại bỏ tất cả khoảng trắng trong chuỗi, trong khi hàm TrimEnd() chỉ xóa khoảng trắng ở cuối chuỗi.

TrimStart() Xóa các khoảng trắng ở vị trí đầu

 Thuộc tính Empty: Đại diện cho 1 chuỗi rỗng Sử dụng khi muốn khai báo 1 chuỗi là rỗng

Ví dụ 1.21: string chuoi = string.Empty;

Khi ta khai báo như trên nghĩa là tương đương với khai báo: string chuoi = “”;

 Thuộc tính Length: Dùng để xác định chiều dài của chuỗi

Ví dụ 1.22: static void Main(string[] args) { string str = "pham phuong nguyen"; int chieudai = str.Length;

 Nhóm các phương thức so sánh chuỗi: Compare, CompareOrdinal,

- Phương thức Compare: Phương thức tĩnh so sánh hai chuỗi

 Nếu gt = 0: hai chuỗi bằng nhau

 Nếu gt = 1: chuỗi 1 lớn hơn chuỗi 2

 Nếu gt = -1: chuỗi 1 nhỏ hơn chuỗi 2

Khi sử dụng phương thức mà không có tham số true, hệ thống sẽ phân biệt giữa chữ thường và chữ hoa Ngược lại, nếu có tham số true, thì sự phân biệt này sẽ không còn, cho phép xử lý cả hai loại chữ một cách đồng nhất.

The CompareOrdinal method in C# is used to compare two strings and returns an integer value It checks each character from the beginning to the end of the strings, identifying the first differing character The method calculates the ASCII values of these characters and returns the result For example, using `String.Compare("abDb", "abdb")` yields a result of 1, while `String.Compare("abDb", "abdb", true)` returns 0, indicating a case-insensitive comparison Additionally, `String.Compare("abdaF", "abdb")` results in -1, showing that the first string is less than the second.

- Phương thức so sánh chuỗi CompareTo: Phương thức thành viên lớp, giúp so sánh 2 chuỗi và trả về 1 giá trị kiểu int

 Nếu gt = 0: hai chuỗi bằng nhau

 Nếu gt = 1: chuỗi 1 lớn hơn chuỗi 2

 Nếu gt = -1: chuỗi 1 nhỏ hơn chuỗi 2

Phương thức so sánh chuỗi Equal được sử dụng để kiểm tra xem hai chuỗi ký tự có giống nhau hay không Nếu hai chuỗi này giống nhau, phương thức sẽ trả về giá trị true; ngược lại, nếu không giống nhau, giá trị trả về sẽ là false.

Khi sử dụng phương thức so sánh chuỗi mà không chỉ định tham số StringComparisonType, hệ thống sẽ so sánh từng ký tự một giữa hai chuỗi và phân biệt chữ hoa chữ thường Để thực hiện so sánh không phân biệt chữ hoa thường, bạn có thể thêm tham số StringComparison.OrdinalIgnoreCase Ví dụ, trong đoạn mã sau, các giá trị gt1, gt2, gt3 và gt4 sẽ cho kết quả khác nhau dựa trên việc so sánh các chuỗi "abcd", "aBcd", "aBcdefg" và "Abcd" Cuối cùng, bạn cũng có thể sử dụng phương thức CompareTo để so sánh chuỗi hoặc String.Equal để kiểm tra sự bằng nhau giữa hai chuỗi với tham số [StringComparisonType].

 Nhóm phương thức nối chuỗi và chèn chuỗi: Concat, Join, Inser

- Phương thức Concat: Phương thức tĩnh Concat dùng để nối hai hay nhiều chuỗi lại với nhau và trả về 1 chuỗi mới

- Phương thức Join: dùng để nối 1 mảng chuỗi lại với nhau, giữa các phần tử có thể chèn thêm 1 chuỗi nào đó để phân cách

The Insert method is a class method that allows you to insert a string at a specified position within another string In the provided code example, two strings, "ITlab" and "itlac," are compared using the String.Equals method with case-insensitive comparison If the strings are equal, a message box displays "The strings are the same"; otherwise, it shows "The strings are not the same."

} string = String.Concat(,); public static void Main(string []args) { string chuoi1=“abc”; string chuoi2=“aBc”; string kq = String.Concat(chuoi1,chuoi2); //kq = “abcaBc”

} string = String.Join(,); public static void Main(string []args) { string[] chuoi = { "mot", "hai", "ba" }; string str = String.Join(" -", chuoi);

 Nhóm phương thức kiểm tra và định vị: Contain, StartsWith, EndsWith, IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny

Phương thức Contain là một phương thức thuộc lớp, cho phép tìm kiếm một từ hoặc chuỗi bất kỳ trong một chuỗi khác Nếu từ hoặc chuỗi đó được tìm thấy, phương thức sẽ trả về giá trị true; ngược lại, nếu không tìm thấy, nó sẽ trả về false.

Phương thức Contain kiểm tra xem chuỗi thứ hai có tồn tại trong chuỗi thứ nhất hay không, với sự phân biệt giữa ký tự hoa và ký tự thường.

Phương thức StartsWith thuộc lớp kiểm tra xem một chuỗi có bắt đầu bằng một số ký tự nhất định hay không Phương thức này trả về giá trị Boolean, cụ thể là true hoặc false.

Mảng

Mảng là một tập hợp có thứ tự của các đối tượng cùng kiểu, cho phép truy cập các phương thức và thuộc tính của lớp System.Array Cú pháp khai báo mảng kết hợp giữa cú pháp của C và định nghĩa lớp của C#.

Ví dụ 1.52: Khai báo mảng số nguyên có 100 phần tử int [] mang = new int[100];

Hoặc có thể khai báo mảng đồng thời khởi tạo giá trị cho các phần tử mang:

Lưu ý: khi khởi tạo mảng bẳng toán tử new thì các phần tử của mảng sẽ mang giá trị mặc định như bảng 1.5 sau:

Bảng 1.5: Bảng mô tả các giá trị mặc định của kiểu dữ liệu

Kiểu dữ liệu Giá trị mặc định int, long, byte, … 0 bool false char „\0‟ (null) enum 0 reference null

Để truy cập các phần tử trong mảng, bạn cần sử dụng toán tử chỉ mục [] Phần tử đầu tiên trong mảng có chỉ số là 0.

Ngoai ra C# hỗ trợ thuộc tính Length để xác định chiều dài của mang

Ví dụ 1.53: Tính tổng các phần tử của mảng A = {1, 2, 3, 4, 5}

[] = new [];

[] = {, , , …., }; public static void Main(string []args)

{ int[] mang={1,2,3,4,5,6}; int tong = 0; for(int i=0; i Project như hình 1.8

Hình 1.8: Tạo mới dự án

The ordinal abc could not be located in the dynamic-link library xyz.dll

Bước 2: Chọn loại dự án là Class Library và đặt tên “LoiChao” cho tập tin DLL

Hình 1.9: Chọn loại dựán và đặt tên dự án

Bước 3: Giao diện soạn thảo mã lệnh được hiển thị, tiến hành viết mã lệnh như hình 1.10

Hình 1.10: Giao diện soạn thảo mã lệnh

Bước 4: Nhấn F5 để biên dịch và tạo tập tin DLL cho dự án Tập tin DLL thường được lưu trong thư mục Bin của dự án, hoàn tất quá trình tạo tập tin DLL.

Bước 1: Chọn loại dự án

Bước 2: Đặt tên dự án

1.9.3 Các bước để sử dụng tập tin DLL

Bước 1: Tạo dự án mới như hình 1.11

Hình 1.11: Tạo dự án mới

Bước 2: Bên cửa sổ Solution Explorer, nhấp phải chuột vào References và chọn Add References để thêm *.DLL vào dự án này như hình 1.12

Hình 1.12: Thêm tập tin DLL vào dự án

Bước 3: Sử dụng tập tin DLL

Bướ c 1:Ch ọ n lo ạ i d ự án Windows Forms Application

Bước 2: Đặ t tên d ự án và ch ọn đườ ng d ẫn lưu trữ

Bước 1: Nhấp phải chuột vào References và chọn Add References

Bước 2: Trên cửa sổ Add Reference chọn tab Browse

Bước 3: Tìm đến đường dẫn chứa tập tin DLL

Bước 4: chọn tập tin DLL

Ví dụ: Xây dựng tập tin DLL hỗ trợ giải phương trình bậc hai

Bước 1: Tao dự án loại Class Library và đặt tên là Giai_phuong_trinh_bac_hai như hình 1.14

Hình 1.14: Tạo dự án Class Library

Khai báo không gian tên c ủ a DLL

Khai báo đối đượ ng và s ử d ụng phương th ứ c trong DLL

Bước 2: Viết mã lệnh cho điều khiển using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Giai_phuong_trinh_bac_hai

{ int a, b, c; public int C { get { return c; } set { c = value; } } public int B { get { return b; } set { b = value; } } public int A { get { return a; } set { a = value; } } public string TimNghiem()

Để giải phương trình bậc hai ax² + bx + c = 0, ta tính giá trị của delta bằng công thức delta = b² - 4ac Nếu a khác 0, có ba trường hợp xảy ra: Nếu delta nhỏ hơn 0, phương trình vô nghiệm Nếu delta bằng 0, phương trình có nghiệm kép x1 = -b / (2a) Cuối cùng, nếu delta lớn hơn 0, phương trình có hai nghiệm phân biệt x1 và x2, được tính bằng x1 = (-b - √delta) / (2a) và x2 = (-b + √delta) / (2a).

} else ketqua = "Đây không phải là phương trình bậc hai"; return ketqua;

Bài tập cuối chương

Bài 1: Tạo tập tin thư viện tên ToaDo.DLL, hỗ trợ cộng và trừ hai tọa độ

Bài 2: Tạo tập tin thư viện tên PhanSo.DLL, hỗ trợ cộng, trừ, nhân, chia hai phân số

Bài 3: Tạo tập tin thư viện tên PTB1.DLL, hỗ trợ người sử dụng giải phương trình bậc nhất: ax + b = 0

Bài 4: Tạo tập tin thư viện tênPTB4.DLL, hỗ trợ người sử dụng giải phương trình trùng phương: ax 4 + bx 2 + c = 0

Bài 5: Tạo tập tin thư viện tên HePTB1.DLL, hỗ trợ người sử dụng giải hệ phương trình bậc nhất hai ẩn số:

Giới thiệu về Windows Forms

Giới thiệu

Windows Forms là một ứng dụng quan trọng của Microsoft, cho phép lập trình viên dễ dàng tạo ra các form với nhiều điều khiển và thành phần hỗ trợ Nhờ vào Windows Forms, lập trình viên có thể nhanh chóng xây dựng và tùy chỉnh giao diện, tạo ra các form với kích thước và hình dạng đa dạng, đồng thời bố trí các điều khiển và thành phần phù hợp với nhu cầu và mục đích sử dụng của người dùng.

Windows Forms cung cấp nhiều sự kiện trên mỗi điều khiển, cho phép lập trình viên tương tác linh hoạt với thiết bị Các sự kiện này bao gồm sự kiện ấn nút bàn phím, nhấp chuột và ấn tổ hợp phím, giúp tối ưu hóa trải nghiệm người dùng.

 Tạo một dự án Windows Forms: Để tạo một dự án Windows Forms với C#, cần thực hiện một số bước sau :

Bước 1: Sau khi cài xong Micorsoft Visual Studio 2010, tiến hành bật ứng dụng Visual Studio 2010 lên bằng cách nhấp vào biểu tượng như hình 2.1:

Hình 2.1: Mởứng dụng Visual Studio 2010

Bước 2: Sau khi đã chọn biểu tượng Visual Studio 2010 giao diện như hình 2.2 sẽ được hiển thị:

Hình 2.2: Giao diện ứng dụng Visual Studio 2010

Bước 3: Chọn Menu File > New > Project

Hình 2.3: Giao diện tạo dự án mới

Sau khi hoàn thành bước 3, cửa sổ "New Project" sẽ xuất hiện, cho phép lập trình viên chọn ngôn ngữ lập trình và loại ứng dụng Cụ thể, hãy chọn ngôn ngữ Visual C# và loại ứng dụng là Windows Forms Tiếp theo, lập trình viên cần đặt tên cho dự án (nếu không muốn sử dụng tên mặc định của Visual Studio) và xác định đường dẫn lưu trữ dự án.

Hình 2.4: Cửa sổ New Project

Sau khi hoàn thành việc tạo dự án, một form mặc định tên là Form1 sẽ được thêm vào dự án như hình 2.5 Lập trình viên có thể tiến hành thiết kế giao diện cho Form1 bằng cách thêm các thành phần cần thiết, phù hợp với yêu cầu của phần mềm.

Hình 2.5: Giao diện chính của dự án Windows Forms

Chọn ngôn ngữ lập trình

Chọn loại ứng dụng Đặt tên cho dự án

Chọn đường dẫn lưu dự án

Giao diện ban đầu của form

 Thêm form mới vào dự án:

Trong hầu hết các dự án phần mềm, việc sử dụng nhiều form là điều phổ biến Lập trình viên có thể thêm form mới vào dự án bằng cách thiết kế trực tiếp tại thời điểm thiết kế hoặc thông qua mã lập trình để tạo form trong quá trình thực thi Để thêm form mới tại thời điểm thiết kế, hãy vào menu Project và chọn Add Windows Form Hộp thoại Add New Item sẽ xuất hiện, cho phép bạn chọn Windows Form và đặt tên cho form mới Cuối cùng, nhấp Add để hoàn tất quá trình thêm form vào dự án phần mềm.

Để thêm một Form mới sau khi thiết kế giao diện hoàn tất, lập trình viên cần viết mã chương trình để tạo form Sau khi thực hiện, form mới sẽ được tạo và hiển thị khi chương trình chạy.

Khái báo đối tượng thuộc lớp Form như sau:

Form form1; form1 = new Form();

Để hiển thị Form trong quá trình thực thi chương trình, bạn có thể sử dụng phương thức Show() hoặc ShowDialog(), ví dụ: form1.Show(); và đừng quên đặt tên cho Form mới, chọn loại Windows Form.

Namespace, hay không gian tên, có vai trò quan trọng trong việc ngăn chặn xung đột tên lớp trong một dự án Nó cũng giúp phân nhóm các lớp có chức năng tương tự, từ đó dễ dàng quản lý mã nguồn hơn Chẳng hạn, trong C#, lớp Console được tạo ra để làm việc với màn hình Console, chứa các thuộc tính và phương thức chuyên dụng cho môi trường này, và lớp Console này nằm trong không gian tên System.

Không gian tên tổ chức được thiết kế theo dạng phân cấp, tương tự như cấu trúc của cây thư mục Trong mỗi không gian tên, có thể tồn tại nhiều lớp, và các lớp này không được phép trùng tên với nhau Hình 2.7 minh họa rõ ràng sự phân cấp của không gian tên.

Không gian tên System chứa không gian tên Data;

Không gian tên Data chứa không gian tên Oracle và SqlClient;

Trong không gian tên SqlClient chứa nhiều lớp khác tên nhau như: lớp SqlCommand, lớp SqlConnection, …

Hình 2.7: Tổ chức phân cấp của không gian tên trong C#

 Sử dụng không gian tên:

C# cung cấp nhiều lớp đối tượng trong các không gian tên khác nhau để hỗ trợ lập trình Để sử dụng các không gian tên này, bạn cần sử dụng từ khóa "using".

Ví dụ 2.1: using System; using System.Windows.Forms;

When creating a Windows Application project, it automatically includes eight default namespaces: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; and using System.Drawing.

SqlCommand using System.Linq; using System.Text; using System.Windows.Forms; Ý nghĩa của các không gian tên như sau:

- Không gian tên System: Chứa các lớp và các kiểu dữ liệu cơ sở (int, double, byte, short, …)

- Không giam tên System.Data: Chứa các lớp của ADO.NET, các lớp giúp kết nối hoặc thao tác với cơ sở dữ liệu (SQL Server, Oracle, Microsoft Access)

- Không gian tên System.Drawing: Chứa các lớp làm việc với đồ họa

System.ComponentModel là một không gian tên quan trọng, bao gồm các lớp cơ sở và giao diện hỗ trợ thực thi chuyển đổi kiểu, quản lý thuộc tính, liên kết với các nguồn dữ liệu và các thành phần cấp phép.

- Không gian tên System.Collections.Generic: Chứa các lớp hỗ trợ cho việc thiết lập các tập hợp dạng chung mẫu (template) như:

 ArrayList List: Tập hợp chung mẫu có thể thay đổi kích thước khi vận hành

 Queue Queue: Tập hợp chung mẫu theo mô hình vào trước ra trước(FIFO)

 Stack Stack: Tập hợp chung mẫu theo mô hình vào sau ra trước (LIFO)

- Không gian tên System.Text: Cung cấp các lớp giúp mã hóa các ký tự Ascii hoặc Unicode

- Không gian tên System.Linq: Cung cấp các lớp hỗ trợ cho việc sử dụng ngôn ngữ truy vấn tích hợp (Language-Integrated Query – LinQ)

Không gian tên System.Windows.Forms là không gian tên chính cung cấp các lớp cần thiết để phát triển ứng dụng kiểu Windows Nó được chia thành nhiều nhóm khác nhau, giúp tổ chức và quản lý các thành phần của ứng dụng một cách hiệu quả.

 Menu, toolbar: ToolStrip, MenuStrip, ContextMenuStrip, StatusStrip

 Controls: TextBox, ComboBox, ListBox, ListView, WebBrowser, Label, …

 Layout: FlowLayoutPanel, TableLayoutPanel, … Giúp trình bày các điều khiển trên form

 Data và DataBinding: Gồm các công cụ BindingNavigator, BindingSource, … giúp liên kết dữ liệu từ cơ sở dữ liệu đến các điều khiển Dataset hoặc DataGridView

 Command Dialog Boxes: Gồm các điều khiển OpenFileDialog, SaveFielDialog, ColorDialog, FontDialog, PrintDialog làm việc với tập tin, màu sắc, phông chữ, in ấn

Bài viết cung cấp danh sách các Component/Control được phân loại theo nhóm, giúp lập trình viên dễ dàng kéo thả vào form để thiết kế giao diện chương trình Sau khi hoàn thành dự án, giao diện chính sẽ được hiển thị như hình 2.8, với thanh công cụ nằm ở phía bên trái.

Ngoài những điều khiển hiển thị mặc định trong thanh công cụ, lập trình viên cũng có thể thêm các thành phần mới vào bằng các chọn Project/AddReference

Hình 2.8: Giao diện chính với thanh công cụ bên trái

Nếu giao diện chính không hiển thị thanh công cụ, lập trình viên có thể hiển thị bằng cách chọn View/ Toolbox như hình 2.9

Hình 2.9: Hiển thị thanh công cụ

Thanh công cụ bố trí các điều khiển thành những nhóm riêng biệt như hình 2.10:

Hình 2.10: Thanh công cụ Với việc phân loại các điều khiển theo nhóm giúp cho lập trình viên dễ dàng tìm kiếm điều khiển cần sử dụng hơn

Chứa các điều khiển giúp trình bày các điểu khiển khác trên form

Chứa các điều khiển thông dụng như: TextBox, Label,

Chứa các điều khiển giúp làm việc với cơ sở dữ liệu

Chứa các điều khiển giúp kiểm tra dữ liệu nhập như: ErrorProvider, HelpProvider

Chứa các điều khiển giúp tạo thanh thực đơn và thanh trạng thái: MenuStrip, StatusStrip

Chứa các điều khiển giúp làm việc với việc in ấn: PrintDialog,

Chứa các điều khiển làm việc với báo cáo

Chứa các điều khiển làm việc với tập tin

Chứa điều khiển cho phép đặt điều khiển của WPF trong cửa sổ Windows Form:

ElemenHost Chứa điều khiển cho phép vẽ các hình ô vuông, hình tròn, trên form, hoặc in form

2.1.4 Định dạng mã C# Để định dạng mã lệnh khi lập trình Lập trình viên của thể tùy chỉnh lại định dạng mã trong cửa sổ Option Đầu tiên bật cửa sổ Option bằng cách chọn Tools/

Hình 2.11: Giao diện cửa sổ Option

Sau khi đã mở cửa sổ Option, chọn mục Evironment/ Fonts and Colors như hình 2.12 để định dạng lại mã lệnh:

Hình 2.12: Giao diện định dạng mã lệnh

Các loại Form

 Thiết lập giá trị thuộc tính form trong cửa sổ Properties:

Mục muốn định dạng như: chú thích, chuỗi văn bản, từ khóa, …

Windows Forms cung cấp nhiều thuộc tính cho việc tùy chỉnh giao diện form Lập trình viên có khả năng thay đổi các thuộc tính này trong cửa sổ Properties, giúp điều chỉnh kích thước, màu sắc, font chữ và nhiều yếu tố khác để form trở nên phù hợp hơn.

Hình 2.13: Giao diện cửa sổ Properties

Bảng 2.1 mô tả một số thuộc tính thường sử dụng trong việc thiết kế form

Bảng 2.1: Bảng mô tả thuộc tính Form

Giá trị thuộc tính AcceptButton trong một form là tên của nút bấm Khi thiết lập thuộc tính này, người dùng có thể nhấn phím Enter trên bàn phím để thực thi hành động, thay vì phải nhấp chuột vào nút.

Backcolor Thiết lập màu nền của form

BackgroundImage Thiết lập hình nền cho form

BackgroundImageLayout Thiết lập việc hiển thị hình vừa thêm trong thuộc tính BackgroundImage sẽ hiển thị trên form ở dạng: bình thường (None), giữa (Center), …

Giá trị thuộc tính CancelButton xác định tên của một nút trên biểu mẫu Thay vì phải nhấp chuột vào nút để thực hiện hành động, người dùng có thể sử dụng phím Escape trên bàn phím để kích hoạt chức năng tương ứng.

ControlBox Mang giá trị true hoặc false Nếu thiết lập thuộc tính là false thì sẽ loại bỏ các nút minimize và nút maximize trên form

Cusor Thiết lập hình dạng con trỏ khi di chuyển con trỏ vào form

Enable Mang giá trị true hoặc false; Nếu thiết lập thuộc tính là false thì điều khiển trong form sẽ không cho phép người dùng thao tác

Font Thiết lập văn bản hiển thị trên điều khiển

ForeColor Thiết lập màu mặc định cho chuỗi của các điều khiển trên form

FormBorderStyle Thiết lập đường viền của form và hành vi của form khi chạy chương trình

HelpButton mang giá trị true hoặc false; khi thuộc tính này được thiết lập là true, trên thanh titlebar sẽ xuất hiện một nút có dấu hỏi (?) Nút này chỉ hiển thị khi hai thuộc tính MinimizeBox và MaximizeBox được kích hoạt.

MaximizeBox được thiết lập là false)

Icon Biểu tượng hiển thị bên trái trên thanh titlebar của form

KeyReview Mang giá trị true hoặc false: nếu thiết lập thuộc tính là true cho phép các sự kiện bàn phím của form có hiệu lực

Location Khi thuộc tính StartPosition được thiết lập là Manual, thì thuộc tính Location có tác dụng thiết lập vị trí hiển thị của form trên màn hình

MaximizeBox Mang giá trị true hoặc false: nếu thiết lập thuộc tính là false thì nút maximize form trên thanh titlebar sẽ mất đi

MaximumSize Thiết lập kích thước lớn nhất của form

MinimizeBox Mang giá trị true hoặc false: nếu thiết lập thuộc tính là false thì nút minimize form trên thanh titlebar sẽ mất đi

MinimumSize Thiết lập kích thước nhỏ nhất của form

Opacity Thiết lập độ trong suốt cho form

StartPosition Vị trí hiển thị của form trên màn hình

Text Chuỗi văn bản hiển thị trên titlebar của form

TopMost Mang giá trị true hoặc false: nếu thiết lập thuộc tính là true thì form sẽ luôn hiển thị trên các cửa sổ khác

Thuộc tính "Visible Mang" có giá trị true hoặc false Nếu được thiết lập là true, form sẽ hiển thị trên màn hình; ngược lại, nếu là false, form sẽ không hiển thị.

WindowState Có 3 giá trị: Normal: hiển thị form bình thường; Minimized: khi chạy chương trình form sẽ bị thu nhỏ dưới thanh taskbar;

Maximized: form hiển thị có kích thước đầy màn hình

IsMDIContainer Mang giá trị True hoặc False

- Nếu là True: Form ở dạng MDI Form

- Nếu là False: Form ở dạng bình thường

MdiParent mang giá trị là đối tượng MDI Form Khi thiết lập giá trị cho thuộc tính MdiParent thì form sẽ trở thành Child Form

 Thiết lập giá trị thuộc tính form bằng mã lệnh:

Ngoài việc thiết kế form thông qua việc thiết lập các giá trị trong cửa sổ properties, lập trình viên còn có thể thiết lập giá trị thuộc tính của form bằng cách sử dụng mã lệnh.

- Thay đổi chuỗi văn bản hiển thị trên titlebar bằng cách thiết lập giá trị cho thuộc tính Text:

- Thiết lập kích thước form: Có thể thiết lập giá trị cho thuộc tính Width và thuộc tính Height để quy định chiều rộng và chiều cao cho form

Form1.Text = “Đây là Form1”; hoặc:

Note: If the StartPosition property is set to WindowsDefaultBounds, the form will have a default size If StartPosition is set to a different value, the form's size will be determined by the Size property settings.

- Thiết lập độ trong suốt cho form:

To set the initial display position of a form on the screen, utilize the StartPosition property This property allows you to define the starting location of the form effectively.

StartPosition là một trong các giá trị quy định sẵn trong biến kiểu liệt kê

Bảng 2.2: Mô tả các giá trị của FormStartPosition

Manual Nếu StartPosition mang giá trị Manual thì vị trí form hiển thị sẽ là vị trí thiết lập tại thuộc tính

CenterScreen Form hiển giữa màn hình

Form hiển thị tại vị trí mặc định với kích thước form sẽ là kích thước form được thiết lập tại thuộc tính Size

WindowsDefaultBounds Form hiển thị tại vị trí mặc định với kích thước form sẽ là kích thước mặc định CenterParent Form hiển thị ở vị trí giữa form cha

Ví dụ 2.2: Hiển thị Form1 ở vị trí giữa màn hình

 Thiết lập form hiển thị:

Trong C#, lập trình viên có thể chỉ định form hiển thị đầu tiên khi dự án được thực thi bằng cách chỉnh sửa mã lệnh trong hàm main của lớp Program.

Lớp Program bao gồm một hàm chính là hàm Main, và khi dự án được chạy, mã lệnh trong hàm Main sẽ được thực thi đầu tiên.

Dòng lệnh chỉ định rằng Form1 sẽ là form hiển thị đầu tiên Lập trình viên chỉ cần sửa mã lệnh để thay đổi form hiển thị bằng cách thay thế tên Form1 bằng tên của form mong muốn.

Ví dụ 2.3: Hiển thị form có tên Form2 trong dự án

Trong ứng dụng Windows Forms, có 3 loại form: form bình thường (Normal

Form), form cha (Mdi Form), form con (Child Form)

Mdi Form là form có thể chứa các Child Form bên trong Để làm được công việc đó thì form phải được thiết lập thuộc tính:

Developers can set the IsMdiContainer property in the Properties window on the form design screen or through code Once this property is configured, it allows the form to act as a container for multiple child forms.

IsMdiContainer là True thì hình dạng form sẽ thay đổi như hình 2.15

Lớp Program mặc định được tao ra trong dự án

Các đoạn mã mặc định trong lớp Program

Hình 2.15: Hình dạng form khi chuyển từ Normal Form sang Mdi Form

Child Form là dạng form nằm trong vùng làm việc của Mdi Form, tức là nó được chứa bên trong Mdi Form Để một form trở thành Child Form, lập trình viên cần khai báo thuộc tính MdiParent với giá trị là đối tượng Mdi Form Lưu ý rằng thuộc tính MdiParent không hiển thị trên cửa sổ Properties, vì vậy lập trình viên phải thiết lập giá trị này thông qua mã lệnh.

Ví dụ 2.4: Viết chương trình biểu diễn Mdi Form và Child Form như hình 2.16

Hình 2.16: Mdi Form và Child Form

Bước 1: Tạo một dự án mới bằng C#, loại dự án là Windows Forms Application Giao diện đầu tiên của chương trình hiển thị Form1 như hình 2.17

Hình 2.17: Giao diện Form1 khi tạo dự án

Bước 2: Viết mã lệnh cho chương trình

Tại sự kiện Load của Form1 viết các dòng lệnh sau:

Bước 3: Nhấn Ctrl + Shift + B để biên dịch mã nguồn và nhấn F5 để thực thi chương trình sẽ được Mdi Form và Child Form như hình 2.16

Normal Form là loại form hoạt động độc lập, không chứa hoặc bị chứa bởi bất kỳ form nào khác Khi khởi tạo một dự án Windows Forms Application, form mặc định đầu tiên được tạo và hiển thị là Normal Form Giao diện của Normal Form được thể hiện như hình 2.17.

2.2.3 Các hình dạng của Form

Trong Windows Forms, các form mặc định có hình dạng chữ nhật Để tạo form với hình dạng khác như hình tròn hoặc đa giác, lập trình viên cần thiết lập thuộc tính Region trong sự kiện Form_Load Tuy nhiên, hình dạng mới của form chỉ có thể được xem trong thời gian chạy, không thể hiển thị trong chế độ thiết kế.

{ this.Text = "Mdi Form"; this.IsMdiContainer = true;

Form frm = new Form(); frm.Text = "Child Form"; frm.MdiParent = this; frm.Show();

Bài tập cuối chương

Trong số các đoạn mã lệnh đã cho, mã lệnh đúng để tạo và hiển thị một đối tượng Windows Form mới có tên là Form1 là: a) Form1 frm = new Form1(); frm.Show();

Form1.Show(); c) Form1 frm ; frm.Show(); d) Form frm; frm.Show(); e) Form Form1 = new Form();

In programming, the property used to set the content displayed on the title bar is the Text property, while the property used to establish the background color of the form is the BackColor property.

//Tạo đối tượng lớp Form

//Thiết lập tiêu đề trên titlebar của form

Form2.Text = "Giao diện Form 2";

//Thiết lập vị trí hiển thị form

//Thiết lập màu nền cho form

//Kiểm tra giá trị trả về của phương thức ShowDialog() //nếu giá trị trả về là DialogResult.Cancel thì Form2 //đã đóng, tiến hành đóng Form1 bằng phương thức

//Close() if (Form2.ShowDialog() == DialogResult.Cancel)

} d) Thuộc tính Display và ForeColor

Câu 3: Các thuộc tính sau, thuộc tính nào cho phép thiết lập form trở thành Mdi Form a) IsMdiContainer b) MdiParent c) MdiContainer d) ParentForm

Câu 4: Các thuộc tính sau, thuộc tính nào cho phép thiết lập form trở thành Child Form a) IsMdiContainer b) MdiParent c) MdiContainer d) ParentForm

Câu 5: Trong các sự kiện sau, sự kiện nào sẽ phát sinh khi form đã đóng a) FormClosed b) FormClosing c) ClosedForm d) ClosingForm e) Load f) Click

Câu 6: Xây dựng form có dạng hình tam giác như hình 2.21:

Hình 2.21: Form hình dạng tam giác

Các điều khiển thông thường

Các điều khiển đặc biệt

Điề u khi ển dùng để xây d ự ng Menu

Điều khiển chứa các điều khiển khác

Điều khiển Dialog và phương thức Message

Làm việc với điều khiển in ấn

Điều khiển người dùng tự tạo 9.1 User Control

Làm việc với màn hình và hệ thống

Ngày đăng: 28/12/2021, 19:17

HÌNH ẢNH LIÊN QUAN

Hình 1.3: T ạ o d ự  án m ớ i - Giáo trình Lập trình Windows Forms với C
Hình 1.3 T ạ o d ự án m ớ i (Trang 12)
Hình 1.5: Giao di ệ n so ạ n th ả o mã l ệ nh - Giáo trình Lập trình Windows Forms với C
Hình 1.5 Giao di ệ n so ạ n th ả o mã l ệ nh (Trang 13)
Hình 1.13: S ử  d ụ ng DLL - Giáo trình Lập trình Windows Forms với C
Hình 1.13 S ử d ụ ng DLL (Trang 43)
Hình 2.1: M ở ứ ng d ụ ng Visual Studio 2010 - Giáo trình Lập trình Windows Forms với C
Hình 2.1 M ở ứ ng d ụ ng Visual Studio 2010 (Trang 46)
Hình 2.2: Giao di ệ n  ứ ng d ụ ng Visual Studio 2010 - Giáo trình Lập trình Windows Forms với C
Hình 2.2 Giao di ệ n ứ ng d ụ ng Visual Studio 2010 (Trang 47)
Hình 2.4: C ử a s ổ  New Project - Giáo trình Lập trình Windows Forms với C
Hình 2.4 C ử a s ổ New Project (Trang 48)
Hình 2.8: Giao di ệ n chính v ớ i thanh công c ụ  bên trái - Giáo trình Lập trình Windows Forms với C
Hình 2.8 Giao di ệ n chính v ớ i thanh công c ụ bên trái (Trang 52)
Hình 2.9: Hi ể n th ị  thanh công c ụ - Giáo trình Lập trình Windows Forms với C
Hình 2.9 Hi ể n th ị thanh công c ụ (Trang 53)
Hình 2.13: Giao di ệ n c ử a s ổ  Properties - Giáo trình Lập trình Windows Forms với C
Hình 2.13 Giao di ệ n c ử a s ổ Properties (Trang 55)
Hình 2.14: L ớ p Program - Giáo trình Lập trình Windows Forms với C
Hình 2.14 L ớ p Program (Trang 59)
Hình 2.17: Giao di ệ n Form1 khi t ạ o d ự  án - Giáo trình Lập trình Windows Forms với C
Hình 2.17 Giao di ệ n Form1 khi t ạ o d ự án (Trang 61)
Hình 2.23: Thi ế t l ậ p thu ộ c tính Form1 - Giáo trình Lập trình Windows Forms với C
Hình 2.23 Thi ế t l ậ p thu ộ c tính Form1 (Trang 68)
Hình 3.8: Thi ế t l ậ p thu ộ c tính Font cho label2, label3, label4, label5, label6 - Giáo trình Lập trình Windows Forms với C
Hình 3.8 Thi ế t l ậ p thu ộ c tính Font cho label2, label3, label4, label5, label6 (Trang 75)
Hình 3.19: Giao di ện ban đầ u ví d ụ  4 - Giáo trình Lập trình Windows Forms với C
Hình 3.19 Giao di ện ban đầ u ví d ụ 4 (Trang 86)
Hình 3.20: Thi ế t l ậ p thu ộ c tính Items cho listBox1 - Giáo trình Lập trình Windows Forms với C
Hình 3.20 Thi ế t l ậ p thu ộ c tính Items cho listBox1 (Trang 87)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w