PDA

View Full Version : سوال: برگرداندن فوکوس به مکان قبلی



Shahramdindoust
سه شنبه 04 آذر 1399, 13:16 عصر
فایلی دارم که تو رویداد keydown تکست باکس های اون setfocusبه تکست باکس روبرو میره و بعد لازمه که دوباره برگرده اونجایی که بود یعنی از تکست 1 میره روی تکست دو یا از روی تکست 3 میره روی تکست 4 و..
حالا لازمه که دوباره بره جای قبلی. یعنی اگر فوکوس روی تکست دو بود با دکمه برگرده جای قبلی که تکست 1 میشه و اگر روی تکست 4 بود برگرده روی تکست 3
متاسفانه توضیح دهنده ی خوبی نیستم بنابراین یه فایل ساده ساختم که امیدوارم سرتون رو به درد نیاره
ممنون

eb_1345
سه شنبه 04 آذر 1399, 14:32 عصر
فایلی دارم که تو رویداد keydown تکست باکس های اون setfocusبه تکست باکس روبرو میره و بعد لازمه که دوباره برگرده اونجایی که بود یعنی از تکست 1 میره روی تکست دو یا از روی تکست 3 میره روی تکست 4 و..
حالا لازمه که دوباره بره جای قبلی. یعنی اگر فوکوس روی تکست دو بود با دکمه برگرده جای قبلی که تکست 1 میشه و اگر روی تکست 4 بود برگرده روی تکست 3
متاسفانه توضیح دهنده ی خوبی نیستم بنابراین یه فایل ساده ساختم که امیدوارم سرتون رو به درد نیاره
ممنون
دو سوال :
1- آیا غیر از این تعداد تکست باکس ، قرار است تکست باکس یا تکست باکس های دیگری هم بر روی این فرم وجود داشته باشد ؟
2- آیا میخواهید حتماً از کمند باتن که فوکوس پذیر است برای اینکار استفاده کنید یا نه بجای کمند باتن هم میتوانید از یک کنترلی دیگرمثل یک ایمیج که فوکوس پذیر نیست استفاده کنید.

padide55
سه شنبه 04 آذر 1399, 14:58 عصر
دو سوال :
1- آیا غیر از این تعداد تکست باکس ، قرار است تکست باکس یا تکست باکس های دیگری هم بر روی این فرم وجود داشته باشد ؟
2- آیا میخواهید حتماً از کمند باتن که فوکوس پذیر است برای اینکار استفاده کنید یا نه بجای کمند باتن هم میتوانید از یک کنترلی دیگرمثل یک ایمیج که فوکوس پذیر نیست استفاده کنید.

سلام
به نظرم باید به طریقی اخرین فوکوس ذخیره بشه که با کلیک دوباره برگرده .
نممونه ابتدایی بنده رو ببینید.

eb_1345
سه شنبه 04 آذر 1399, 16:30 عصر
سلام
به نظرم باید به طریقی اخرین فوکوس ذخیره بشه که با کلیک دوباره برگرده .
نممونه ابتدایی بنده رو ببینید.

سلام
فکر کنم منظور ایشان فوکوس بر روی تکست باکس قبلیست .مثلاً اگر الآن فوکوس بر روی تکست باکس 20 است با کلیک بر روی کمند باتن فوکوس به تکست باکس 19 منتقل شود .

Shahramdindoust
سه شنبه 04 آذر 1399, 16:47 عصر
سلام
فکر کنم منظور ایشان فوکوس بر روی تکست باکس قبلیست .مثلاً اگر الآن فوکوس بر روی تکست باکس 20 است با کلیک بر روی کمند باتن فوکوس به تکست باکس 19 منتقل شود .
ذقیقا همینطوره

Shahramdindoust
سه شنبه 04 آذر 1399, 16:48 عصر
سلام
به نظرم باید به طریقی اخرین فوکوس ذخیره بشه که با کلیک دوباره برگرده .
نممونه ابتدایی بنده رو ببینید.

بله همینه
فقط ببخشید رویداد exit که استفاده کردین مثل lost focus هست؟ یا تفاوت داره؟

eb_1345
سه شنبه 04 آذر 1399, 16:50 عصر
حالا چرا برای انتقال فوکوس به تکست باکس بعدی از رویداد KeyDown هر تکست باکس استفاده کرده اید ؟ مگر قرارنیست در این تکست باکس ها چیزی تایپ کنید ؟ در ایصورت اگر بخواهید در تکست باکس حرف یا کلمه ای درج کنیدفوکوس به تکست باکس بعدی منتقل میشود بدون اینکه موفق به درج حرف یا کلمه ای شوید . با مرتب کردن شماره اندیس تکست باکس ها و با استفاده از کلید اینتر یا تب هم میتوانید اینکار رو انجام بدهید.

Shahramdindoust
سه شنبه 04 آذر 1399, 16:51 عصر
دو سوال :
1- آیا غیر از این تعداد تکست باکس ، قرار است تکست باکس یا تکست باکس های دیگری هم بر روی این فرم وجود داشته باشد ؟
2- آیا میخواهید حتماً از کمند باتن که فوکوس پذیر است برای اینکار استفاده کنید یا نه بجای کمند باتن هم میتوانید از یک کنترلی دیگرمثل یک ایمیج که فوکوس پذیر نیست استفاده کنید.
بله تعداد تکست باکس ها بالاست ایمیج هم والا بلد نیستم

Shahramdindoust
سه شنبه 04 آذر 1399, 16:54 عصر
حالا چرا برای انتقال فوکوس به تکست باکس بعدی از رویداد KeyDown هر تکست باکس استفاده کرده اید ؟ مگر قرارنیست در این تکست باکس ها چیزی تایپ کنید ؟ در ایصورت اگر بخواهید در تکست باکس حرف یا کلمه ای درج کنیدفوکوس به تکست باکس بعدی منتقل میشود بدون اینکه موفق به درج حرف یا کلمه ای شوید . با مرتب کردن شماره اندیس تکست باکس ها و با استفاده از کلید اینتر یا تب هم میتوانید اینکار رو انجام بدهید.
اخه اون جه که توی تکست باکس ها تایپ میشه مهم نیست و قرار هم نیست ذخیره بشه

padide55
سه شنبه 04 آذر 1399, 16:55 عصر
جالب شد
دارید با اکسس گیم درست میکنید؟
حرکت اشیا و حالا ...!!!

میشه از کد


SendKeys {up}


استفاده کنید و در رویداد keypressکد بگذارید برای هر فیلد که مثلا با زدن کلید home به فیلد قبلی بره ؟
اینجوری دیگه باتن هم نمیخواد .
یا یک عکس یا همون ایمیج در صفحه بگذارید و در رویداد کلیک اون همین کد رو بنویسید .

Shahramdindoust
سه شنبه 04 آذر 1399, 16:57 عصر
padide55 (https://barnamenevis.org/member.php?263869-padide55) تقریبا مشکل من رو حل کرد فقط یه سوال

فقط ببخشید رویداد exit که استفاده شده مثل lost focus هست؟ یا تفاوت داره؟

در ضمن من از این کد روی دکمه استفاده نمیکنم توی رویداد مورد نظر که اتفاقا اون هم keydown هست

eb_1345
سه شنبه 04 آذر 1399, 16:57 عصر
ذقیقا همینطوره


بله همینه
فقط ببخشید رویداد exit که استفاده کردین مثل lost focus هست؟ یا تفاوت داره؟

توضیحات پست 5 و 6 با هم فرق می کنه ولی هر دو رو تائید کرده ای:قهقهه:
بالاخره کدام یکی مد نظرته ؟ برگشت به فوکوس ماقل آخر یا فوکوس به تکست باکس قبلی ؟

Shahramdindoust
سه شنبه 04 آذر 1399, 17:00 عصر
توضیحات پست 5 و 6 با هم فرق می کنه ولی هر دو رو تائید کرده ای:قهقهه:
بالاخره کدام یکی مد نظرته ؟ برگشت به فوکوس ماقل آخر یا فوکوس به تکست باکس قبلی ؟
بعبارتی میخام به فوکوس بگم برو همون جایی که از اونجا اومدی :لبخند:(آخرین جایی که قبل از حالا اونجا بوده)
فقط نمیدونم چرا هیشکی رویداد اگزیت و فرقش با لاست فوکوس رو توضیح نمیده

eb_1345
سه شنبه 04 آذر 1399, 17:02 عصر
چند راه وجود داره ، ولی نباید فراموش کنید که همیشه ساده ترین کار رو که که نیاز به کد نویسی کمتری داره انجام بدهید .

Shahramdindoust
سه شنبه 04 آذر 1399, 17:06 عصر
جالب شد
دارید با اکسس گیم درست میکنید؟
حرکت اشیا و حالا ...!!!

میشه از کد


SendKeys {up}


استفاده کنید و در رویداد keypressکد بگذارید برای هر فیلد که مثلا با زدن کلید home به فیلد قبلی بره ؟
اینجوری دیگه باتن هم نمیخواد .
یا یک عکس یا همون ایمیج در صفحه بگذارید و در رویداد کلیک اون همین کد رو بنویسید .
نه بابا :لبخند: شما درباره رویداد exit برام بگو بی زحمت

Shahramdindoust
سه شنبه 04 آذر 1399, 17:07 عصر
چند راه وجود داره ، ولی نباید فراموش کنید که همیشه ساده ترین کار رو که که نیاز به کد نویسی کمتری داره انجام بدهید .

بله استاد همینطوره

Shahramdindoust
سه شنبه 04 آذر 1399, 17:10 عصر
اگر جسارت نیست یک سوالی هم در تالار با عنوان محدودیت اکسس پرسیدم افتخار دادین یه سری بزنین ممنون

padide55
سه شنبه 04 آذر 1399, 17:13 عصر
نه بابا :لبخند: شما درباره رویداد exit برام بگو بی زحمت

Open a form and change data in a control:

Current (form) arrow Enter (control) arrow GotFocus (control) arrow BeforeUpdate (control) arrow AfterUpdate (control)

Move the focus to another control:

Exit (control1) arrow LostFocus (control1) arrow Enter (control2) arrow GotFocus (control2)

Move the focus to another record:

BeforeUpdate (form) arrow AfterUpdate (form) arrow Exit (control2) arrow LostFocus (control2) arrow Current (form)

اینجا نگاه کن (https://support.microsoft.com/en-us/office/order-of-events-for-database-objects-e76fbbfe-6180-4a52-8787-ce86553682f9)

eb_1345
سه شنبه 04 آذر 1399, 17:17 عصر
نه بابا :لبخند: شما درباره رویداد exit برام بگو بی زحمت

این موضوع رو در یک تاپیک جدید مطرح کن !

Shahramdindoust
سه شنبه 04 آذر 1399, 17:18 عصر
Open a form and change data in a control:

Current (form) arrow Enter (control) arrow GotFocus (control) arrow BeforeUpdate (control) arrow AfterUpdate (control)

Move the focus to another control:

Exit (control1) arrow LostFocus (control1) arrow Enter (control2) arrow GotFocus (control2)

Move the focus to another record:

BeforeUpdate (form) arrow AfterUpdate (form) arrow Exit (control2) arrow LostFocus (control2) arrow Current (form)

اینجا نگاه کن (https://support.microsoft.com/en-us/office/order-of-events-for-database-objects-e76fbbfe-6180-4a52-8787-ce86553682f9)
پس ترتیب اتفاقات اینجوریه
Exit (control) https://support.content.office.net/en-us/media/856ee832-075a-4dae-9bb4-ede3be5fa81e.gif LostFocus (control) https://support.content.office.net/en-us/media/856ee832-075a-4dae-9bb4-ede3be5fa81e.gif Unload (form) https://support.content.office.net/en-us/media/856ee832-075a-4dae-9bb4-ede3be5fa81e.gif Deactivate (form) https://support.content.office.net/en-us/media/856ee832-075a-4dae-9bb4-ede3be5fa81e.gif Close (form)

eb_1345
سه شنبه 04 آذر 1399, 17:20 عصر
بالاخره نفهمیدیم میخواهی چیکار کنی :متفکر::لبخندساده:

padide55
سه شنبه 04 آذر 1399, 17:21 عصر
این موضوع رو در یک تاپیک جدید مطرح کن !

سلام
لطف کنید چون اشراف دارید بصورت پست اموزشی با تشریح فارسی ایجاد کنید .ممنون میشیم .

Shahramdindoust
سه شنبه 04 آذر 1399, 17:25 عصر
بالاخره نفهمیدیم میخواهی چیکار کنی :متفکر::لبخندساده:

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

eb_1345
سه شنبه 04 آذر 1399, 19:44 عصر
سلام
لطف کنید چون اشراف دارید بصورت پست اموزشی با تشریح فارسی ایجاد کنید .ممنون میشیم .
مطلب خاصی نداره
رویداد Exit قبل از رویداد LostFocus رخ می دهد.
رویداد LostFocus زمانی فراخوانی می شود که یک کنترل در حال از دست دادن فکوس است (زمانی که فرمان انتقال فکوس صادر شده) و Exit زمانی که کنترل بعدی فکوس را گرفته فراخوانی می شود.
به بیانی ساده تر رویداد Exit فقط زمانی رخ می دهد که روی کنترل دیگری روی فرم کلیک کنید.
Exit توانایی لغو تغییر فوکوس رو داره ولی LostFocus این کار رو نمتواند انجام دهد . اگر دقت کرده باشید رویداد Exit بصورت Exit(Cancel As Integer) است . و همین آرگومان Cancel باعث لغو انتقال فوکوس به کنترل دیگر میشود.به کد زیر توجه بفرما :


Private Sub LastName_Exit(Cancel As Integer)
If IsNull(LastName) Or LastName = "" Then
Cancel = True
End If
End Sub

کد فوق به ما میگه اگر فیلد LastName خالی بود عمل خارج شدن انجام نشود
پس اگر کد ما بر تغییر فوکوس تأثیر نمی گذاره ، میتوانیم از LostFocus استفاده کنیم.
بنابراین استفاده از رویدادهای Exit یا LostFocus بستگی به کاری که قرار است انجام بدهیم داره

padide55
سه شنبه 04 آذر 1399, 20:04 عصر
سوال
چه کدی و‌چه رویدادی بنویسیم که عملکرد اینتر و تب. برعکس عمل کنه . در مثال اصلی .بدون باتن
مثلا
sendkey {up}

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

eb_1345
سه شنبه 04 آذر 1399, 20:37 عصر
سوال
چه کدی و‌چه رویدادی بنویسیم که عملکرد اینتر و تب. برعکس عمل کنه . در مثال اصلی .بدون باتن
مثلا
sendkey {up}

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

........................................

padide55
سه شنبه 04 آذر 1399, 21:12 عصر
جدا سوال کردم .
اگر میدونستم که از اول همون کار رو پیشنهاد میدادم .
کد که همینه ؟
رویدادش
on current فرم‌خوبه یا جای دیگه ؟

eb_1345
سه شنبه 04 آذر 1399, 21:23 عصر
جدا سوال کردم .
اگر میدونستم که از اول همون کار رو پیشنهاد میدادم .
کد که همینه ؟
رویدادش
on current فرم‌خوبه یا جای دیگه ؟
کد رو بصورت زیر تغییر دادم . تست نکردم
الآن عجله دارم جائی باید بروم
شما امتحان کنید ایراد داشت اگه امکان داشت بعداً رفعش می کنم



Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
KeyCode = 37
End If
End Sub

padide55
سه شنبه 04 آذر 1399, 21:27 عصر
سلام
ممنون
اینو میخواستم
Form_KeyDown

Shahramdindoust
چهارشنبه 05 آذر 1399, 11:54 صبح
یک سوال
در جایی خواندم که برای غیرفال کردن کلید اینتر در فرم باید از کد
me.Application.SetOption "move after enter", 0
استفاده کرد اما برای غیر فعال کردن tab هیچ کدی پیدا نکردم

eb_1345
چهارشنبه 05 آذر 1399, 12:13 عصر
یک سوال
در جایی خواندم که برای غیرفال کردن کلید اینتر در فرم باید از کد
me.Application.SetOption "move after enter", 0
استفاده کرد اما برای غیر فعال کردن tab هیچ کدی پیدا نکردم


کد رو در پست های قبلی قرار داده بودم


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
KeyCode = 0
End If
End Sub

کد اسکی اینتر 13 و تب هم 9 است
فقط یادت باشه برای اینکه این کد کار کنه key preview فرم باید در حالت yes باشه

Shahramdindoust
چهارشنبه 05 آذر 1399, 12:27 عصر
کد رو در پست های قبلی قرار داده بودم


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
KeyCode = 0
End If
End Sub

کد اسکی اینتر 13 و تب هم 9 است
فقط یادت باشه برای اینکه این کد کار کنه key preview فرم باید در حالت yes باشه
آقا اجازه؟
این کد فقط تب و اینتر رو تو یکی از فرم ها غیرفعال میکنه اون کدی که من بالا نوشتم اینتر رو تو کل فایل غیر فعال میکنه توی تک تک فرم ها نمیشه خیلی وقت میگیره اینو کپی کنم
البته من همچین بلایی سر کد آوردم جواب نداد

me.Application.SetOption "move after tab", 0
البته از خودم در آوردم:لبخند:

eb_1345
چهارشنبه 05 آذر 1399, 14:51 عصر
آقا اجازه؟
این کد فقط تب و اینتر رو تو یکی از فرم ها غیرفعال میکنه اون کدی که من بالا نوشتم اینتر رو تو کل فایل غیر فعال میکنه توی تک تک فرم ها نمیشه خیلی وقت میگیره اینو کپی کنم
البته من همچین بلایی سر کد آوردم جواب نداد

me.Application.SetOption "move after tab", 0
البته از خودم در آوردم
:لبخند:


با کد فوق یکی از گزینه های حرکت کرسر بعد از اینتر کردن انتخاب میشود .
درج 0 در کد فوق یعنی عدم جابجائی و نقل مکان ، عدد 1 یعنی انتقال کرسر به فیلد بعدی و عدد 3 هم یعنی انتقال کرسر به رکورد بعدی

Shahramdindoust
چهارشنبه 05 آذر 1399, 17:32 عصر
اخه میدونید مشکل چیه؟ کاربر که نمیتونه خودش بره غیر فعال کنه چون ریبون ها رو میخام مخفی کنم. و همچنین این تصویر که حضرتعالی نشون دادین جزو تنظیمات CURRENT DATABASE نیست و توی فایل ذخیره نمیشه جزو تنظیماتGENERAL اکسس هست یعنی در کل برنامه هایی که با اکسس ساخته اید دیگه اینتر غیرفعال میشه(اون هم فقط روی کامپیوتر شما نه کتمپیوتر مقصد یا کاربرظ) ولی با کد میشه روی دکمه "خروج از برنامه" دوباره اون رو مساوی 1 قرار داد که کل اکسس اینتر رو از دست نده چون شاید تو یه برنامه دیگه(که اونم اکسس هست) اینتر رو لازم داشته باشه...

اما برای TAB چیکار کنم؟
1

Shahramdindoust
شنبه 08 آذر 1399, 00:27 صبح
.....................