سؤال

وأنا أكتب شريط الأدوات لإنترنت إكسبلورر (6+). لقد استخدمت العديد من الحانات عينة من

وcodeproject.com ( http://www.codeproject.com/KB/dotnet /IE_toolbar.aspx )، ولها شريط الأدوات الذي يعمل، يسجل إلى إلغاء تسجيل الخ. ما أريد شريط الأدوات القيام به هو لتسليط الضوء على عناصر div داخل صفحة HTML كما يتحرك الماوس المستخدمين على أن شعبة. وحتى الآن يعمل رمز تسليط الضوء، ولكن أود أن عرض اسم شعبة (إن وجد) في التسمية على شريط الأدوات (تغيير بينما يتحرك الماوس الخ).

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

هل الحل هو محاولة تحديث تحكم بطريقة ذات ألوان باستخدام استدعاء؟ إذا كان الأمر كذلك كيف؟

وهنا هو رمز الحدث:

private void Explorer_MouseOverEvent(mshtml.IHTMLEventObj e)
{
      mshtml.IHTMLDocument2 doc = this.Explorer.Document as IHTMLDocument2;
      element = doc.elementFromPoint(e.clientX, e.clientY);
      if (element.tagName.Equals("DIV", StringComparison.InvariantCultureIgnoreCase))
      {
          element.style.border = "thin solid blue;";
          if (element.className != null)
          {
               UpdateToolstrip(element.className);
          }
      } 
      e.returnValue = false;
}

وهنا محاولة لتحديث ذات ألوان من شريط الأدوات:

delegate void UpdateToolstripDelegate(string text);

public void UpdateToolstrip(string text)
{
     if (this.toolStripLabel1.InvokeRequired == false)
     {
         this.toolStripLabel1.Text = text;
     }
     else
     {
         this.Invoke(new UpdateToolstripDelegate(UpdateToolstrip), new object[] { text });
     }
}

وأي اقتراحات تقدير كبير.

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

المحلول

وأنا لا يمكن أن تتكاثر حقا قضية (إنشاء مشروع اختبار لشريط أدوات IE هو صبي الكثير من العمل)، ولكن يمكنك أن تجرب هذا:

وإضافة روتين التالية إلى ساكنة العام (طرق ملحقات) فئة:

public static void Invoke(this Control control, MethodInvoker methodInvoker)
{
    if (control.InvokeRequired)
        control.Invoke(methodInvoker);
    else
        methodInvoker();
}

وثم استبدال قسم من التعليمات البرمجية مشابهة في المربع الأول مع هذا:

if (element.className != null)
{
    this.Invoke(() => toolStripLabel1.Text = element.className);
}

وهذا هو وسيلة مؤكدة لإطلاق النار من تجنب القضايا ذات ألوان في تطبيقات واجهة المستخدم.

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