سؤال

في برنامجي مع واجهة مستخدم في Winform. قمت بتعيين المؤشر على الساعة الرملية قبل إطلاق طريقة في Threadpool.

يشبه هذا الكود في موضوع واجهة المستخدم لتعيين المؤشر مثل هذا:

Application.UseWaitCursor = true;

عند الانتهاء من الطريقة ، أعود إلى مؤشر ترابط واجهة المستخدم لتعيين المؤشر على الحالة العادية.

Application.UseWaitCursor = false;

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

يمكن لأي شخص أن يساعدني ؟

جيروم

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

المحلول

أنا غير قادر على إعادة إنتاج هذا السلوك؟ إنه يعمل بشكل جيد بالنسبة لي.

شيء واحد يجب ملاحظته على الرغم من أنك تستخدم Control.Cursor = Cursors.WaitCursor النهج هو أنه عادة ما يستخدم مثل:

this.Cursor = Cursors.WaitCursor

الذي يبدو أنه يعمل بشكل جيد ، ومع ذلك ، this يشير النموذج ، لذلك إذا قام المستخدم بنقل الماوس إلى عنصر تحكم مختلف ، على سبيل المثال ، فإن مربع نص ، فإن الماوس لا يظهر مؤشر الانتظار.

قد يسبب هذا الارتباك للمستخدمين. أو قد يتسبب في بعض المشكلات إذا استمر المستخدم في العمل على شيء آخر عندما يكون التطبيق مشغولاً بعمل آخر.

نصائح أخرى

في الواقع ، هناك طريقة أخرى للقيام بذلك ، والتي وجدتها في مكان ما بعد ساعات من البحث عن هذه المشكلة.

لسوء الحظ ، إنه اختراق.

فيما يلي طريقة كتبت تتولى المشكلة.

/// <summary>
    /// Call to toggle between the current cursor and the wait cursor
    /// </summary>
    /// <param name="control">The calling control.</param>
    /// <param name="toggleWaitCursorOn">True for wait cursor, false for default.</param>
    public static void UseWaitCursor(this Control control, bool toggleWaitCursorOn)
    {
        ...

        control.UseWaitCursor = toggleWaitCursorOn;

        // Because of a weird quirk in .NET, just setting UseWaitCursor to false does not work
        // until the cursor's position changes. The following line of code fakes that and 
        // effectively forces the cursor to switch back  from the wait cursor to default.
        if (!toggleWaitCursorOn)
            Cursor.Position = Cursor.Position;
    }

طريقة أخرى:

Cursor.Current = Cursors.WaitCursor;

عند الانتهاء ، فقط قم بتغيير المؤشر مرة أخرى:

Cursor.Current = Cursors.Default;

اضبط المؤشر يدويًا. هذا ما اقوم به.

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