• 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

Thêm các CommandButton lúc Runtime

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi truongphu » T.Năm 05/06/2008 8:22 am

Thủ thuật: Thêm các CommandButton khi đang chạy chương trình
Tác giả: tp Sưu tầm
Mô tả: Thêm các CommandButton khi đang chạy chương trình. Tuy hay nhưng hiện tôi chưa biết chúng để làm gì, có thể hữu ích cho bạn nào đó
Cần một command1, property Index gõ vào số 0


Mã: Chọn hết

  1. Private Sub Command1_Click(Index As Integer)
  2. a = Command1.Count
  3.     Load Command1(a)
  4.     Set btn = Command1(a)
  5.         btn.Top = Command1(a - 1).Top + 620
  6.         btn.Caption = "Command" & a + 1
  7.         btn.Visible = True
  8. MsgBox "Hay Quá? Ðê làm gì nhi?"
  9. End Sub
Sửa lần cuối bởi truongphu vào ngày T.Năm 05/06/2008 4:36 pm với 1 lần sửa.


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: Thêm các CommandButton

Gửi bàigửi bởi clarkkent » T.Năm 05/06/2008 8:28 am

Hi ! Hay quá bác Phú, về vọc thử không ngờ cái Label cũng được luôn... :D
Hi ! Lúc rày bắt đầu viết Tip (Bắt chước bác Phú... :D )

Mã: Chọn hết

  1.  
  2. Private Sub Label1_Click(Index As Integer)
  3. b = Label1.Count
  4.     Load Label1(b)
  5.     Set btn = Label1(b)
  6.         btn.Top = Label1(b - 1).Top + 620
  7.         btn.Caption = "Label" & b + 1
  8.         btn.Visible = True
  9. MsgBox "Hay Quá? Ðê làm gì nhi?"
  10. End Sub
  11.  
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

QuangHoa
Guru
Guru
Bài viết: 542
Ngày tham gia: T.Năm 27/03/2008 9:02 am
Đến từ: Quê hương Đại tướng Võ Nguyên Giáp
Been thanked: 5 time
Liên hệ:

Re: Thêm các CommandButton

Gửi bàigửi bởi QuangHoa » T.Năm 05/06/2008 9:11 am

Chỉ đơn giản là tạo ra một mảng (Array ) các Button (Hình như tất cả các đối tượng khác trên Form cũng được và ngay cả Form cũng thế)>
Rất cần thiết đấy bác Phú ạ, rất nhiều ứng dụng. Ví dụ như cái trò chơi này của em.
Download mã nguồn
Download file chạy
chủ đề này

:x :x :x
朋友
这些年一个人风也过雨也走,有过泪有过错还记得坚持什么。
真爱过才会懂会记没会回手,终有梦中有你在心中。
朋友一生一起走那些日子不再有,一句话一辈子一生情一杯九。
朋友不曾孤单过一声朋友你会懂,还有伤还有痛还要走还有我。

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi truongphu » CN 14/12/2008 3:37 pm

Mã: Chọn hết

  1. Private Sub Command1_Click()
  2. Dim FormMoi As New Form1
  3. FormMoi.Caption = "New Form"
  4. FormMoi.Command1.Visible = False
  5. FormMoi.Top = Form1.Top + 3000
  6. FormMoi.Left = Form1.Left + 3000
  7. FormMoi.Show
  8. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
m_tien_85
Thành viên tích cực
Thành viên tích cực
Bài viết: 149
Ngày tham gia: T.Hai 31/03/2008 8:36 am

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi m_tien_85 » T.Hai 15/12/2008 3:53 pm

Theo như code của bác Phú thì ta phải có một form sẳn rồi mới nêu từ một form đó. Nếu vậy thì lỡ như ta có sẵn một form có tới vài chục cái control trên đó thì ta phải visible hết các control đó à, mình không thể new một cái form rỗng và add một control vào được hay sao hở bác.
.:. Mất tiền là mất cái nhỏ, mất danh dự là mất cái lớn, còn mất ý chí là mất tất cả .:.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi truongphu » T.Hai 15/12/2008 5:11 pm

Mã: Chọn hết

  1. Private Sub Command1_Click()
  2. Dim FormMoi As New Form1
  3. Dim XX As Control
  4. For Each XX In FormMoi.Controls
  5. ' Biên mât toàn bô các Controls
  6. XX.Visible = False
  7. Next
  8. FormMoi.Caption = "New Form"
  9. FormMoi.Top = Form1.Top + 3000
  10. FormMoi.Left = Form1.Left + 3000
  11. FormMoi.Show
  12. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
Tunes
Thành viên tích cực
Thành viên tích cực
Bài viết: 116
Ngày tham gia: CN 13/04/2008 6:13 pm
Đến từ: Atlanta, USA
Been thanked: 2 time
Liên hệ:

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi Tunes » CN 11/01/2009 11:10 am

dùng CreateWindow cũng được phải không bác?, với ClassName là "edit" (textbox), "button",... và những Style tùy chọn thì có thể tạo ra được những control đa dạng hơn. :)
Development means Challenge

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi truongphu » T.Ba 13/01/2009 5:38 am

Tunes đã viết:dùng CreateWindow cũng được phải không bác?, với ClassName là "edit" (textbox), "button",... và những Style tùy chọn thì có thể tạo ra được những control đa dạng hơn. :)


Tôi ít dùng CreateWindow, cảm giác thấy form trở nên nặng nề sao ấy. Sau đây là code mẫu của KPD-Team 1999, dùng CreateWindowEx tạo Label trên form

Mã: Chọn hết

  1. Const WS_EX_STATICEDGE = &H20000
  2. Const WS_EX_TRANSPARENT = &H20&
  3. Const WS_CHILD = &H40000000
  4. Const CW_USEDEFAULT = &H80000000
  5. Const SW_NORMAL = 1
  6. Private Type CREATESTRUCT
  7.     lpCreateParams As Long
  8.     hInstance As Long
  9.     hMenu As Long
  10.     hWndParent As Long
  11.     cy As Long
  12.     cx As Long
  13.     y As Long
  14.     x As Long
  15.     style As Long
  16.     lpszName As String
  17.     lpszClass As String
  18.     ExStyle As Long
  19. End Type
  20. Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
  21. Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
  22. Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
  23. Dim mWnd As Long
  24. Private Sub Form_Load()
  25.     'KPD-Team 1999
  26.     'URL: http://www.allapi.net/
  27.     'E-Mail: KPDTeam@Allapi.net
  28.     Dim CS As CREATESTRUCT
  29.     'Create a new label
  30.     mWnd = CreateWindowEx(WS_EX_STATICEDGE Or WS_EX_TRANSPARENT, "STATIC", "Hello World !", WS_CHILD, 0, 0, 300, 50, Me.hwnd, 0, App.hInstance, CS)
  31.     Me.Caption = mWnd
  32.     'Show our label
  33.     ShowWindow mWnd, SW_NORMAL
  34. End Sub
  35. Private Sub Form_Unload(Cancel As Integer)
  36.     'destroy our label
  37.     DestroyWindow mWnd
  38. End Sub
  39.  
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi truongphu » T.Tư 14/01/2009 5:00 am

Vài cách thêm textbox: Dùng Controls.Add

Mã: Chọn hết

  1.    Controls.Add "vb.textbox", "txtTest"
  2.     Controls("txtTest").Visible = True
  3.     Controls("txtTest").Text = "Test"



Mã: Chọn hết

  1.    Dim T As TextBox
  2.     Set T = Controls.Add("vb.textbox", "txtTest")
  3.     T.Visible = True
  4.     T.Text = "Test"
  5.     Set T = Nothing



Mã: Chọn hết

  1.    With Controls.Add("vb.textbox", "txtTest")
  2.         .Visible = True
  3.         .Text = "Test"
  4.     End With
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi truongphu » T.Tư 14/01/2009 5:06 am

Cách khác thêm button hay form

*Thêm button

Mã: Chọn hết

  1.    Set AddedCommandButton = Me.Controls.Add("vb.commandbutton", "cmdTest")
  2.     AddedCommandButton.Visible = True


* Thêm Form

Mã: Chọn hết

  1. Forms.Add("form1").Show



Mã: Chọn hết

  1.    With Forms.Add("form1")
  2.         .Caption = "Test"
  3.         .Show
  4.     End With
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
Tunes
Thành viên tích cực
Thành viên tích cực
Bài viết: 116
Ngày tham gia: CN 13/04/2008 6:13 pm
Đến từ: Atlanta, USA
Been thanked: 2 time
Liên hệ:

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi Tunes » T.Tư 14/01/2009 9:30 am

Vâng, quả là cách của bác thuận lợi hơn nhiều, cảm ơn bác.
Development means Challenge

ngdnguyen
Bài viết: 1
Ngày tham gia: T.Sáu 10/10/2008 11:09 am

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi ngdnguyen » T.Sáu 21/08/2009 12:03 pm

- Cái này mình cũng có đọctrong MSDN rồi. Nó có tiêu đề là 'Add controls at Runtime'. Lưu ý là phải là 1 array of control, thường thì mình tạo ra 1 array control với chỉ số đầu là 0, rồi sau đó dùng phương thức :

Load control_name(index).
- Nếu muốn bỏ thì Unload control_name(index)
- Nhưng nếu 1 control đã dược Load rồi, mà Load lại thì sẽ báo lỗi, hiện mình chưa biết cách nào để kiểm tra 1 control đã được Load (Với Form thì hình như có mà mình quên là đọc ở đâu)
(cái này ai biết chỉ dùm thì cám ơn nhiều. Hiện tại mình xử lý Unload rồi mới Load lại)

-Ứng dụng của mình: vẽ đồ thì kết hợp song song với số trục tùy thuộc vào số biến do ta nhập vào, nên số tiêu đề cho các cột phải sinh ra lúc Run time. Mình cũng cho chỉnh giá trị trên các cột bằng cách kéo các nút lệnh trên đó (giống như chỉnh volume) nên cac nút lệnh cũng sinh ra lúc Run time

Hình đại diện của người dùng
delta_hung1992
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 81
Ngày tham gia: T.Năm 06/11/2008 10:51 pm

Re: Thêm các CommandButton lúc Runtime

Gửi bàigửi bởi delta_hung1992 » T.Sáu 25/09/2009 11:21 am

Anh cứ nhét câu "On Error Resume Next" trước câu "Load" thôi là xong (với điều kiện là code của anh phải chuẩn). Còn cái vụ tạo ra nhiều form (như kiểu MSWord) thì chỉ cần khai báo một array là OK. VD:

Mã: Chọn hết

  1.  
  2. Dim NewForm() As New Form1 'muốn bao nhiêu form thì tùy
  3. Dim m As Integer
  4.  

Sau đó thì gọi bằng cách:

Mã: Chọn hết

  1.  
  2. Load NewForm(m)
  3. m = m + 1
  4.  

Lưu ý: không thể Unload một control trong lúc thiết kế, muốn nó biến mất thì đặt visible = false là xong. ;)
Keep moving forward


Quay về “[VB] Ứng dụng - Form và Control”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách