PDA

View Full Version : رویداد ADOTable1AfterScroll نوشتم که وقتی DynamicForm فعال باشد و



ali_abbasi22145
جمعه 28 اردیبهشت 1386, 09:46 صبح
سلام
من کد زیر را در رویداد ADOTable1AfterScroll نوشتم که وقتی DynamicForm فعال باشد و
روی هر رکورد، فیلد confirm_of_expert مقدارش یک باشد آنوقت چک باکس مربوط به آن یعنی confirm_of_expert_DBCheckBox غیرفعال شود

if ( (MainForm.ADOTable1.FieldByName('confirm_of_expert ').AsString = '1') and (DynamicForm.Showing) )then
DynamicForm.confirm_of_expert_DBCheckBox.Enabled := False ;
البته به جای DynamicForm.Showing حالت DynamicForm.active را هم تست کردم که هنگام اجرا با خطای خطای شکل زیر برخورد می کنم.

vcldeveloper
یک شنبه 30 اردیبهشت 1386, 02:15 صبح
مطمئن هستید که در زمان اجرای این دستور، DynamicForm ساخته شده؟

SYNDROME
یک شنبه 30 اردیبهشت 1386, 05:53 صبح
با سلام

سلام
البته به جای DynamicForm.Showing حالت DynamicForm.active را هم تست کردم که هنگام اجرا با خطای خطای شکل زیر برخورد می کنم.
تا زمانی که فرم تو Create نشود نمی توانی هیچ کدام از دستورات بالا را اجرا کنی.
احتمالا فرم Create نشده و تو می خواهی با دستور Active و Showing استفاده کنی و دقت کنی چیزی وجود ندارد(فرم وجود ندارد)که تو می خواهی دستورات بالا را اجرا کنی.پس Error مربوط به Access Volation کامل طبیعی.
تو برای اینکه بتوانی بفهمی فرمی ایجاد شده یا نه می توانی از همان ADO که استفاده می کنی بفهمی.
چطور؟
یکی از روشها این است که :
به صورت معمولی ADO.Tag =0 می باشد.
شما AFterScroll مربوط به فرم دستور زیر را بنویسید.


IF ADO,Tag = 1 Then
Begin
نوشتن دستوراتی که قبلا نوشته ای.
End;

حالا در زمان Crerate یا Show فرمت مقدار ADO.Tag = 1 قرار بده.
و در زمانی که فزم Close شده برابر ADO.tag = 0 بده.
حالا هر وقت ADO.Tag = 1 باشد یعنی فرم تو وجود دارد و می توانی از آن استفاده کنی.
نکته : البته به جای ADO.Tag می توانی از یک متغییر مهمولی نیز استفاده کنی.


Var
CreateForm : Boolean;

ali_abbasi22145
یک شنبه 30 اردیبهشت 1386, 11:25 صبح
سلام
یک datasource2 در فرم DynamicForm گذاشتم و لینک کردم به فیلدهای datasource1 قبلی و
در ondatachange آن کدهای قبلی را نوشتم و مشکل حل شد.