Làm sao để co giản độ rộng của từng cột trong ListBox? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Ếch Xanh

Thành viên tích cực
Tham gia
12/8/09
Bài viết
865
Được thích
1,573
Tôi có một ListBox, Với Column Count = 3, ColumnWidths lần lượt là 20pt, 30pt, 40pt.

Khi Show Form, xác định độ rộng của cột bằng Msgbox ListBox1.ColumnWidths thì hiển thị như cài đặt.

Làm sao tôi có thể hiệu chỉnh mỗi cột có độ rộng tăng thêm 10pt của ListBox khi Form đang show?

Trong File tạm thời cho là 10 pt, nếu tăng mỗi cột có rộng nhỏ lớn khác nhau thì phải làm sao?

Cám ơn rất nhiều.
 

File đính kèm

Lần chỉnh sửa cuối:
Để set độ rộng của cột trong ListBox thì anh làm như sau:

Mã:
ListBox1.ColumnWidths = "30 pt;40 pt;50 pt"
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hihihi, cám ơn domfootwear, nhưng sao thấy thủ công làm sao ấy! Có thể làm vòng lặp được không vậy? Chứ lỡ vài ba chục cột chắc khóc luôn!
Muốn vòng lập thì vòng lập thôi
PHP:
Private Sub CommandButton2_Click()
  Dim i As Long, Arr
  Arr = Split(Me.ListBox1.ColumnWidths, ";")
  For i = 0 To UBound(Arr)
    Arr(i) = Trim(Replace(Arr(i), "pt", "")) + 10 & " pt"
  Next
  ListBox1.ColumnWidths = Join(Arr, ";")
End Sub
Có lẽ bạn chưa "cố gắng"... Chứ dễ như ăn khoai thế này, tôi không tin là bạn lại không biết làm
 
Upvote 0
Muốn vòng lập thì vòng lập thôi
PHP:
Private Sub CommandButton2_Click()
  Dim i As Long, Arr
  Arr = Split(Me.ListBox1.ColumnWidths, ";")
  For i = 0 To UBound(Arr)
    Arr(i) = Trim(Replace(Arr(i), "pt", "")) + 10 & " pt"
  Next
  ListBox1.ColumnWidths = Join(Arr, ";")
End Sub
Có lẽ bạn chưa "cố gắng"... Chứ dễ như ăn khoai thế này, tôi không tin là bạn lại không biết làm

Cám ơn Thầy, tại em không có hướng giải quyết. Nếu như em co giản theo % thì sao ạ? Giảm mỗi cột bằng 90% ban đầu thì làm sao ạ? Cái vụ Columnwidths của thằng này khó nhai hơn ListView nhỉ?

OH, từ công thức của Thầy chỉ đổi chút xíu thôi:

Arr(i) = Trim(Replace(Arr(i), "pt", "")) * 90 / 100 & " pt"

Như vậy là OK.

Cảm ơn Thầy.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn Thầy, tại em không có hướng giải quyết. Nếu như em co giản theo % thì sao ạ? Giảm mỗi cột bằng 90% ban đầu thì làm sao ạ? Cái vụ Columnwidths của thằng này khó nhai hơn ListView nhỉ?
90% = 0.9 ---> Vậy thì thay vì + 10, ta sửa thành *0.9 thôi
Arr(i) = Trim(Replace(Arr(i), "pt", "")) * 0.9 & " pt"
Hic... thấy chẳng có gì khó nhai cả ---> Nó là chuổi thì ta xử lý chuổi
 
Upvote 0
Ah... nhân đây đố biết bằng cách nào khỏi dùng vòng lập mà vẫn tăng được ColumnWidths
Ẹc... ẹc....
 
Upvote 0
90% = 0.9 ---> Vậy thì thay vì + 10, ta sửa thành *0.9 thôi
Arr(i) = Trim(Replace(Arr(i), "pt", "")) * 0.9 & " pt"
Hic... thấy chẳng có gì khó nhai cả ---> Nó là chuổi thì ta xử lý chuổi

Cải tiến chỗ này một tí thấy gọn và vẫn ra kết quả đúng:

Arr(i) = Val(Arr(i)) * 0.9 & " pt"

Và không cần màu đỏ luôn!

Arr(i) = Val(Arr(i)) * 0.9
 
Lần chỉnh sửa cuối:
Upvote 0
Chịu thôi Thầy ơi, em tìm hoài mà chẳng ra. Các cao thủ khác thì sao ạ?
Cái trò Evaluate làm hoài, không nhớ sao?
Mã:
Private Sub CommandButton2_Click()
  Dim Tmp As String
  Tmp = Replace(Me.ListBox1.ColumnWidths, "pt", "")
  Tmp = "{""" & Replace(Tmp, ";", """,""") & """} [COLOR=red][B]+10[/B][/COLOR]"
  Me.ListBox1.ColumnWidths = Join(Evaluate(Tmp), ";")
End Sub
Hãy thay +10 thành gì gì đó tùy ý (chẳng hạn là *0.9 để giảm 10% hoặc *1.1 để tăng 10%)
 
Upvote 0
Khơi lại đề tài này, tôi xin hỏi các bạn là khi một ListBox giả sử có 3 cột, tương ứng giá trị với 3 TextBox, một nút lệnh để nhập 3 giá trị ở 3 TextBox này cho mỗi hàng của ListBox. Câu hỏi được đặt ra là khi với chiều dài của chuỗi lớn hơn chiều rộng của cột thì làm sao để nó tự động Fit ở mỗi cột của ListBox (chiều dài chuỗi nhỏ hơn thì thôi, lớn hơn chiều rộng hiện hành của mỗi cột thì ListBox tự động điều chỉnh độ rộng của cột sau mỗi lần nhập liệu).

Xin cảm ơn.
 
Upvote 0
Khơi lại đề tài này, tôi xin hỏi các bạn là khi một ListBox giả sử có 3 cột, tương ứng giá trị với 3 TextBox, một nút lệnh để nhập 3 giá trị ở 3 TextBox này cho mỗi hàng của ListBox. Câu hỏi được đặt ra là khi với chiều dài của chuỗi lớn hơn chiều rộng của cột thì làm sao để nó tự động Fit ở mỗi cột của ListBox (chiều dài chuỗi nhỏ hơn thì thôi, lớn hơn chiều rộng hiện hành của mỗi cột thì ListBox tự động điều chỉnh độ rộng của cột sau mỗi lần nhập liệu).

Xin cảm ơn.

Dựa vào độ rộng của TextBox để gán vào độ rộng của ListBox, Khi bắt đầu gán dữ liệu vào list ta xét nếu chuổi dài hơn độ rộng của textbox thì autosize của textbox đó là true, gán độ rộng textbox thành độ rộng của cột trong listbox, sau cùng trả lại mặc định độ rộng và autosize của listbox về ban đầu.
 
Upvote 0
Dựa vào độ rộng của TextBox để gán vào độ rộng của ListBox, Khi bắt đầu gán dữ liệu vào list ta xét nếu chuổi dài hơn độ rộng của textbox thì autosize của textbox đó là true, gán độ rộng textbox thành độ rộng của cột trong listbox, sau cùng trả lại mặc định độ rộng và autosize của listbox về ban đầu.

Cách này đã làm rồi, một tiểu xảo rất "củ chuối" nhưng rất hiệu quả! Mình lại muốn ai đó hướng dẫn mình cách tạo cho nó thuộc tính đó luôn đấy chứ! Hihihi
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom