راحتترین راه همون استفاده از یک ساب ریپورت برای نمایش فیلدهایی هست که قراره اندازه شون بر اساس محتوا کنترل بشه.
با این وجود در فرم هم میشه ولی کدنویسی میخواد:
Option Compare Database
Option Explicit
Dim H As Integer
Const Fields_Count As Integer = 4
Private Sub Form_Current()
Dim i As Integer
For i = 1 To Fields_Count
Fld(i).Visible = (Fld(i) <> 0)
Next
Dim Last_Top As Integer
Last_Top = F1.Top
For i = 1 To Fields_Count - 1
If Fld(i) <> 0 Then
Last_Top = Last_Top + H
End If
Fld(i + 1).Top = Last_Top
Fld(i + 1).Controls(0).Top = Last_Top
Next
End Sub
Private Sub Form_Load()
H = Me.F2.Top - Me.F1.Top
End Sub
Private Function Fld(ByVal n As Integer) As Control
Set Fld = Me.Controls("F" + Trim(n))
End Function
چند نکته رو در نظر بگیرین:
- مهم نیست که کنترل سورس فیلدها چی هست یا از چه نوعی هستن ولی باید به ترتیب از F1 نام گذاری بشن
- فاصله بین کنترل ها باید یکسان باشه
- کد نمونه برای چهار کنترل هست
و چند توضیح در باره کد:
- متغیر گلوبال H فاصله بین کنترل ها رو نگهداری میکنه و هنگام لود شدن فرم مقدار دهی میشه
- از ویژگی (0)CONTROLS برای دسترسی به لیبل کنترل استفاده شده