سؤال

أنا أعمل على تطبيق دردشة بسيط باستخدام System.Windows.Forms.WebBrowser Control لعرض الرسائل بين المستخدم والمستلم.كيف يمكنني جعل عنصر التحكم يقوم بالتمرير تلقائيًا إلى الأسفل في كل مرة أقوم فيها بتحديث DocumentText الخاص بعنصر التحكم؟

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

المحلول

شكرًا يا رفاق - لقد قمت بالتصويت لصالحكما ولكن لم ينجح أي منهما في حل موقفي.ما انتهى بي الأمر إلى القيام به هو

webCtrl.Document.Window.ScrollTo(0, int.MaxValue);

نصائح أخرى

سأستخدم خاصية AutoScrollOffset وأضعها في الجزء السفلي الأيسر من عنصر تحكم WebBrowser، لذلك شيء من هذا القبيل:

webCtrl.AutoScrollOffset = new Point(0, webCtrl.Height);

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

لاستدعاء البرنامج النصي، يحتوي عنصر التحكم WebBrowser على خاصية Document التي تمثل كائن المستند من DOM.يحتوي على طريقة تسمى InvocScript يمكنك من خلالها تمرير سلسلة من JavaScript ليتم تنفيذها.

لكن...إذا كانت خاصية AutoScrollOffset تعمل...نعم، سأستخدم ذلك بدلاً من الدخول في JavaScript :)

يمكنك الحفاظ على موضع التمرير في الأعلى، وإدراج رسالة جديدة في الأعلى.

لا تحتاج إلى التمرير إلى الأسفل، فهو يشبه تويتر :)

user2:
  new message   ← a new message is insert on top

user1:
  old message
 public virtual void ScrollMessageIntoView()
        {

            System.Windows.Forms.Application.DoEvents();
            if (browser == null || browser.IsDisposed)
                return;

            if (browser.Document == null)
            {
                browser.Document.Window.ScrollTo(0,
                browser.Document.Body.ScrollRectangle.Height);
            }
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top