ورود

View Full Version : COMBO BOX راهنمایی



IC_prog
سه شنبه 06 شهریور 1386, 09:13 صبح
چگونه میتوان با استفاده از dimensionدر یک فرم هر بار تعداد رکوردهای خاصی از یک dbf را در combo box نمایش داد .
من بار اول وقتی تعداد رکوردها را درdimension مشخص میکنم در دفعات بعد تعداد آن را نمیتوان تغییر دهم . لطفا راهنمایی کنید ایراد کار من در کجاست؟

rahro
سه شنبه 06 شهریور 1386, 13:33 عصر
چگونه میتوان با استفاده از dimensionدر یک فرم هر بار تعداد رکوردهای خاصی از یک dbf را در combo box نمایش داد .
من بار اول وقتی تعداد رکوردها را درdimension مشخص میکنم در دفعات بعد تعداد آن را نمیتوان تغییر دهم . لطفا راهنمایی کنید ایراد کار من در کجاست؟
سلام
ببین دوست عزیز من خودم هنوز مبتدی هستم ولی انچه که تا حالا از دوستان آموختم وهمان ایرادات رو تو برنامه شما دیدم بهتون گوشزد میکنم شاید بدردتان بخورد.
1- بهتره از public برای تعریف متغیر عمومی در فرمتان استفاده نکنید و از یک property استفاده کنی . روش کارش هم ساده است از گزینه فرم new property رو انتخاب میکنی و نام متغیر خودتو بهش میدی و مقدارش پیش فرضش رو بعد هم بوسیله thisform.propertyname صداش میزنی که propertyname نام اختصاصی شماست
2 - بهتره جداول خود را در data envionment باز کنی و از این شکل باز کردن جداول خود داری کنی
3 - برای راه حل مکشل شما پیشنهاد میشه باز استفاده از sql اطلاعات خود رو تو یک آرایه بریز بعد اون آرایه رو تو کامبوباکس. به عنوان مثال


SELECT test1.nno FROM test1 WHERE test1.nno=='b' INTO ARRAY pp1
IF _tally > 0
FOR i = 1 TO _tally
thisform.combo1.AddItem(ALLTRIM(pp1[i]))
ENDFOR
ELSE
.....
return(.f.)
ENDIF


موفق باشی .

IC_prog
سه شنبه 06 شهریور 1386, 15:06 عصر
با تشکر از راهنماییتون.
[quote=rahro;387113]سلام
1- بهتره از public برای تعریف متغیر عمومی در فرمتان استفاده نکنید و از یک property استفاده کنی . روش کارش هم ساده است از گزینه فرم new property رو انتخاب میکنی و نام متغیر خودتو بهش میدی و مقدارش پیش فرضش رو بعد هم بوسیله thisform.propertyname صداش میزنی که propertyname نام اختصاصی شماست
ببخشید ولی این new property کجاست؟:خجالت:

rahro
جمعه 09 شهریور 1386, 19:34 عصر
با تشکر از راهنماییتون.
[quote=rahro;387113]سلام
1- بهتره از public برای تعریف متغیر عمومی در فرمتان استفاده نکنید و از یک property استفاده کنی . روش کارش هم ساده است از گزینه فرم new property رو انتخاب میکنی و نام متغیر خودتو بهش میدی و مقدارش پیش فرضش رو بعد هم بوسیله thisform.propertyname صداش میزنی که propertyname نام اختصاصی شماست
ببخشید ولی این new property کجاست؟:خجالت:
سلام
موقعی که فرمتان را باز میکنی میتونی از کشوی form اون رو پیدا کنی :بامزه:

IC_prog
یک شنبه 11 شهریور 1386, 09:43 صبح
:عصبانی:ببخشید منظور شما از new property آیا همان ADDPROPRTY است ؟

rezaTavak
یک شنبه 11 شهریور 1386, 10:46 صبح
نه دوست عزیز دقیقا همان new property است.


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



laArrayCombobox[1000]

addproperty یک متد است که در حین اجرای برنامه کاربرد دارد. نه در موقع طراحی.

ضمنا توضیحات جناب rahro کامل خوب بودند. اما توصیه من :



Local lnPreSelect
lnPreSelect = SELECT(0)
SELECT dDesc from test1 WHERE nNo="a" INTO ARRAY THISFORM.laArrayCombobox
SELECT lnPreSelect
WITH THISFORM.Combobox1
.RowSource = THISFORM.laArrayCombobox

.RowSourceType=5
.RowSource=ALEN( THISFORM.laArrayCombobox,1)
.Refresh
ENDWITH

rezaTavak
یک شنبه 11 شهریور 1386, 11:20 صبح
اضافه کردن از طریق برنامه نویسی:


thisform.AddProperty("laArrayCombobox[1000]")

IC_prog
یک شنبه 11 شهریور 1386, 15:03 عصر
با تشکر .آقا رضا من کد شمارو استفاده کردم ولی پیغام زیر را دریافت کردم :
LAARRAYCOMBOBOX IS NOT AN ARRAY
در ضمن در فرم چرا نباید از public برای تعریف متغیرهای فرم استفاده کرد؟ آیا بخاطر عدم تداخل با متغیرهای همنام موجود در دیگر فرمهای فعال است ؟ یا دلیل دیگری دارد

rezaTavak
دوشنبه 12 شهریور 1386, 07:44 صبح
کنترل متغیرها در برنامه و عدم رونویسی و...

دقیقا همانی که ذکر کردید.

ببین بعد از تعریف آرایه یک property جدید با همان نام و بصورت laArrayCombobox[1000] باید اضافه شده باشد اگر نشده از کد پست شماره ۷ نیز می توانید دز متد load فرم برای تعریف این مشخه استفاده کنید.

IC_prog
دوشنبه 12 شهریور 1386, 08:12 صبح
با تشکر از راهنماییهای ارزشمندتون .
نوع متغیر character/numeric/date,... در new property چگونه تعریف میشود . چگونه ماهیت آنها مشخص میشود؟
آیا در این روش با بسته شدن فرم متغیرهای فرم اتوماتیک از حافظه پاک میشود یا باید release شود؟
ببخشید که زیاد سئول میکنم اما من تا حالا همیشه از public برای تعریف متغیرهای فرم
استفاده میکردم و البته مشکلی هم نداشتم ولی مایلم اگر بشه از این روش استفاده کنم .
باز هم ممنون.
در ضمن هنوز مشکل من حل نشده . من میخوام هر بار محتویات combobox را صفر کرده و مقادیر جدیدی را نمایش دهم . چگونه میتوان محتویات combobox را صفر کرد.

rezaTavak
دوشنبه 12 شهریور 1386, 08:24 صبح
متغیر کلا در فاکس با مقداری که حمل می کند مشخص می شود. و مانند زبانهای حرفه‌ای لازم نیست نوع قبلا تعریف شود. با تابع type نوع متغیر را مشخص می کنیم.

بله همه متغیرها محلی و جزئی از فرم هستند که خود فرم هم یک object است. یک object با پاک شدن تمام چیزهایش پاک می‌شود اصلا اساس برنامه نویسی object هم همین هست. در واقع این متغیر یکی از عناصر فرم است.


استفاده از متغیر public کار را پیجیده میکند. مثلا اگر کاربر دو بار فرم شما را اجرا کرد؟؟؟ و... تداخل گریز ناپذیر خواهد بود و صد البته اشتباهات بیشتر.

IC_prog
دوشنبه 12 شهریور 1386, 09:07 صبح
وقتی با public کار میکردم نوع متغیرها رو تعریف میکردم و بر همین اساس مثلا در یک textbox مشخص میکردم که مثلا ورودی عددی است و کارکتر قبول نکند .
ولی در حالتی که متغیر با new proprty تعریف میشود و این متغیر به یک textbox نسبت داده میشود چگونه کاربر متوجه شود که باید فقط عدد وارد کند چون وقتی ماهیت متغیر مشخص
نیست هر چیزی میتواند وارد کند.

rahro
دوشنبه 12 شهریور 1386, 11:30 صبح
وقتی با public کار میکردم نوع متغیرها رو تعریف میکردم و بر همین اساس مثلا در یک textbox مشخص میکردم که مثلا ورودی عددی است و کارکتر قبول نکند .
ولی در حالتی که متغیر با new proprty تعریف میشود و این متغیر به یک textbox نسبت داده میشود چگونه کاربر متوجه شود که باید فقط عدد وارد کند چون وقتی ماهیت متغیر مشخص
نیست هر چیزی میتواند وارد کند.
من که متوجه نشدم !؟ اصلا این نوع تعریف چه ربطی به textbox میتونه داشته باشه!؟؟ شما در textbox خیلی راحت میتونید مقدار value تغییر بدید در این new proprty هم شما میتونید حالت پیش فرض رو تغییر بدید حالا مشکلتان کجاست؟!؟؟:متفکر:

IC_prog
دوشنبه 12 شهریور 1386, 11:54 صبح
تشکر از شما.
هنوز مشکل من حل نشده .چطور میتونم هربار مقادیر مربوط به combobox را صفر کرده و مقادیر جدید بدهم .
در حالتی که فرم و اشیاء آن فعال هست میخوام هر بار تعدادی از رکوردها را به combobox بدهم بطوری که مقادیر قبلی پاک شده و مقادیر جدید نمایش داده شود

rezaTavak
دوشنبه 12 شهریور 1386, 13:26 عصر
دوست عزیز لازم نیست شما کاری انجام بدهید.

همان کدی که نوشتم کار را انجام می دهد. یعنی اگر RowSource یک Array باشد خودش قاعدتا درست عمل می‌کند.


اما با کد:



THISFORM.Combobox1.Clear


محتویات Combobox پاک می‌شود.