PDA

View Full Version : سوال: كارنكردنform_keydown هنگامي كه منو باز است



mahboube
یک شنبه 21 آذر 1389, 12:50 عصر
سلام دوستان
كنترل menustrip به صورتي عمل ميكنه كه وقتي يك از منو هاش باز باشه مثلا يك منواستريپ داريم كه يك منوني File داره حالا وقتي منوي file رو باز ميكنيم.ايونت keydown ديگه براي هيچ قسمتي از فرم(form_keydown يا menu_keydown)اجرا نميشه.راهي هست كه بشه وقتي منو باز هست اين ايونت رو داشت؟؟

mahboube
یک شنبه 21 آذر 1389, 14:02 عصر
بابا يكي يه جواب بده ديگه!!:عصبانی::عصبانی++:
غير از هوك كردن كيبورد راه ديگه اي داره؟؟!!!

mahboube
یک شنبه 21 آذر 1389, 15:28 عصر
اين كد رو يك از دوستان تو تاپيك زير گذاشته:

public class MyClass
{
private const int WM_KEYDOWN = 0x100;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_KEYDOWN)
{
if (m.WParam == (IntPtr)(Keys.LShiftKey))
{

}
elseif (m.WParam == (IntPtr)(Keys.RShiftKey))
{

}
}
base.WndProc(ref m);
}
}

http://barnamenevis.org/showthread.php?132423-برقراري-ارتباط-با-كيبورد!

ولي اجرا نميشه.من توي فرمم مينويسمش.خطي كه قرمزه TRUE نميشه با زدن كليد.

اگه اين درست بشه شايد بشه مشكل بالا رو حل كرد.ممنون.يعني تمامSHORTCUTKEYY هاي منو رو البته به شرطي كه رو بقيه كليداي فرم تاثير نذاره با توبع API تنظيم كرد.

mahboube
یک شنبه 21 آذر 1389, 16:02 عصر
خب الان فهميدم وقتي كنترل هاي ديگه اي رو فرم باشه اين كار نمي كنه!!!!
خب پس به چه دردي مي خوره!!!
كمممممك:عصبانی++:!

hadi-z
یک شنبه 21 آذر 1389, 17:13 عصر
سلام دوستان
كنترل menustrip به صورتي عمل ميكنه كه وقتي يك از منو هاش باز باشه مثلا يك منواستريپ داريم كه يك منوني File داره حالا وقتي منوي file رو باز ميكنيم.ايونت keydown ديگه براي هيچ قسمتي از فرم(form_keydown يا menu_keydown)اجرا نميشه.راهي هست كه بشه وقتي منو باز هست اين ايونت رو داشت؟؟

سلام
این بخاطر اینه که focus میره رو منو
باید دوباره focus رو بذارید رو فرمتون

mahboube
دوشنبه 22 آذر 1389, 08:50 صبح
سلام
این بخاطر اینه که focus میره رو منو
باید دوباره focus رو بذارید رو فرمتون


اصلا اين حرفا نيست.كار نداره فوكوس كجاس!!

mahboube
دوشنبه 22 آذر 1389, 16:30 عصر
من از hook‌كردن استفاده كردم ولي بعضي وقتا اين ارور رو ميده:(مثلا وقتي باتن رو فرم ميزارم)

A callback was made on a garbage collected delegate of type 'key preview!Utilities.globalKeyboardHook+keyboardHookP roc::Invoke'. This may cause application crashes, corruption and data loss. When passing delegates to unmanaged code, they must be kept alive by the managed application until it is guaranteed that they will never be called.

چرا؟؟!!