PDA

View Full Version : سوال: مشخص شدن محل فوکوس



dadsara
دوشنبه 11 خرداد 1388, 10:33 صبح
سلام
در فایل ضمیمه هنگام اجرای فرم1 بازدن کلید F2 فرم 2 باز می شود ، و با زدن کلید F2 و کلیک روی یکی از ردیفهای لیست متن مورد نظر روی text0 قرارگرفته و فرم بسته می شود ، قصد دارم اگر فوکوس روی text0 بود متن بروی آن و اگر فوکوس روی text2 بود همین عملیات برروی text2 انتقال یابد

مهدی قربانی
دوشنبه 11 خرداد 1388, 11:21 صبح
سلام
جناب dadsara كد موجود در On Click ليست باكس موجود در Form2‌ رو به يكي از دو روش زير اصلاح كنيد :
روش اول

Private Sub Text0_Click()
Form_Form1.ActiveControl = Me.Text0.Column(1)
DoCmd.Close
End Sub
براي استفاده از اين روش پيشنهاد مي كنم بجاي استفاده از رخداد Key Downe فرم براي فراخواني فرم 2 از رخداد Key Downe تكست باكسها استفاده كنيد تا اگر احياناً در فرم1 از كنترلهاي ديگه اي استفاده ميشه كه مقاديرشون رو از فرم2 دريافت نمي كنن مشكلي پيش نياد .

روش دوم

Private Sub Text0_Click()

Select Case Form_Form1.ActiveControl.Name

Case "Text0"
Form_Form1.Text0 = Me.Text0.Column(1)

Case "Text1"
Form_Form1.Text1 = Me.Text0.Column(1)

Case "Text2"
Form_Form1.Text2 = Me.Text0.Column(1)

Case Else
Exit Sub

End Select

DoCmd.Close

End Sub
اگر از اين روش بهره بگيريد مهم نيست كه از كدوم رخداد Key Downe استفاده كنيد چون بررسي ميشه و اگر فوكوس روي يكي از سه تكست باكس تعيين شده نباشه عملي انجام نميگيره .

dadsara
دوشنبه 11 خرداد 1388, 14:09 عصر
سلام
ضمن تشکر مجدد از آقای قربانی نمونه اصلاح شده آنرا در ضمیمه قرار می دهم تا اگر دوستان تمایل به استفاده از آن داشته باشند مفید فایده باشد
** اگر برروی Text1 باشیم و کلید F2 را فشار دهیم منبع داده آن Table1 و اگر فوکوس روی Text2 باشد منبع داده آن Table2 خواهد بود **

dadsara
سه شنبه 12 خرداد 1388, 12:37 عصر
سلام
بعد از اجرای مراحل فوق با دو مشکل برخورد کرده ام ، هنگامی که فرم 1 باز است
1- اگر روی Text0 هستم و کلید F2 را فشار می دهم ، منبع داده لیست باکس موجود روی فرم 2 درست است ولی هنگامی که روی text2 هستم گاهی اوقات منبع داده لیست باکس موجود روی فرم 2 تغییر نمی کند
2- وقتی فرم 2 باز می شود برای اولین بار در تکست باکسها مقداری را وارد می کنم در لیست باکس تغییر حاصل نمی شود ولی وقتی لیست را یکبار به دیزاین می برم و مجددا اجرا می کنم درست می شود

مهدی قربانی
سه شنبه 12 خرداد 1388, 15:09 عصر
سلام
فكر مي كنم مشكل مورد نظر شما حل شده باشه البته يه اشكال هم در رخداد Click ليست باكس موجود در فرم Form2 بود كه كد مربوطه رو شما اينطوري نوشته بوديد :

Private Sub List0_Click()
Form_Form1.ActiveControl = Me.Text0.Column(1)
DoCmd.Close
End Sub

و من به اين شكل اصلاحش كردم :

Private Sub List0_Click()
Form_Form1.ActiveControl = Me.List0.Column(1)
DoCmd.Close
End Sub

dadsara
سه شنبه 12 خرداد 1388, 15:22 عصر
سلام
جناب آقای قربانی :
1- متاسفانه همچنان اگر فوکوس روی Text0 یا text2 باشد بعد از زدن کلید F2 منبع داده فرم 2 تغییر نمی کند
2- به چه دلیلی بعد از بازشدن فرم 2 همه رکوردها دیده نمی شود

alirezabahrami
سه شنبه 12 خرداد 1388, 17:24 عصر
سلام
جناب آقای قربانی :
1- متاسفانه همچنان اگر فوکوس روی Text0 یا text2 باشد بعد از زدن کلید F2 منبع داده فرم 2 تغییر نمی کند
2- به چه دلیلی بعد از بازشدن فرم 2 همه رکوردها دیده نمی شود

جناب آقاي دادسرا سلام!
بنده روي نمونه قبلي و اصلاح شده توسط جناب آقاي قرباني ، تغييرات كوچكي بعمل آوردم . نگاه كن ببين تغييري حاصل شده يا نه ؟
موفق باشيد

dadsara
چهارشنبه 13 خرداد 1388, 09:18 صبح
سلام
جناب آقای علیرضا بهرامی ضمن تشکر از جنابعالی ، متاسفانه باید عرض نمایم هر دو مشکل همچنان به قوت خود باقی است و فقط تنها فرقی که کرده نام فیلد فعال از داخل سلکت کیس برداشته می شود
لطفا به نمونه اصلاح شده خودتان که در فایل ضمیمه می باشد یک نگاه بیندازید
** باتوجه به اینکه در فیلدهای از نوع کومبو نمی توان بصورت شناور جستجو کرد لذا هدف من از طراحی این فرم جستجو شناور در فیلدهای از نوع کومبو می باشد **

alirezabahrami
چهارشنبه 13 خرداد 1388, 10:54 صبح
<p>
سلام</p>

<p>جناب آقای قربانی :</p>
<p>1- متاسفانه همچنان اگر فوکوس روی Text0 یا text2 باشد بعد از زدن کلید F2 منبع داده فرم 2 تغییر نمی کند</p>
<p>2- به چه دلیلی بعد از بازشدن فرم 2 همه رکوردها دیده نمی شود</p>
<p>&nbsp;</p>

سلام
جناب آقای علیرضا بهرامی ضمن تشکر از جنابعالی ، متاسفانه باید عرض نمایم هر دو مشکل همچنان به قوت خود باقی است و فقط تنها فرقی که کرده نام فیلد فعال از داخل سلکت کیس برداشته می شود
لطفا به نمونه اصلاح شده خودتان که در فایل ضمیمه می باشد یک نگاه بیندازید
** باتوجه به اینکه در فیلدهای از نوع کومبو نمی توان بصورت شناور جستجو کرد لذا هدف من از طراحی این فرم جستجو شناور در فیلدهای از نوع کومبو می باشد **
با سلام مجدد خدمت جناب آقاي دادسرا

در خصوص مشكل اول كه اشاره كرده ايد :متاسفانه همچنان اگر فوکوس روی Text0 یا text2 باشد بعد از زدن کلید F2 منبع داده فرم 2 تغییر نمی کند</p> ظاهراً در همان نمونه اي كه بنده تغيير داده ام اينكار انجام ميشود يعني در فرم شماره 1 اگر فوکوس روی Text0 باشد و كليد f2 را فشار بدهيد فرم 2 با منبع داده table1 باز ميشود و اگر فوکوس روی Text1 باشد و كليد f2 را فشار بدهيد فرم 2 با منبع داده table2 باز ميشود . و هر دو حالت هم همه ركورد ها در دو منبه داده ديده ميشوند . پس تا اينجا بنظر ميرسد مشكلي وجود نداشته باشد.
اما در خصوص موضوع جستجو در فرم شماره 2 ، بايد عرض كنم كه در پست قبل بنده متوجه منظورتان نشده بودم و بخاطر همين هم روي آن كار نكردم .
علي ايحال در اين مرحله ماژولي كه جهت باز شدن فرم 2 در فرم 1 تغيير داده بوديد مجدداً به همان حالت قبلي برگرداند ه ام .البته در اينجا منبع داد ه ها را بجاي table1 و table2 ، كوئري1 و كوئري2 قرار دادم (جهت تسهيل در امر جستجو ) . و وقتي فرم 2 باز ميشود و در text2 كد مربوطه را وارد ميكنيد عمل فيلتر به طور اتوماتيك روي ليست باكس انجام ميشود و كد مربوطه در صورت موجود بودن نشان داده ميشود .
از آنجائيكه هنوز هم فكر ميكنم خواسته اي كه داشته ايد هنوز برآورده نشده و شايد دليلش هم اين باشد كه بنده بدرستي متوجه منظور شما نشدم ، بررسي كن و درصورت برطرف نشدن مشكل مجدداً مطرح كن تا انشاء الله بيشتر روي آن كار شود .
موفق باشيد

dadsara
چهارشنبه 13 خرداد 1388, 12:23 عصر
سلام
ضمن تشکر مجدد از جناب آقاي بهرامي :
- ماژول نوشته شده کجا کاربرد دارد؟
1- اگر بخواهم منبع داده را به يک کوئري متصل نکنم بلکه بانوشتن سلکت بجاي کوئري عمل نمايم آيا امکان دارد ؟
2- هنگامي که فرم 2 باز است با کليک کردن روي يکي از رديفهاي ليست باکس متن مورد نظر به تکست باکس موجود روي فرم 1 منتقل مي شود . حال اگر اين فرم توسط فرمهاي زيادي فرخواني شود بجاي Form1 در رخداد کليک بايد چه بنويسم

Form_Form1.ActiveControl = Me.List0.Column(1)
بعنوان مثال يک فرم 3 نيز داريم که مي خواهيم همين عمليات را از داخل آن نيز انجام دهيم

dadsara
چهارشنبه 13 خرداد 1388, 12:52 عصر
سلام
من برای اینکه بتوان نام فرم را به فرم2 منتقل کنم به این شکل عمل کردم
1- در یک ماژول یک متغیر تعریف کردم

Public ADD
2- از داخل فرم1 قبل از بازشدن فرم2 نام فرم را انتقال دادم

ADD = "Form_Form1.ActiveControl"
3- هنگام کلیک کردن روی لیست باکس موجود روی فرم2 بجای عبارت
'Form_Form1.ActiveControl = Me.List0.Column(1)
نوشتم

ADD = Me.List0.Column(1)
ولی متاسفانه در اینحالت هیچ مقداری به فرم قبلی پاس نمی شود
فکر می کنم آنجائیکه در ماژول یک متغیر بنام ADD ایجاد کرده ام مشکل باشد(باید نوع آنرا مشخص کنم)

alirezabahrami
چهارشنبه 13 خرداد 1388, 13:47 عصر
1- در یک ماژول یک متغیر تعریف کردم

Public ADD
با سلام

براي براي معرفي كنترل فعال دريك ماژول عمومي از كد زير استفاده شود



Public Function ctl()
Set ctl = Screen.ActiveControl
End Function



و ctl.Name نام كنترل فعال ميباشد .
موفق باشيد

dadsara
چهارشنبه 13 خرداد 1388, 16:45 عصر
سلام
آیا امکان دارد در نمونه اصلاح شده قبلی موارد فوق را اعمال نمائید

مهدی قربانی
شنبه 16 خرداد 1388, 01:38 صبح
سلام
دوست گرامي جناب dadsara اين نمونه رو هم بررسي كنيد .

dadsara
شنبه 16 خرداد 1388, 08:34 صبح
سلام
ضمن تشکر از جناب آقای قربانی به استحضار جنابعالی می رسانم قبلا موردی را جناب آقای بهرامی زحمت کشیده بودند که تقریبا شبیه همین چیزی بود که جنابعالی لطف کردید و بنده نیز ابهامات خود را در پست شماره 10 همین تاپیک عرض نمودم که متاسفانه در نمونه جنابعالی نیز همانگونه می باشد
همچنین هدف خود را نیز از طراحی این فرم در پست شماره 8 نیز اعلام کرده بود

** باتوجه به اینکه در فیلدهای از نوع کومبو نمی توان بصورت شناور جستجو کرد لذا هدف من از طراحی این فرم جستجو شناور در فیلدهای از نوع کومبو می باشد **

مهدی قربانی
شنبه 16 خرداد 1388, 11:16 صبح
سلام
عذر خواهي ميكنم دقت نكرده بودم ، فكر مي كنم در اين نمونه موارد مورد نظر شما پياده شد باشه .