PDA

View Full Version : تغییر رنگ یک فیلد در حالت دیتاشیت فرم



saeed28541
پنج شنبه 15 بهمن 1394, 23:22 عصر
با سلام
امکان اینکه رنگ پس زمینه فیلدهای یک فرم که در حالت دیتا شیت هست ،با اعمال شرط تغییر کنند وجود داره؟:متفکر:

saeed1234n
جمعه 16 بهمن 1394, 09:14 صبح
سلام

بله امکانش هست ؟

saeed28541
جمعه 16 بهمن 1394, 13:09 عصر
سلام.
از راهنمایتون ممنون دوست عزیز.:تشویق:
به نظرم باید راهش را خودم پیدا کنم دیگه.؟:ناراحت:

saeed1234n
جمعه 16 بهمن 1394, 14:26 عصر
سلام

نمونه ؟

e601
جمعه 16 بهمن 1394, 18:41 عصر
شما میتونید از format condition استفاده کنید. مثلا اگه فیلدی دارید بنام phone :
Me.phone.FormatConditions.Delete
Me.phone.FormatConditions.Add(acFieldValue, acEqual, 2).BackColor = vbRed
Me.phone.FormatConditions.Add(acFieldHasFocus).For eColor = vbGreen

خط اول کاندیشن های قبلی رو پاک میکنه.
خط دوم میگه اگر فیلد phone برابر 2 بود پس زمینه اون فیلد قرمز میشه.
خط سوم هم نوع دیگه ای از شرط گذاریه و میگه هر موقع فیلد phone فوکوس گرفت رنگ متنش سبز بشه.

میتونید کد بالا رو در رویداد form_load قرار بدید. در تمام حالتهای فرم، حتی دیتاشیت هم جواب میده...

saeed28541
یک شنبه 18 بهمن 1394, 21:06 عصر
سلام.
کد شما را در رویداد on currentنوشتم ولی Erorr میده.138877
فایل نمونه را ضمیمه کردم

saeed28541
چهارشنبه 21 بهمن 1394, 23:45 عصر
سلام
دوستان راهنمایی کنند ممنون میشم.

e601
پنج شنبه 22 بهمن 1394, 02:39 صبح
سلام
اگه شرط شما اینه که اگر هر دو فیلد elan و sehat برابر true بود پس زمینۀ فیلد shomare قرمز بشه، کدتون اشتباهه. باید از کد زیر استفاده کنید:

Private Sub Form_Load()
Me.shomare.FormatConditions.Delete
Me.shomare.FormatConditions.Add acExpression, , "IIf([elan]=True, IIf([sehat]=True, True, False), False)"
Me.shomare.FormatConditions(0).BackColor = RGB(255, 0, 0)
End Sub

ضمنا نیازی نیست در رویداد form_current قرار بدید. البته قرار بدید هم کار میکنه ولی اصولی ترش اینه که در رویداد form_load قرار بدید. شما وقتی در رویداد form_load یک فرمت شرطی تعریف میکنید خود اکسس موقع آپدیت هر فیلد، شرطها رو چک میکنه. اگر در رویداد form_current قرار بدید به ازای هر کلیک روی یک رکورد، روی تمامی رکوردها کدها اعمال میشه و شما یک تیک و پرش مشاهده میکنید.
در همون form_load قرار بدید بهتره...

saeed28541
پنج شنبه 22 بهمن 1394, 22:31 عصر
سلام
مشکلم حل شد .البته من قصد دارم در صورت تیک نداشتنElan &sehat به رنگ قرمز تبدیل بشه که کد را بصورت زیر اصلاح کردم

Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>5,IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
یه مشکل دارم
اینکه همونطور که می بینید من در کدم تفاوت دو تاریخ رادارم که الان درست کار مینکه فقط وقتی بجای عدد5 میخوام از یک تک باکس در فرم عدد را بگیرم عمل نمیکنه.یعنی بصورت زیر نوشتم

Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>forms!tanzim!text0,IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
ممنون از راهنمایی های شما

e601
پنج شنبه 22 بهمن 1394, 23:30 عصر
والا عدد 5 رو که احتمالا یادتون رفته بذارید ولی بعنوان مثال میتونید بصورت زیر عمل کنید:

Dim str As String
str = "1394/11/22"
Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>" & str & ",IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"

saeed28541
جمعه 23 بهمن 1394, 11:05 صبح
ممنون از وقتی که میذارید وعذر خواهی که اطلاعات کم بنده باعث میشه اذیت بشید
ولی سوال بنده این بود میشه برای شرط اختلاف تاریخ از یک تک باکس عدد را بگیریم.بجای strکه شما نوشتید وصل به تک باکس فرم بشه
Diff([date],Shamsi())>forms!tanzim!text0
اینجوری که نوشتم جواب نمیده.؟

e601
جمعه 23 بهمن 1394, 13:37 عصر
ببینید من اون str رو نوشتم تا شما ازش ایده بگیرید. شما نمیتونید عبارت forms!tanzim!text0 رو مستقیما داخل رشتۀ فرمت بندی استفاده کنید چون ویژوال بیسیک اون رو بصورت یکسری حروف در نظر میگیره نه مسیر دسترسی به یک تکست باکس !

شما میتونید به یکی از دو روش زیر عمل کنید:

Dim str As String
str = forms!tanzim!text0
Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>" & str & ",IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"

یا اگر میخواید بصورت مسقیم بذارید باید بصورت زیر باشه:


Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>" & forms!tanzim!text0 & ",IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"

saeed28541
جمعه 23 بهمن 1394, 14:03 عصر
واقعا ممنون از وقتی که صرف میکنید.
هر دو راه را استفاده کردم ولی جواب نداد.
فایل نمونه را میزارم اگر نگاه کنید ممنون میشم.

e601
جمعه 23 بهمن 1394, 14:15 عصر
خواهش میکنم.
ببینید فرم tanzim تا وقتی بسته باشه دسترسی به اشیاء داخلش امکان پذیر نیست. اگر اول فرم tanzim رو باز کنید سپس فرم cell رو، اونوقت میبینید که برنامتون درست کار میکنه.
اینجوری نمیتونید عدد تنظیم کنید. اون عدد 10 از کجا میاد؟ کاربر باید تعیین کنه؟

saeed28541
جمعه 23 بهمن 1394, 14:43 عصر
خیلی ممنون.
بله عدد را تو فرم tanzimکاربر وارد میکنه و فقط زمانی که کاربر فرم را فراخوانی کنه برای تغییرات عدد باز میشه.
نمیدونم چقدر کاری که کردم درسته ولی فرم اصلی را مشترکا به جدول cellو time(جدولی که عدد را در خودش داره)وصل کردم و فیلد s(فیلد عدد) را در فرم اصلی cell وارد کردم که نیازی به باز بودن همیشگی فرم tanzim نباشه.
الان درست کار میکنه.
اگر روشی که بکار بردم اشکال داره ممنون میشم راهنمایی کنید.
باز هم ممنون

e601
جمعه 23 بهمن 1394, 15:02 عصر
اصولی ترین کاری که میتونید بکنید اینه:

1. جدول time شما هیچ وقت نباید بیشتر از یک رکورد داشته باشه بنابراین خصوصیت Allow Additions و Allow Deletions فرم tanzim رو برابر no بذارید تا کاربر فقط بتونه عدد 10 رو تغییر بده و امکان حذف و اضافه کردن رکورد نداشته باشه.

2. شما در نمونه ای که در پست قبل قرار دادید باز هم کدهای فرمت بندی رو در رویداد form_current قرار دادید. در صورتی که در پستهای قبلی خدمتتون عرض کردم که بهتره این کدها رو در رویداد form_load قرار بدید. وقتی در form_current قرار بدید به همون دلیلی که قبلا عرض شد شما شاهد یک پرش و تیک خواهید بود که با بیشتر شدن اطلاعات بیشتر هم خواهد شد. بنابراین باز هم توصیه میکنم کدها رو بصورت زیر استفاده کنید.

3. کدهای زیر رو در رویداد form_load قرار بدید:

Dim days As Integer
days = DFirst("s", "time")
Me.shomare.FormatConditions.Delete
Me.shomare.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>" & days & ",IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
Me.shomare.FormatConditions(0).BackColor = RGB(255, 0, 0)
با ابن کد آخرین عددی که کاربر بعنوان تعداد روز در جدول time تعیین کرده مبنای محاسبه قرار میگیره. چه فرم tanzim باز باشه چه نباشه...

saeed28541
جمعه 23 بهمن 1394, 15:21 عصر
ممنون. و تشکر