سؤال

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

هذا لم يعمل بشكل جيد للغاية، رغم أنني قرأت بعض الوظائف، حتى على Stackoverflow، حيث يبدو أن هذا حلا صالحا. مثال واحد هو عندما حاولت استخدام الحل هنا:

مشكلة التمرير مع عنصر تحكم WebBrowser الموجود في عنصر تحكم لوحة

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

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

أقوم بذلك مع التعليمات البرمجية التالية، يسمى بفعالية كلما ضغط المفتاح في عنصر التحكم:

if (Output.Document.Body != null)
{
    if (Output.Document.Body.ScrollRectangle.Size.Height > Output.Size.Height
            || Output.Document.Body.ScrollRectangle.Size.Width > Output.Size.Width)
        Output.ScrollBarsEnabled = true;
    else
        Output.ScrollBarsEnabled = false;
}
else
    Output.ScrollBarsEnabled = false;

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

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

أي مساعدة موضع تقدير كبير. شكرًا!

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

المحلول

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

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

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

إليك مقتطفات التعليمات البرمجية ذات الصلة:

            //If still bigger, set scrollbars:

            if ((Output.Document.Body.ScrollRectangle.Size.Height > Output.Size.Height) ||
                Output.Document.Body.ScrollRectangle.Size.Width > Output.Size.Width)
            {
                ScrollPanel.Visible = false;
                ScrollPanel.Enabled = false;
            }

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

لقد قررت حتى إجابة شنغ (عندما أحصل على سمعة كافية) كما، أولا كان الشخص الوحيد الرد، وثانيا، ساعدتني معلوماته عندما كنت أفكر في استخدام نوع من الاحتجاج لمحاولة تمكين الأشرطة التمريرية أثناء وقت التشغيل. على الرغم من أنني عثرت على حولي أبسط وفعال للغاية.

نصائح أخرى

انه متأخر جدا. يتم استدعاء Idochostuihandler.gethostinfo عند إنشاء WebBrowser، وتنفيذ تطبيق WebBrowser Dochostuiflag_scroll_no أو علامة Dochostuiflag_flat_scrollbar المستندة إلى قيمة خاصية ScrollBarsEnabled.

أقترح عليك تعيين ScrollBarsEnabled إلى False قبل إنشاء نافذة عنصر التحكم WebBrowser.

إذا كنت لا تريد شريط التمرير لعنصر معين، مثل الجسم أو DIV أو Textarea، في الظهور، يمكنك تعيين أنماطها لزيادة التشغيل = "مخفي" أو استخدام خصائص التمرير الخاصة بالعناصر مثل Doc.body.setattribute ("التمرير"، "لا").

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