10.000 giờ

Để biết làm một nghề, thời gian dành cho nó khoảng 10.000 giờ.

Một hành trình khá dài, đầy thử thách nhưng cũng chứa đựng nhiều điều thú vị.

Sau mỗi giờ, bạn sẽ thấy trưởng thành hơn, tự tin hơn về bản thân, và quan trọng hơn bạn đã học được kỹ năng học, rèn được tính kiên trì và không thấy mình vô dụng. Nó là hành trang để bạn có thể bước vào bất kỳ lĩnh vực nào sau này.

Mời bạn bắt đầu, từng giờ một!

---

[Giờ 6]: 
[Giờ 5]: 
[Giờ 3]: Gõ bàn phím bằng 10 ngón tay [10 ngón lướt nhẹ trên bàn phím là ổn]

Windows Form (4): Thiết kế Form

Bài trước: Windows Form (3): Tạo Form đầu tiên

-----
4. Thiết kế Form

Nhắc lại vài nội dung chính đã học được cho tới thời điểm này:

- Tạo được solution

- Tạo và thêm project vào solution

- Viết được hàm Main(), là điểm bắt đầu của chương trình

- Tạo ra được cửa sổ (form) bằng cách viết mã

- Sau khi tạo cửa sổ, bạn đã tạo ra các nút (các điều khiển, control), và gắn nút vào cửa sổ

Bạn đã bao giờ nghe câu “muốn nhanh thì phải từ từ” chưa? Nghe có vẻ vô lý nhưng có lý đấy. Bạn cứ học từng phần, từng phần nhỏ, ghép lại thì sẽ thành một cái lớn. Chứ cứ nóng vội, đi tắt đón đầu thì chỉ rơi vào trạng thái hoang mang, căng thẳng, không thể biết, hiểu và thực hành được cái gì hết, cơ thể sẽ rơi vào trạng thái suy sụp, mất định hướng và bỏ cuộc.

Cứ đọc đi đọc lại nhiều lần, cố gắng hệ thống lại kiến thức để hiểu, rồi thực hành thật nhiều là ổn.

Quay trở lại bài học.

Ở bài học trước, để tạo ra cửa sổ, các nút, bạn phải lập trình rất nhiều, mất nhiều thời gian và khó thực hiện.

Visual Studio và Windows Form có trang bị cho chúng ta một cách làm nhanh hơn, dễ dàng hơn, đó là thiết kế giao diện bằng hình thức kéo-thả, và các thiết lập trực quan.

4.1 Tạo Form bằng công cụ

Để thêm một cửa sổ vào dự án, tại cửa sổ Solution Explorer, chuột phải vào dự án (ví dụ QuanLySach) > chọn Add > chọn New Item > chọn Form (Windows Forms) > đặt tên cho Form ở ô Name (ví dụ MainForm) > bấm nút Add.

Sau khi tạo được MainForm, bạn sẽ thấy Visual Studio tự động thêm các references cần thiết khác, như System.Data, System.Xml. Trong dự án xuất hiện thêm các tập tin MainForm.cs, MainForm.Designer.cs. Bản thiết kế của MainForm xuất hiện ở cửa sổ bên trái, cho phép bạn bắt đầu thiết kế các thành phần cho cửa sổ.

Chúng ta cùng tìm hiểu sơ qua mã nguồn của 2 tập tin: MainForm.cs và MainForm.Designer.cs.

[MainForm.cs]

namespace QuanLySach

{

            public partial class MainForm : Form

            {

                        public MainForm()

                        {

                                    InitializeComponent();

                        }

            }

}

- Phần using có khai báo để sử dụng khá nhiều thư viện lạ, bạn cũng chưa cần biết nó dùng để làm gì? Cứ để nguyên hoặc xóa những thư viện lạ đi, sau này thiếu thì bổ sung sau. Ví dụ, bạn thử xóa các dòng using mà bạn chưa biết, chỉ để lại:

using System;

using System.Drawing;

using System.Windows.Forms;

Dòng mã:

- namespace QuanLySach { }

Từ khóa namespace (không gian tên) được sử dụng để khai báo một phạm vi, trong đó có chứa các thành phần có liên quan với nhau, và để tránh hiện tượng xung đột tên.

- public partial class MainForm : Form { }

Tạo ra lớp mới, có tên là MainForm. Lớp MainForm kế thừa lớp Form, do vậy MainForm sẽ có tất cả các thuộc tính và phương thức mà lớp Form đang có.

Từ khóa partial để thông báo là lớp MainForm sẽ được định nghĩa ở nhiều nơi khác nhau (ở nhiều tập tin khác nhau). Bạn có thể mở tập tin MainForm.Designer.cs để thấy một phần định nghĩa nữa của lớp MainForm.

Kiểu truy cập của lớp MainForm là public, nghĩa là bạn có thể truy cập và sử dụng tới lớp MainForm từ bên trong và bên ngoài tập tin (có thiết lập tham chiếu). 

- public MainForm()

                        {

                                    InitializeComponent();

                        }

Hàm khởi tạo, được tự động gọi và thực thi khi bạn khai báo một đối tượng thuộc lớp MainForm. Khởi chạy một số thành phần cơ bản bằng hàm InitializeComponent().

[MainForm.Designer.cs]

Trong Visual Studio tập tin MainForm.Designer.cs hiển thị ở 2 dạng, dạng đồ họa và dạng mã nguồn. Mặc định thì sẽ hiển thị ở kiểu đồ họa (cho phép bạn thiết kế giao diện), ví dụ MainForm.cs[Design] .Để hiển thị ở dạng mã nguồn, bạn bấm chuột phải vào tập tin ở khung Solution Explorer và chọn View Code.

Dạng mã nguồn của [MainForm.Designer.cs]

namespace QuanLySach

{

            partial class MainForm

            {

            /// <summary>

            /// Required designer variable.

            /// </summary>

            private System.ComponentModel.IContainer components = null;

 

            /// <summary>

            /// Clean up any resources being used.

            /// </summary>

                /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>

            protected override void Dispose(bool disposing)

            {

            if (disposing && (components != null))

            {

                        components.Dispose();

            }

            base.Dispose(disposing);

            }

 

            #region Windows Form Designer generated code

 

            /// <summary>

            /// Required method for Designer support - do not modify

            /// the contents of this method with the code editor.

            /// </summary>

            private void InitializeComponent()

            {

            this.components = new System.ComponentModel.Container();

            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

            this.ClientSize = new System.Drawing.Size(800, 450);

            this.Text = "MainForm";

            }

 

            #endregion

            }

}

Giải thích một số dòng mã ở trên:

- namespace QuanLySach { }

Tên của namespace là QuanLySach, cùng namespace với mã nguồn trong tập tin MainForm.cs.

- partial class MainForm { }

Mã nguồn này là một phần khác (partial) của lớp MainForm đã được định nghĩa ở trong MainForm.cs.

- private System.ComponentModel.IContainer components = null;

Khai báo một biến có tên là components, kiểu truy cập private, thuộc kiểu System.ComponentModel.IContainer. Thành phần thiết kế của Visual Studio sẽ sử dụng biến này để lưu trữ thông tin của các phần tử đồ họa, như button, text box.

- protected override void Dispose(bool disposing)

    {      

            if (disposing && (components != null))

            {

                        components.Dispose();

            }

            base.Dispose(disposing);

    }

Dispose nghĩa là gỡ bỏ. Phương thức Dispose() được sử dụng để giải phóng các tài nguyên mà Form có thể đang sử dụng, như bộ nhớ, con trỏ file. Kiểu truy cập của hàm là protected, không có kiểu trả về (void), đây là một hàm chồng (override) dựa trên hàm cơ sở là Dispose(). 

- #region Windows Form Designer generated code

 

            /// <summary>

            /// Required method for Designer support - do not modify

            /// the contents of this method with the code editor.

            /// </summary>

            private void InitializeComponent()

            {

            // khởi tạo đối tượng container > quản lý vòng đời của các thành phần

            this.components = new System.ComponentModel.Container();

            // tự động điều chỉnh kích thước các phần tử theo kích thước của font

            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

            // thiết lập kích thước của Form

this.ClientSize = new System.Drawing.Size(800, 450);

// tiêu đề của Form

            this.Text = "MainForm";

            }

 

            #endregion

Đây là vùng mã do thành phần thiết kế của Visual Studio tạo ra, khi bạn thiết kế, thay đổi trên giao diện đồ họa (trên Form) thì mã nguồn sẽ được sinh ra và lưu vào đây. Bạn không nên trực tiếp thay đổi mã nguồn trong vùng này.

Bạn có thể thêm các điều khiển vào Form và quan sát mã nguồn sẽ sinh ra ở trong vùng này.

4.2 Làm quen với thiết kế Form

Để thiết kế Form, chúng ta sẽ sử dụng bộ công cụ Toolbox ở khung bên trái, màn hình Form ở giữa và cửa sổ thiết lập các thuộc tính (Properties) bên phía phải.

Bạn sẽ kéo các công cụ từ Toolbox thả vào Form.

Để thiết lập thuộc tính cho thành phần nào thì bấm chuột phải vào nó và chọn Properties.

Chúng ta sẽ cùng thiết kế cho form chính của ứng dụng QuanLySach:

- Đặt tiêu đề cho form là Quan ly sach: chuột phải vào MainForm > chọn Properties > trong cửa sổ Properties > chọn mục Text > nhập giá trị là Quan ly sach

- Thiết lập kích thước cho MainForm: chọn mục Size > thiết lập width = 850, height = 510. Đơn vị ngầm hiểu là px.

- Tạo thư mục Resources trong project để chứa hình ảnh: Chuột phải vào project > chọn Add > New Folder > nhập tên cho thư mục (Resources)

- Chọn một ảnh nền bất kỳ, ví dụ: kiểu ảnh: bmp; kích thước (tối thiểu): width: 850px, height: 600px. Chép ảnh nền vào thư mục Resources. Vào mục BackgroundImage > tìm tới thư mục Resources > chọn hình ảnh. Vào mục BackgroundImageLayout > chọn Stretch để căng ảnh sao cho phủ kín giao diện.

Chèn thêm nút Sách

- Vào Toolbox > kéo button và thả vào MainForm. Vào mục Name, đặt tên là btnBooks.

- Vào mục font: chọn kiểu font là Monotype Corsiva, Size: 17pt; Bold: True. ForeColor: SteelBlue; Text: Sách. Size: 150, 50

Chèn thêm nút Thoát

- Vào Toolbox > kéo button và thả vào MainForm. Vào mục Name, đặt tên là btnExit.

- Vào mục font: chọn kiểu font là Monotype Corsiva, Size: 17pt; Bold: True. ForeColor: SteelBlue; Text: Thoát. Size: 150, 50

Chèn label Tiệm sách cũ Hoa Giấy

- Vào Toolbox > kéo label và thả vào MainForm. Vào mục Name, đặt tên là lblTiemSach.

- Vào mục font: chọn kiểu font là Monotype Corsiva, Size: 40pt; Bold: True. ForeColor: SteelBlue; BackColor: Transparent. Text: Tiệm sách cũ Hoa Giấy.

4.3 Bài tập

1. Từ khóa partial trong dòng mã sau, có ý nghĩa gì? 

public partial class MainForm : Form { }

A. MainForm là lớp kế thừa của Form

B. Lớp MainForm được định nghĩa ở nhiều nơi

C. Kiểu truy cập của MainForm

D. Lớp rỗng

2. Dòng mã sau có ý nghĩa gì?

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

A. Tự động điều chỉnh kích thước các phần tử theo kích thước của font

B. Thiết lập kích thước font

C. Đặt chế độ kích thước font tự động

D. Dùng font của hệ thống

3. Trong thiết kế giao diện Windows Form, thuộc tính ForeColor dùng để:

A. Định dạng màu nền

B. Định dạng màu chữ

C. Định dạng độ trong suốt của nền

D. Định dạng màu đường viền

4. Viết lại và chạy được các đoạn mã nguồn trong bài viết. 

-----

Gợi ý trả lời

1(B), 2(A), 3(B)

-----

Cập nhật: 19/11/2024

Bài sau: Windows Form (5): 

HocGit (1): Tổng quan về Git

 1. Tổng quan về Git

1.1 Git là gì?

Git là một hệ thống quản lý phiên bản phân tán (distributed version control system) được sử dụng rộng rãi trong phát triển phần mềm. Nó cho phép các nhóm lập trình viên theo dõi và quản lý các thay đổi trong mã nguồn của một dự án một cách hiệu quả.

Một số tính năng của Git:

- Theo dõi lịch sử thay đổi: Git lưu lại từng thay đổi nhỏ nhất của mã nguồn, giúp bạn dễ dàng quay lại các phiên bản trước đó nếu cần.

- Cộng tác hiệu quả: Git cho phép nhiều người cùng làm việc trên một dự án cùng một lúc, đồng thời hợp nhất các thay đổi một cách dễ dàng.

- Phân nhánh và hợp nhất: Git hỗ trợ tạo nhiều nhánh (branch) làm việc độc lập, giúp bạn thử nghiệm các tính năng mới mà không ảnh hưởng đến phần còn lại của dự án.

- Bảo mật: Git lưu trữ các thay đổi dưới dạng các bản ghi (commit) không thể thay đổi, đảm bảo tính toàn vẹn của mã nguồn.

- Phân tán: Mỗi bản sao của một kho lưu trữ Git đều là một kho lưu trữ đầy đủ, cho phép bạn làm việc không cần kết nối mạng và đồng bộ hóa sau đó (khi có kết nối mạng).

1.2 Tải và cài đặt Git

Do Git là một phần mềm, để sử dụng, bạn cần tải nó về máy, và thực hiện cài đặt như một phần mềm thông thường.

Vào trang https://git-scm.com/, chọn phiên bản phù hợp với hệ điều hành bạn đang dùng, để tải Git về máy.

Sau khi tải về máy, thực hiện cài đặt.

Để kiểm tra xem Git đã cài đặt thành công hay chưa? Hoặc để kiểm tra xem trên máy tính có phần mềm Git hay không:

- Bấm Phím cửa sổ + R để mở cửa sổ Run

- Gõ cmd > nhấn phím Enter để mở cửa sổ dòng lệnh (command line)

- Nhập lệnh git --version

- Nếu xuất hiện thông tin về phiên bản của Git, có nghĩa là trên máy tính của bạn đã có phần mềm Git và bạn có thể sử dụng.

1.3 Nhúng Git vào một dự án

Mỗi dự án sẽ có một thư mục để chứa toàn bộ mã nguồn và các tài nguyên liên quan. Thư mục này được lưu trên đĩa cứng. Ví dụ, chúng ta có thư mục của dự án QuanLySach. Để thực hành với Git, bạn có thể tạo một thư mục rỗng bất kỳ, chứ không nhất thiết phải là thư mục dự án.


Nếu bạn muốn sử dụng Git để quản lý các phiên bản của dự án QuanLySach thì bạn phải nhúng Git vào trong thư mục QuanLySach.

Trước khi nhúng Git, bạn mở thư mục QuanLySach ra để quan sát trước, xem sau khi nhúng Git vào thì có những thay đổi gì.


Nhúng Git vào thư mục QuanLySach:

(Bạn có thể thực hành với Git bằng giao diện đồ họa, hoặc các chức năng của Git đã được tích hợp vào các phần mềm lập trình (ví dụ Visual Studio, Eclipse, VS code,...). Tuy nhiên, cách học Git hiệu quả nhất vẫn là sử dụng giao diện dòng lệnh. Giao diện dòng lệnh chứa đầy đủ nhất các lệnh của Git, khi đã hiểu được bản chất các lệnh rồi thì chuyển sang sử dụng trên các giao diện khác rất đơn giản).

- Trong cửa sổ dòng lệnh, di chuyển vào thư mục QuanLySach. Một vài lệnh hữu ích: gõ tên ổ đĩa, kèm dấu hai chấm (:) để chuyển ổ đĩa. Ví dụ, muốn chuyển qua ổ đĩa D sẽ nhập lệnh D: > nhấn phím Enter. Để di chuyển tới thư mục nào thì gõ lệnh cd tenthumuc. Để di chuyển lên thư mục cha: gõ hai dấu chấm (..). Để xem nội dung của một thư mục: dùng lệnh dir. Lệnh cd là viết tắt của change directory, lệnh dir là viết tắt của directory.

- Gõ lệnh git init

Chữ init viết tắt của initialize, nghĩa là khởi tạo.


- Nếu nhúng Git thành công, sẽ thấy thông báo “Initialized empty Git repository in …”. Ý là: Đã khởi tạo một kho chứa rỗng của Git trong thư mục …”.

- Mở thư mục dự án ra để quan sát sự thay đổi. Bạn sẽ thấy xuất hiện thêm thư mục ẩn có tên là .git. Đây chính là thư mục của phần mềm Git thêm và thư mục dự án QuanLySach. Git sẽ sử dụng thư mục này cho các tác vụ của nó. Bạn không nên thay đổi nội dung trong thư mục .git. Nếu máy bạn không nhìn thấy thư mục ẩn: trong cửa sổ của File Explorer, chọn menu View > đánh dấu chọn vào mục Hidden items.


Vậy là bạn đã nhúng được Git vào trong thư mục của dự án. Git sẽ gọi thư mục đã được nhúng Git là một kho chứa (repository, hay repo).

1.4 Bài tập

1. Lệnh nào được sử dụng để nhúng Git vào thư mục dự án?

A. git init

B. git --init

C. git initialize

D. git embed

2. Lệnh nào sử dụng để kiểm tra trên máy tính đã có phần mềm Git hay chưa?

A. git ver

B. git version

C. git --version

D. git --ver

3. Trong Git, kho chứa (repo, repository) là gì?

A. Là thư mục dự án

B. Là thư mục dự án đã được nhúng Git

C. Là thư mục cài đặt phần mềm Git

D. Là thư mục .git

-----

Gợi ý làm bài tập

1(A), 2(C), 3(B)

-----

Cập nhật: 18/11/2024

Bài sau: HocGit (2):


Windows Form (3): Tạo Form đầu tiên

Bài trước: Windows Form (2): Chương trình đầu tiên (tt)

-----

3. Tạo Form đầu tiên

3.1 Form

Trong lập trình Windows Form, Form là một cửa sổ (window), hoặc một hộp thoại (dialog box), dùng để tạo nên giao diện người dùng của ứng dụng.

Trong .NET Framework, Form được định nghĩa trong thư viện System.Windows.Forms. Nghĩa là .NET Framework đã định nghĩa sẵn một lớp có tên là Form, trong đó có các thuộc tính và phương thức, chúng ta sẽ gọi các thuộc tính và phương thức ra để dùng, để tạo ra các chức năng mong muốn.

Để có thể sử dụng lớp Form, chúng ta cần khai báo là sẽ sử dụng nó, bằng từ khóa using System.Windows.Forms.


Tuy nhiên, với khai báo “using System.Windows.Forms”, chỉ có nghĩa là tôi muốn dùng tới lớp Form, chứ Visual Studio thì chả biết cái lớp Form nó nằm ở đâu trong đĩa cứng?

Bạn sẽ thấy Visual Studio báo lỗi khi bạn thêm dòng mã “using System.Windows.Forms” vào tập tin mã nguồn.

Vậy nên, chúng ta phải chỉ cho Visual Studio biết nơi có địa nghĩa của lớp Form. Cách làm: 

- Trong cửa sổ Solution Explorer > Tên dự án (ví dụ QuanLySach) > chuột phải vào mục References > chọn Add References

- Trong cửa sổ Reference Manager, gõ từ khóa tìm kiếm “System” vào ô tìm kiếm (góc trên bên phải) > Đánh dấu chọn vào mục System > bấm OK để thêm lớp System vào dự án. Vì System là lớp cha của Form nên chúng ta cần thêm lớp này vào dự án.

- Làm tương tự để thêm lớp Form, từ khóa tìm kiếm là System.Windows.Forms. Nếu bạn thêm thành công, 2 thư viện sẽ được thêm vào mục References. Chương trình sẽ không còn báo lỗi tham chiếu thư viện nữa.


Vậy là chúng ta đã có thể sử dụng lớp Form để tạo ra giao diện gồm các cửa sổ và hộp thoại.

Chúng ta sẽ tạo và hiển thị một cái cửa sổ ra màn hình.

Bạn sửa hàm Main() với nội dung như sau:

static void Main()

{

            // tạo ra một đối tượng của lớp Form

            Form xinChaoForm = new Form();

            // hiển thị cửa sổ ra màn hình

            xinChaoForm.ShowDialog();

}

Lưu tập tin mã nguồn và chạy chương trình, bạn sẽ có kết quả như sau:


xinChaoForm là một đối tượng của lớp Form, do vậy, chúng ta có thể

sử dụng các thuộc tính và phương thức của nó để thực hiện

các chức năng mong muốn.

Để thêm các nút cho cửa sổ, bạn cần thêm dòng khai báo sau vào

đầu tập tin mã nguồn:

using System.Drawing;

Và thêm References tới System.Drawing

Ví dụ, chúng ta sẽ thêm tiêu đề, nút OK và nút Cancel cho cửa sổ.

Bạn nhập đoạn mã sau:

static void Main()

{

     // tạo ra một cửa sổ từ lớp Form

     Form xinChaoForm = new Form();

    

     // thêm tiêu đề cho cửa sổ

    xinChaoForm.Text = "Xin chào!";

    

     // tạo 2 nút

     Button bt1 = new Button();

     Button bt2 = new Button(); 

 

     // đặt tên cho các nút

     bt1.Text = "OK";

     bt2.Text = "Cancel";

 

     // vị trí xuất hiện của các nút

     bt1.Location = new Point(10, 10);

     bt2.Location = new Point(bt1.Left, bt1.Height + bt1.Top + 10);

    

     // gắn chức năng cho 2 nút

     xinChaoForm.AcceptButton = bt1;

     xinChaoForm.CancelButton = bt2;

  

           // gắn nút vào cửa sổ

     xinChaoForm.Controls.Add(bt1);

     xinChaoForm.Controls.Add(bt2);

    

     // hiển thị cửa sổ ra màn hình

     xinChaoForm.ShowDialog();

}

Lưu và chạy chương trình để có kết quả như sau:

3.2 Bài tập

1. Dòng nào khai báo là sẽ sử dụng lớp Form?

A. using Form

B. using System.Windows.Forms

C. using System.Windows.Form

D. using System.Window.Forms.

2. Để có thể sử dụng lớp Form là làm gì?

A. chỉ cần khai báo bằng từ khóa using

B. chỉ cần thêm thư viện Form vào References

C. vừa dùng từ khóa using vừa thêm thư viện Form vào References

D. không cần làm 2 việc trên (using, references)

3. Lệnh nào để thêm tiêu đề cho xinChaoForm là Xin chào!?

A. xinChaoForm.AddTitle("Xin chào!");

B. xinChaoForm.Text = Xin chào!;

C. xinChaoForm.Title = "Xin chào!";

D. xinChaoForm.Text = "Xin chào!";

4. Viết lại và chạy được các đoạn mã nguồn trong bài viết. 

-----

Gợi ý làm bài tập:

1(B), 2(C), 3(D)

-----

Cập nhật: 15/11/2024

Bài sau: Windows Form (4): Thiết kế Form