ما هي الطريقة "المناسبة" لاسترداد إشارة إلى كائن الشريط؟

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

  •  25-09-2019
  •  | 
  •  

سؤال

بالنسبة لمشروع VSTO Forkbook ، هل هناك أفضل ممارسة لاسترداد إشارة إلى كائن الشريط من فئة ThisWorkbook؟

إليك ما أفعله: في فصل الشريط الخاص بي ، قمت بإنشاء طريقة عامة تسمى InvalidateControl(string controlID). أحتاج إلى استدعاء هذه الطريقة من فئة ThisWorkbook استنادًا إلى متى يحرص حدث على مستوى المصنف. لكن الطريقة الوحيدة التي يمكنني رؤيتها "الحصول على" إشارة إلى كائن الشريط هي القيام بذلك ...

    // This is all in the ThisWorkbook class
    Ribbon ribbon;
    protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        this.ribbon = new Ribbon();
        return this.ribbon;
    }

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

شكرًا!

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

المحلول

هناك طريقة أبسط بكثير هي إنشاء متغير ثابت عالمي في مكان ما (على سبيل المثال في This Workbook).

public static Ribbon ribbonref;

ثم في رمز فئة الشريط ، في معالج الحدث لحدث التهيئة (أعتقد أن الطريقة تسمى Ribbon1_StartUp() لكنني لست متأكدًا) ، قم بتعيين المتغير:

private void Ribbon1_StartUp(object sender, EventArg e)
{
    ThisWorkbook.ribbonref = this;
}

(مكتوب من الذاكرة حتى لا يكون صحيحًا تمامًا)

يمكنك بعد ذلك الاستخدام ribbonref للوصول إلى مثيل الشريط الخاص بك.

نصائح أخرى

يرجى الاطلاع على هذا MSDN الصفحة التي توضح استخدام كائن Globals:

Globals.Ribbons.MyRibbon.MyObject.Text = "test";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top