كيف يعمل الرمز الخاص بي عندما أستخدم رسالة message.show () بينهما، ولا يعمل بدونها؟

StackOverflow https://stackoverflow.com/questions/909465

  •  05-09-2019
  •  | 
  •  

سؤال

أنا جزء لا يتجزأ من WebBrowser .NET في نموذج يحتوي على بعض الأزرار الأخرى.

التطبيق الذي أتطور لا يستخدم لوحة مفاتيح، ولكنه يستخدم شاشة تعمل باللمس. لذلك فعلا تستخدم الماوس فقط. للتمرير WebBrowser لأسفل، قمت بإجراء اثنين من الأزرار المخصصة. عندما أضغط على تلك الأزرار، يجب أن ترسل سكتة دماغية رئيسية "pagedown" إلى المتصفح، وينبغي أن يتحرك المتصفح لأسفل.

لذلك رمز الحدث النقر هو كما يلي:

        theForm.Activate();
        Application.DoEvents();
        theBrowser.Focus();
        Application.DoEvents();
        SendKeys.Send(key);

حيث "Theyform" هو النموذج و "TheBrowser" هو مثيل المتصفح.

لذلك عندما انقر فوق الزر، لا يحدث شيء. عندما أضغط أولا على المتصفح، ثم انقر فوق الزر، فإنه يعمل. لكن أنا أعطيه التركيز بشكل صحيح؟ وأعطيت تطبيق مساحة كافية لتعيين التركيز؟

ولكن الآن ما أعتقد أنه غريب. عندما أضع MessageBox.Show ("Hello")؛ في التعليمات البرمجية، مثل هذا:

    theForm.Activate();
    Application.DoEvents();
    theBrowser.Focus();
    MessageBox.Show("HELLO");
    Application.DoEvents();
    SendKeys.Send(key);

... إنه يعمل بشكل مباشر عند النقر فوق الزر.

 

إذن السؤال هو: لماذا لا يعمل هذا الرمز عند مغادرته رسالة MessageBox.Show ()، ولكن عند استخدام MessageBox.Show ()؟

آمل أن تتمكن من المساعدة، شكرا مقدما ...

هل كانت مفيدة؟

المحلول

بالنسبة لي هذا يبدو وكأنه الطريقة الخاطئة لتسيء هذا.

جرب شيئا على غرار هذا C ++ عينة أو هذا C # عينة.

يكون على الأقل صريحا حول HWND، فأنت ترسل الرسالة إليه إذا كنت ستتعلق مكابس المفاتيح.

نصائح أخرى

دون الوصول إلى ما إذا كان نهجك صحيح. (وأظن أنه لا).

أود أن المقامرة لديك حالة سباق. مما يعني أن عنصر تحكم المستعرض يحتاج إلى مزيد من الوقت لتحميل الأحداث والرد عليها أكثر مما تسمح بذلك.

لذلك عند قيامك بالرسالة. قم بتخطيط الخيط الذي ترسله فجأة، إنه تم حظر التحكم في المستعرض بشكل كامل أو شيء آخر.

من الصعب معرفة سؤالك سواء كنت تعمل على الهاتف المحمول، أو سطح المكتب العادي لأن هناك مناهج أفضل للتعامل مع اللمس. إلقاء نظرة على Window7 API للمسائط المتعددة أو WPF 4.0 (الذي يتم مشاركته بواسطة السطح اللمس SDK ASWELL).

امل ان يساعد. ارييل

قد يكون التحكم في المستعرض لا يزال جاري تحميل مستند ويمنح مربع الرسالة وقتا كافيا لإنهاءه. إذا كان الأمر كذلك، انتظر حتى يكون خاصية ISBUSY للمتصفح خطأ أو استخدم الحدث المستندات.

لا أعرف، ولكن بشكل عام في تجربتي، إنها فكرة سيئة محاولة تغيير التركيز برمجيا مثل هذا، فأنت تنتهي دائما في مطاردة الأخطاء. هناك الكثير من الطرق للحصول على Windows للتمرير رغم ذلك، لذلك ربما يجب أن تجرب شيئا آخر؟ على سبيل المثال، يمكن ل JavaScript في متصفح الويب التمرير النافذة بفعالية.

أظن أن لديك سباق هنا ما الذي يحدث أولا. قد لا يكون التركيز على التحكم في التحكم فوري و Kystroke الذي ترسله في أي مكان آخر، بينما بعد إغلاق مربع الرسالة يركز بالفعل التحكم في المتصفح ويحصل على ضغطك.

أيضا، أن اقتبس ملاحظة من MSDN حول Control.Focus ():

التركيز هو طريقة منخفضة المستوى المقصود في المقام الأول مؤلفي التحكم المخصص. بدلا من ذلك، يجب على مبرمجي التطبيق استخدام يختار الطريقة أو ActiveControl. خاصية عناصر التحكم في الأطفال، أو تفعيل طريقة للنماذج.

لذلك قد يكون استخدام أحد تلك أفضل من استخدام التركيز ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top