در اين مقاله به تشريح يک ترفند مي پردازم. جهت سهولت کاربر در فرم هاي ويندوزي معمولا اجازه مي دهيم که کاربر با استفاده از کليد Tab بين کنترل هاي فرم پيمايش نموده و با استفاده از Shift-Tab عمل عکس آن را انجام دهد. جهت سهولت بيشتر کاربران مي توانيم اجازه انجام اين کار را با فشردن کليدهاي Enter و Escape را نيز بدهيم.
يکي از راه هاي انجام اين کار اين است که در رويداد KeyDown مربوط به هر يک از کنترل هاي فرم بررسي کنيم که اگر کليد Enter فشرده شده است بر کنترل بعدي Focus کند و اگر کليد Escape فشرده شده بود بر کنترل قبلي Focus کند.
از جمله مشکلات اين روش اين است که اولا اگر فرم ما داراي کنترل هاي زيادي باشد نياز به کدنويسي براي هر کنترل دارد که عمل زمانگيري است و ثانيا اگر در نحوه چينش کنترل ها تغييري پيش بيايد و يا تعداد کنترل ها کم و يا زياد شود معمولا نياز به تغيير نسبتا زيادي در کدهاي فرم داريم.
در اينجا با روش بسيار ساده و جالبي اين کار را انجام خواهيم داد. اين عمل با استفاده از Override نمودن تابع ProcessDialogKey انجام مي شود.
به قطعه کد زير توجه نماييد.
Protected Overrides Function ProcessDialogKey (ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Enter Then
Return MyBase.ProcessDialogKey(Keys.Tab)
ElseIf keyData = Keys.Escape Then
Return MyBase.ProcessDialogKey(Keys.Shift Or Keys.Tab)
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
|
همانگونه که مشاهده مي نماييد در صورتي که کليدهاي Enter يا Escape فشرده شود، فرمان Enter تبديل به Tab شده و Escape تبديل به Shift-Tab مي شود.
مثال کاربردي اين مقاله از لينک بالاي مقاله قابل دانلود مي باشد.