PDA

View Full Version : جابه جایی اشیا روی فرم به صورت اتوماتیک



accountant
پنج شنبه 26 اسفند 1395, 22:45 عصر
با سلام خدمت اساتید محترم اکسس
بنده یه برنامه با اکسس نوشتم میخواستم تو یه فرم که به شکل گزارش طراحی کردم وقتی یکی از تکست باکس ها مقدارشون صفر باشه اون تکست باکس مخفی بشه. البته این کار راحته ولی جای اون تو فرم خالی میمونه هرچی گشتم پیدا نکردم میخواستم از اساتید که در این زمینه تخصص دارند خواهش کنم راهنماییم کنن که چطور میتونم فیلدهای خالی رو مخفتی کنم طوری که فیلدهای دیگه بیان جاشو بگیرن و جای خالی نباشه تو فرم یعنی تکست باکس ها مرتب شوند.
پیشاپیش از لطفتون ممنونم

accountant
جمعه 27 اسفند 1395, 14:09 عصر
خواهشا اگه کسب بلده راهنمایی کنه

accountant
چهارشنبه 02 فروردین 1396, 09:24 صبح
یعنی کسی نیست این یه تیکه کد رو بلد باشه و یه خیری کنه کار مارو راه بندازه؟

mazoolagh
پنج شنبه 10 فروردین 1396, 09:05 صبح
شما اگر گزارش نیاز دارین بهتره از گزارش استفاده کنین چون اونجا میتونین با استفاده از ویژگی can grow/can shrink اندازه کنترل رو برحسب محتویاتش کنترل کنین.
البته به یاد داشته باشین فقط در جهت عمودی کار میکنه.

اگر واقعا نیاز به فرم هست یا اینکه در جهت افقی قراره فضای خالی رو حذف کنین نیاز به کدنویسی داره.
در اینصورت بهتره فرم رو پیوست کنین.

accountant
شنبه 12 فروردین 1396, 17:57 عصر
با تشکر از استاد عزیز که جواب دادین.
من یک نمونه فایل پیوست کردم میخوام در فرم فیش مواردی که صفر هستند موق نمایش پنهان شوند و تکست باکس های دیگر بیان جای اون رو بگیرند طوری که جای اون تکست باکس خالی نباشه
خیلی ممنون

mazoolagh
سه شنبه 15 فروردین 1396, 08:17 صبح
راحتترین راه همون استفاده از یک ساب ریپورت برای نمایش فیلدهایی هست که قراره اندازه شون بر اساس محتوا کنترل بشه.

با این وجود در فرم هم میشه ولی کدنویسی میخواد:
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 برای دسترسی به لیبل کنترل استفاده شده

accountant
سه شنبه 15 فروردین 1396, 21:56 عصر
خیلی ممنون استاد بزرگوار
فقط یه مشکلی که دارم اینه که من تو نرم افزارم یه چاپ فیش حقوقی گروهی قرار دادم که به صورت continios هست وقتی کدی در قسمت form current مینویسم فقط در فیش اولی اجرا میشه و پرینت که میگیرم در مابقی فیش ها اعمال نمیشه. ممنون میشم که در این مورد نیز بنده را راهنمایی نمایید

mazoolagh
پنج شنبه 17 فروردین 1396, 06:51 صبح
این خواسته فقط در ریپورت شدنی هست