[VB.NET] Điều chỉnh độ trong suốt Form 1 thông qua Form 2

tuhocvba

Administrator
Thành viên BQT
Bài toán:
Tôi có 1 form chính (form main), đây là form mà tôi muốn nó có độ trong suốt để không che mất nội dung của các ứng dụng khác.
Thông qua Form 2 tôi sẽ điều chỉnh độ trong suốt của form 1.
Việc chèn form, chú ý trên vb.net tên của nó không phải là userform mà là window form. Các bạn click chuột phải vô project và chọn add => window form.
Bạn cần đăng nhập để thấy đính kèm

Tôi sẽ khai báo một biến public trên module 1.
Giá trị khởi tạo là 0.5, do đó ở form 1, sự kiện load form tôi sẽ code như sau:
Form 1:
Me.Opacity = dotrongsuot
Trên form2, ngay khi người dùng thay đổi giá trị scrollbar (HScrollBar1), thì độ trong suốt của form 1 phải thay đổi theo.
Sự kiện scrollbar di chuyển sẽ code như sau:
Mã:
Dim dbn As Double

        If HScrollBar1.Value > 90 Then
            HScrollBar1.Value = 100
        End If
        dbn = HScrollBar1.Value / 100
        Form1.Opacity = dbn
        Application.DoEvents()
Sự kiện form2 được load ra, tôi muốn thanh scrollbar sẽ phản ánh giá trị của độ trong suốt hiện đang được dùng (lưu ở biến public) do đó code sẽ như sau:
Mã:
HScrollBar1.Value = dotrongsuot * 100
Trên form 2, nếu người dùng ấn OK thì biến public phải được nạp giá trị mới, do đó code như sau:
Mã:
If HScrollBar1.Value > 90 Then
            HScrollBar1.Value = 100
        End If
        dotrongsuot = HScrollBar1.Value / 100
        Form1.Opacity = dotrongsuot
        Application.DoEvents()
        Me.Dispose()
Nếu người dùng ấn hủy thì không lưu gì cả, biến public vẫn giữ nguyên giá trị ban đầu, nhưng thông qua hành động di chuyển scrollbar thì độ trong suốt của form1 đã bị thay đổi rồi, giờ phải trả nó về trạng thái cũ, do đó code như sau:
Mã:
Form1.Opacity = dotrongsuot
        Application.DoEvents()
        Me.Dispose()
Các điểm chú ý:
Scroll bar thiết định giá trị từ 0 tới 100.
Bạn cần đăng nhập để thấy đính kèm

Tôi không hiểu sao ngay cả khi di chuyển con trỏ về kịch bên phải thì check giá trị của scollbar chỉ là 91.
Do đó trong đoạn code trên, để xử lý vấn đề này, tôi xử lý qua code, nếu giá trị > 90 thì thiết định ngay là 100.
Vì độ trong suốt nằm từ 0 tới 1 nên giá trị của scollbar phải chia cho 100.

Để ẩn form, cấu trúc của vb.net hơi khác với VBA :
Mã:
Me.Dispose()
Việc hiện form2 từ form 1, cách xử lý cũng có phần hơi rườm rà:
Mã:
Dim f As New Form2()
        f.ShowDialog(Me)
Tại sao cần thông qua form 2 để điều khiển độ trong suốt của form 1:
Nếu đặt scrollbar trực tiếp trên form 1. Khi điều chỉnh độ trong suốt tới gần 0 (gần như không thấy gì) thì việc điều chỉnh lại độ trong suốt sẽ gặp khó khăn do không còn thấy gì nữa.
Vì vậy, tôi thông qua form 2 (là form không bị làm mờ) để điều khiển độ làm mờ của form 1. Việc này sẽ tránh được điểm rắc rối ở trên.
 
Top