ورود

View Full Version : سوال در ارتباط با TXTBTNS



rezakhj
سه شنبه 05 دی 1385, 08:54 صبح
قصد دارم با کلیک روی دکمه ADD از TXTBTNS
دستورات ذیل اجرا شوند کدام متد باید فعال شود
SET ORDER TO TAG SANAD
GO BOTTO
THISFORM.TEXT1.VALUE=SANAD+1

THJISFORM.TXTBTNS.CMDADD.

rezakhj
سه شنبه 05 دی 1385, 10:45 صبح
ممکنه بعضی دوستان بگن چرا از فیلد AUTONUMBER استفاده نمی کنی
جواب : نمیتونم چون این فیلد باید قابلیت افزایش و کاهش دستی را هم داشته باشد
سعی کردم در متد VALID CMDADD TXTBTN دستورات را قرار دادم ولی متوجه شدم که آخرین رکورد را نمایش میدهد

rezaTavak
سه شنبه 05 دی 1385, 13:18 عصر
توی متد click قرار بده و فرموش نکن که DODEFAULT() را هم یکی از دستوراتت باشه.

rezakhj
چهارشنبه 06 دی 1385, 09:22 صبح
ممنون آقای توکل
اولا این dodefault کارش چی هست و کجا از آن استفاده کنم ؟

ضمنا چون متد click - cmdadd- txtbtns از قبل تعریف شده است اگر دستور وارد کنم دستورات پیش فرض عمل نمی کنند باید چکار کنم ؟
آقای توکل حالا که لطف کردید و جواب دادید بذار کامل توضیح دهم شاید راه حل بهتری بنظر شما بیاید .

میخواهم وقتی روی کلید add از txtbtnها کلیک شد یک شماره به آخرین شماره آن فیلد اضافه شود ( شماره دفتر اندیکاتور )
و اگر اپراتور روی آن فیلد رفته شماره ای را بزند اگر موجود بود اطلاعاتش را نشان دهد و اگر نبود یک پیغام مناسب نشان دهد .

rezaTavak
چهارشنبه 06 دی 1385, 10:02 صبح
سلام

dodefault تابعی است که تابع با متد اصلی کلاسی که شی از روی آن ساخته شده را اجرا می کند. راه دیگر هم استفاده از نام کلاس :: و نام تابع یا متد است. اما من برایم بسیار راحتتر است که از این تابع استفاده کنم.

در واقع اگر در یک متد یا تابع یک شی ساخته شده از یک کلاس کد نویسی کنیم این کد نسبت به کد اصلی ارجحیت دارد و اگر بخواهیم متد اصلی در کلاس اجرا شود از این تابع استفاده میکنیم. در سایر زبانهای شی گرا هم همچین حالتی هست مثلا در جاوا super کلید واژه ای است که به کلاس پدر اشاره میکند.

البته من زیاد با :: کار نکرده ام اما میشه با این کار هر متدی را در هر سطحی فرا خواند و گزینه بهتری است اما تا حالا من ازش استفاده نکرده ام.

در مورد کاری که می خواهید انجام دهید هم من واقعا نمیدانم کار شما به چه شکل است اما توضیحات بالا را انجام بدی می تونی به نتیجه برسی

mehran_337
چهارشنبه 06 دی 1385, 10:34 صبح
خب دوست عزیز به همین خاطر آقای توکل گفتند و اصرار داشتند از dodefault ایتفاده کن.
این دستور باعث می شه هم کد شما در متد کلیک اجرا بشه و هم این کلاس کار اصلی خود را که از پیش تعریف شده انجام دهد . یعنی با این دستور دستورات پیش فرض هم اجرا شود
در مقابل nodefault هم داریم یعنی فقط دستورات من را انجام بده و پیش فرض را بیخیال.

rezakhj
دوشنبه 11 دی 1385, 08:20 صبح
ممنون
ولی وقتی این کد را در متد کلیک cmdadd قرار میدم چون کلید cmdadd بعدا کلید save میشود دوبار اجرا میشود یعنی شماره مورد نظر 2 تا اضافه میشود

درحالت اضافه 2 مقدار اضافه میشود
و در حالت ویرایش هم باز مقدار آن یکی اضافه میشود

mehran_337
دوشنبه 11 دی 1385, 08:47 صبح
یه راهش اینه که دیگه ویزارد و بیخیال بشی و خودت عملکرد add و edit را بنویسی و از کلاس آماده استفاده نکنی
راه دوم اینکه کلاسشوباز کنی و همونجا کدهای تولید عدد رو اضافه کنی و save کنی.

البته من راه اول و ترجیح می دم چون تا سر در بیارم کدهایی که خود فاکس تولید کرده الگوریتمش چیه کلی وقتم گرفته می شه.

mehran_337
دوشنبه 11 دی 1385, 08:59 صبح
راستی یادم رفت بگم :
یکی از مزیتهای بانک اطلاعاتی در وی‍ژوال این هست که خیلی از کد نویسی ها رو می شه توی دیتابیس انجام داد (حال اونکه در table این امر ممکن نیست).
مثلا :
جدول مورد نظر را در بانک باز کنید.
روی فیلد مورد نظر (مثلا IdCode) کلید کنید
در سمت راست در بخش Default Value این عبارت را بنویسید :(CreatId(idCode
ان یعنی اینکه در لحضه ای که رکوردی ایجاد شد اتوماتیک تولید کد می شه
حالا می تونی یک فایل prg درست کنید و با نام CreatId اونو ذخیره کنید :


LPARAMETERS cfieldname
LOCAL x1
tbl = DBF()
DIMENSION x1[1]
sdel = SET("Deleted")
SET DELETED OFF
SELECT MAX(EVALUATE(cfieldname)) FROM EVALUATE('tbl') INTO ARRAY x1
SET DELETED &sdel
IF RECCOUNT() = 0 OR isnull(x1)
RETURN 1
ENDIF
RETURN x1+1


دیگه نیازی نیست در فرمت کدی برای تولید کد در یک فیلد بزنی . در ضمن وقتی رکوردی ویرایش بشه کد تغییر نمی کنه
خیلی از فیلدهارو می شه اینطوری کد در بانک نوشت یعنی بجای اینکه مدیریت در فرم کنیم مدیریت در بانک کنیم . هم راحت تره هم از نوشتن کدهای تکراری جلو گیری می شه

rezaTavak
دوشنبه 11 دی 1385, 09:45 صبح
ممنون
ولی وقتی این کد را در متد کلیک cmdadd قرار میدم چون کلید cmdadd بعدا کلید save میشود دوبار اجرا میشود یعنی شماره مورد نظر 2 تا اضافه میشود

درحالت اضافه 2 مقدار اضافه میشود
و در حالت ویرایش هم باز مقدار آن یکی اضافه میشود


توی کلاس txtbtn دو متغیر هست که خیلی بدرد بخور هستند:

addmode
editmode
هر کدام از اینها نشان میدهند در حالت ویرایش یا اضافه هستید. زمانی که دکمه add زده شود دو حالت دارد: اضافه- ذخیره که بعد از زدن اضافه مقدار addmode , editmode برابر .t. می شود. شما در متد خودتان اینگونه کار کنید:



IF THIS.Parent.AddMode
lnRecNo = lnRecno + 1
ENDIF


البته این مثال بود در داخل بلاک if دستورات درست را بنویسید.

همنگونه که آقا مهران عزیز هم گفتند میشه اگر شما یک جدول را به بانک پیوسته اید در قسمت default یک تابع بنویسید که این کار را برای شما انجام دهد. البته دقت کنید هنگامی که با جدول کار میکنید فایل prg آن در مسیرهای قابل جستجوی فاکس باشد (یعنی با set path یا set default و...).

rezakhj
سه شنبه 12 دی 1385, 07:37 صبح
متشکرم آقای توکل خیلی بدردم خورد
سوال
چک کردن گزینه save و revert آیا آنها هم همینطوری هستند
منظورم اینست که چگونه بفهمم اپراتور کدام گزینه را انتخاب کرده save or revert ؟ چون میخواهم اگر save انتخاب کرد یک کارهائی بکنم و اگر revert کارهای دیگری

سوال بعدی
چگونه میتوانم بعد از این که اپراتور در مد add یا edit باشد بدون اینکه save یا revert را انتخاب کند به حالت اول برگردانم ؟
شاید با یک مثال منظورم بهتر بیان کنم
اپراتور ابتدا دکمه add را کلیک میکند و کدی را وارد و در برنامه کد مورد نظر سرچ و پیدا میشود
میخواهم جریان اضافه و ویرایش cancel شود و فقط اپراتور اطلاعات را ببیند یعنی txtbtns با حالت پیش فرض برود

mehran_337
سه شنبه 12 دی 1385, 11:32 صبح
سوال اول

اگر caption اون دکمه save بود (کد مورد نیاز)
thisform.cmdButt.caption

سوال دوم :
در تکست باکی که کد را وارد می کنید این مراحل را اجرا کنید :
1 - جستجو کند اگر مقدار داده شده پیدا شد مرحله 2 را اجرا کند
2 - revert شود (چون اد زده شده و رکوردی ایجاد شده - البته در صورتیکه کل فایل در بافر باشد)
3 - همه تکست باکس ها رفرش شده و سپس غیر فعال شود ( از setall هم می تونی استفاده کنی)

rezaTavak
چهارشنبه 13 دی 1385, 07:37 صبح
سوال اول: اگر editmode در حالت .t. باشد فشردن cmdAdd بعنی save و cmdEdit یعنی revert

سوال دوم: قبل از dedefault چک کن ببین کدت قبلا بوده اگر بلی همان کاری را که می خواهی انجام بده در غیر این صورت dodefault.