• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Một số kinh nghiệm trong lập trình ứng dụng

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Một số kinh nghiệm trong lập trình ứng dụng

Postby vuathongtin » Mon 25/10/2010 3:58 pm

Tác giả : vuathongtin
Lời nói đầu :
- Mình làm topic này để các bạn tham khảo và góp ý để hoàn thiện hơn kỹ năng lập trình

Phần I.
Kỹ Năng Thiết Kế Form
- Bạn nên dựa vào điểm tương đồng giữa các table trong CSDL để thực hiện việc xử lý (thêm, xóa, sửa ,..) các table đó trong 1 form cho tiện.
Ví dụ :
tb_DanToc (ID_DanToc (autonumber),DanToc(text))
tb_ChucVu(ID_ChucVu(autonumber),ChucVu(text))
==> Chỉ thực hiện thêm, sửa với 1 ô nhập liệu.

Ở đây tôi dùng 1 file text có cấu trúc sau để lấy table cần xử lý :
-- Tên table ----- Tên hiển thị -----
tb_ChucVu = Chức Vụ
tb_DanToc = Dân Tộc


Và xử lý nó để load vào datatable
  1.  string[] danhmuc = File.ReadAllLines(Application.StartupPath +"\DanhMuc.txt");
  2.             foreach (string line in danhmuc)
  3.             {
  4.                 string[] dm = line.Split('=');
  5.                 if (dm.Length == 2)
  6.                 {
  7.                     DataRow row = dt_danhmuc.NewRow();
  8.                     row["MaDanhMuc"] = dm[0].Trim();
  9.                     row["DanhMuc"] = dm[1].Trim();
  10.                     dt_danhmuc.Rows.Add(row);
  11.                 }
  12.      }

//==========================================================

Các dạng Form xử lý sau :
Dạng 1 :
form1.jpg
form1.jpg (24.93 KiB) Viewed 4116 times

Ý tưởng thực hiện :
a. Tư tưởng :
Dùng hàm trạng thái trangthai(status as integer) và hàm thuchienthaotac() và 1 biến trạng thái status.
Hàm thuchienthaotac() sẽ dựa vào biến status để xử lý (thêm ,xóa, sửa,...)
(nút : lưu (thực thi hàm trạng thái), hủy (đưa về trạng thái đầu) ngoài việc thực thi các thao tác, nó còn có tác dụng đưa form về trạng thái 0 (ban đầu)

b. Xử lý :
b.1. Các nút lệnh <--> trạng thái :
Load : status = 0
Thêm : status = 1
Sửa : status = 2
Xóa : status = 3

b.2. Các hàm xử lý
Hàm trangthai(status)
Nếu status = 0 --> trạng thái ban đầu (như hình minh họa dưới đây)
+ textbox : read only = true
+ button : lưu, hủy bỏ --> enable = false ; các nút còn lại là true
Nếu status = 1,2 --> trạng thái thêm,và sửa (nhiệm vụ chính : enable textbox nhập)
+ vô hiệu hóa các : thêm,xóa,sửa,..,; enable các nút còn lại
+ textbox nhập --> read only = false;
Còn nút xóa thì tự thực thi luôn qua việc gán status = 3

Hàm thuchienthaotac()

+ Status = 1 : thực hiện thêm
+ Status = 2 : thực hiện sửa
+ Status = 3 : thực hiện xóa

Ưu điểm
: Dễ viết code (thích hợp cho newbie)
Nhược điểm : Dạng này ko đc pro cho lắm

Dạng 2 :
form2.jpg


Ý tưởng thực hiện :

- Thao tác (thêm, xóa, sửa) với 3 nút (thêm, lưu, xóa)
Xử lý :
- Khi click thêm --> vô hiệu hóa nút này và chuyển caption của 2 nút còn lại thành "lưu và hủy bỏ"
form2.1.jpg

(nút thêm chỉ có nhiệm vụ chính là: clear textbox để nhập liệu)

- Khi click nút lưu --> lưu lại cập nhật dựa vào trạng thái Enable của nút thêm
+ Enable = true --> Thực hiện update (sửa)
+ Enable = false --> thực hiện thêm và trả form về trạng thái đầu

Ưu điểm : Cải thiện độ phức tạp của code (code ít lại)
Nhược điểm : gây khó cho người dùng

Dạng 3 :
form3.jpg
form3.jpg (41.74 KiB) Viewed 4108 times


Ý tưởng :
Cũng dùng 3 nút nhưng khác cách thực hiện
- Click thêm : Thêm mới ở trạng thái null. Sau đó tiến hành cập nhật lại thông qua nút cập nhật (sửa)
(thủ pháp này mod Đạt đã từng dùng đến)
--- Hôm sau viết tiếp :D ................
Last edited by vuathongtin on Thu 10/03/2011 11:53 pm, edited 2 times in total.


Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online

User avatar
nguyenbacbk
Thành viên danh dự
Thành viên danh dự
Posts: 115
Joined: Mon 27/04/2009 2:25 pm
Location: Thai Nguyen city
Contact:

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby nguyenbacbk » Tue 26/10/2010 3:33 pm

topic rất hay. Hy vọng sẽ có nhiều thành viên học tập được kinh nghiệm qua bài viết này.
nguyenbacbk có 1 kinh nghiệm cũng muốn chia sẻ đó là: Người lập trình sẽ gặp khó khăn rất lớn khi lập trình không có tư duy logic. Với trường hợp không có tư duy đó thì tốt nhất phải ngồi thiền mà học thôi.
Bằng ĐH là chứng nhận biết tự học, lấy bằng xong mới học ĐH

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby vo_minhdat2007 » Tue 26/10/2010 7:42 pm

Xin góp ý thêm với topic này chút :D Nhân tiện vuathongtin có nhắc đến dạng 3, mình cũng nói luôn tại sao mình thích dùng như vậy!

Lập trình viên khi làm một ứng dụng phải nghĩ đến làm cho ai sử dụng là quan trọng. VD nếu làm cho một quản trị viên, có kinh nghiệm và kiến thức rộng thì có thể dùng dạng nào cũng được. Nhưng với chương trình của mình hướng đến người dùng "bình dân" thì phải làm khác. Việc thay đổi các nút hoặc thêm dữ liệu bằng form mới sẽ khiến thời gian thêm dữ liệu tốn rất nhiều thời gian, hơn nữa nhiều khi không phải cứ thêm là mình nhập ngay dữ liệu vào! Hơn nữa, chính mình cũng rất khó chịu với kiểu thêm dữ liệu này!

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby vuathongtin » Thu 28/10/2010 1:23 pm

Phần II : Tìm Kiếm Đa Năng

1. Sử dụng SQL :
Giả sử muốn tìm các đối tượng : Tài khoản (user), Họ tên (hoten), Địa chỉ (add), Số điện thoại (tel) .nằm trong table : tb_user(uid,uname,ufullname,uadd,utel...) (như hình vẽ dưới đây)

timkiem1.jpg
timkiem1.jpg (13.55 KiB) Viewed 4049 times


a. Mục đích :
+ không bắt người dùng phải nhập đủ thông tin , họ có thể bỏ trống ô nào cũng được (nếu bỏ trống) thì tức là tìm kiếm tất cả.
+ Mỗi điều kiện nhập vào sẽ tương ứng với việc thêm 1 ràng buộc cho quá trình tìm kiếm

b. Xử lý :

B1: Tìm kiếm trong SQL tức là phải dùng đến "Select" kết hợp với "Where", nhưng nếu có where có ko có điều kiện j cả thì sẽ báo lỗi, mà ở đây ta muốn khi ko có điều kiện nhập vào thì sẽ hiển thị tất cả. Hên quá, SQL hỗ trợ cho ta điều kiện "đúng"(lấy tất cả) là "where 1=1".
Code :
  1. SQL= "SELECT * FROM <tên bảng> WHERE 1=1 " sẽ tương đương "SELECT * FROM <tên bảng>"


Bước 2: Kiểm tra điều kiện nhập vào .
Nếu có điều kiện nhập vào thì ta thêm cú pháp lệnh sau vào chuỗi SQL ở Bước 1
[sql]<tên biến > = " AND <tên trường> = <đối tượng -điều kiện>"
SQL = SQL + <tên biến"[/sql]

Lúc này: [sql]SQL = "SELECT * FROM <tên bảng> WHERE 1=1 AND <tên trường> = <đối tượng - điều kiện>"[/sql]

Mình xin lấy ví dụ hình ở trên làm minh họa
Giả sử muốn tìm các đối tượng : Tài khoản (user), Họ tên (hoten), Địa chỉ (add), Số điện thoại (tel) .nằm trong table : tb_user(uid,uname,ufullname,uadd,utel...) (như hình vẽ dưới đây)

Code: Select all

 dùng 3 biến : tk, ht,dc,dt
Nếu user <> rỗng (null)   --> tức là có điều kiện nhập vào :  tk = " and uname = user.text"
Nếu hoten <> rỗng (null) --> tức là có điều kiện nhập vào :  ht = " and ufullname = hoten.text"
Nếu add <> rỗng (null)    --> tức là có điều kiện nhập vào :  dc = " and ufullname = hoten.text"
Nếu tel <> rỗng (null)     --> tức là có điều kiện nhập vào :  dt  = " and utel = tel.text"


Như vậy ta được :
[sql]SQL = "select * from tb_user where 1=1" + tk + ht + dc + dt[/sql]
Tức là tương đương với :
[sql] SQL = " select * from tb_user where 1=1 and uname = user.text and ufullname = hoten.text and ufullname = hoten.text utel = tel.text"[/sql]
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online

longho
Thành viên chính thức
Thành viên chính thức
Posts: 20
Joined: Sun 13/07/2008 3:11 pm

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby longho » Wed 02/03/2011 10:14 am

Ước gì có cái mã nguồn kèm theo !!!

User avatar
thuongbat
Guru
Guru
Posts: 346
Joined: Sun 27/04/2008 10:11 am
Has thanked: 4 times
Been thanked: 79 times

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby thuongbat » Wed 02/03/2011 11:48 am

Spam :D
Với Form tìm kiếm nâng cao thì mới cần bố trí nhiều Textbox như vậy. Còn form tìm kiếm đơn giản thì chỉ cần 1 ô text và một nút tìm thôi. Thay vì điều kiện AND thì các bạn có thể dùng điều kiện OR. Ví dụ:
  1. String sql =  "select * from tb_user where 1=1 and uname ="+ txtFind.Text +" OR ufullname ="+ txtFind.Text +" OR ufullname ="+ txtFind.Text +" OR utel =" + txtFind.Text;
  2.  


Ngoài ra, thay vì WHERE 1=1 bạn có thể thay bằng WHERE 2=2, WHERE 3=3... hoặc ngắn nhất là WHERE True
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby vuathongtin » Wed 09/03/2011 9:49 am

Phần 3. Kỹ thuật liên quan đến Form
(Nội dung phần này được mình sưu tầm, chọn lọc và bổ sung)

1. Luôn luôn nằm trên hết
Một số chương trình có khả năng luôn luôn nằm trên hết, ngay cả khi nó không có focus. Để thực hiện điều nầy trong VB6 ta phải gọi API. Trong VB.NET, forms có một property mới tên là TopMost. Chỉ cần set TopMost của một form thành True thì nó luôn luôn nằm trên hết

2. Owned Forms (Forms có chủ)
Khi một form có chủ, nó được minimized và closed theo form chủ của nó. Owned forms, đôi khi còn được gọi là forms nô lệ, luôn luôn nằm lên trên form chủ của nó. Dầu vậy, nó không cản trở form chủ nhận focus.
Ta dùng method AddOwnedForm của form chủ để cho thêm owned form vào collection of OwnedForms của nó như sau:
  1.     Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.        Dim myForm2 As New Form2()
  3.        myForm2.Show()
  4.        Me.AddOwnedForm(myForm2)
  5.     End Sub


Form chủ có thể truy cập collection của các forms nô lệ qua property OwnedForms. Dưới đây là code để loop qua các forms nô lệ của một form:
[vbnet]Private Sub BtnListOwnedForms_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnListOwnedForms.Click
Dim OwnedForm As Form
For Each OwnedForm In Me.OwnedForms
Console.Write(OwnedForm.Text)
Next
End Sub [/vbnet]
Form chủ có thể cắt bỏ (remove) một form nô lệ bằng cách dùng method RemoveOwnedForm như:
[vbnet] Me.RemoveOwnedForm(myForm2)[/vbnet]

Khi một form không còn là nô lệ nữa, nó không hẳn bị unloaded, chỉ trở thành một form tự do (không còn liên hệ với form chủ nữa) thôi.

Chú ý sự khác biệt giữa form nô lệ và TopMost form là form nô lệ chỉ nằm trên form chủ nó, trong khi TopMost form nằm trên tất cả mọi forms khác. TopMost form cũng không bị minimized hay closed khi một form nào khác của chương trình bị minimized hay closed.

Chú ý : muốn form nằm trên disable focus các form dưới thì thay:
myForm2.Show() --> myForm2.ShowDialog(); tức là show giống kiểu hộp thông báo

3. Thao tác Anchor (neo) và Dock

Đây là 2 thuộc tính giúp cố định kích thước, vị trí của form và các control của nó
Last edited by vuathongtin on Wed 09/03/2011 11:25 pm, edited 1 time in total.
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online

qhhqnavy
Thành viên tích cực
Thành viên tích cực
Posts: 102
Joined: Sat 26/02/2011 10:45 am
Location: Hải Phòng City

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby qhhqnavy » Wed 09/03/2011 10:41 pm

rất đồng ý với kinh nghiệm của các anh
em mới học, lên cũng không có nhiều kinh nghiệm lăm
đọc được topic này thấy thật là thú vị
cám ơn tất cả mọi người.

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby vuathongtin » Wed 09/03/2011 11:19 pm

Chia sẻ tiếp với các bạn một số kỹ thuật xử lý mà mình hay dùng nè

Phần 4 : Kỹ thuật Làm việc với 1 Form đa chức năng

Giả sử bạn có 1 form làm nhiệm vụ thực hiện các chức năng thêm, sửa,.. cho nhiều đối tượng
(Nếu làm theo cách bình thường thì cứ đối tượng nào thì ta làm Form ấy. Do đó sẽ : n đối tượng <==> n Form)

Ý tưởng giải quyết :
Lợi dùng hàm khởi tạo của Form để truyền các yêu cầu:
Sử dụng các biến toàn cục để nhận yêu cầu : biến tenform (tức là đối tượng mình sẽ thao tác), biến yeucau (để xem yêu cầu thao tác là j : xóa hay sửa,...) và 1 cờ trangthai (ví dụ : 1 là thêm đối tượng 1; 2 là sửa đối tượng 2; 3 là thêm đối tượng 3;...). Cờ trạng thái được tạo ra nhờ hàm khởi tạo của Form

Xử lý :
- Xây dựng 2 hàm chính :
+ Hàm thiết kế lại giao diện (chủ yếu là tên các control và ẩn hiện các control cần dùng) --> dựa vào biến tenformyeucau
+ Hàm xử lý : thực hiện các thao tác mà đối tượng yêu cầu --> dựa vào cờ trangthai

Ví dụ :
VB.NET : dùng
  1. Select Case (trangthai)
  2.  <thực hiện các lệnh >
  3. End Select


C# :

[csharp]Switch(trangthai){
<thực hiện các lệnh >
}
[/csharp]

Mục đích topic này: là để các bạn đọc và tự mình mở rộng tư duy , trí sáng tạo,nên mình ko post bài mẫu :> . Biết đâu khi bạn đọc xong topic này thì sẽ phát minh ra đc 1 phương pháp nào đó hay hơn thì sao , Tam Sao Thì Thất Bản:D
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online

nhokstart
Thành viên chính thức
Thành viên chính thức
Posts: 38
Joined: Wed 13/04/2011 9:42 am
Has thanked: 1 time
Been thanked: 2 times
Contact:

Re: Một số kinh nghiệm trong lập trình ứng dụng

Postby nhokstart » Thu 12/01/2012 3:30 pm

Cảm ơn cảm ơn rất nhiều. Vì những gì bạn cung cấp.


Return to “Visual Basic .NET và C# (VB.NET & C#)”

Who is online

Users browsing this forum: No registered users and 27 guests