سؤال

لدي مصمم يعتمد على وجود عناصر حلول أخرى. إذا تم حذف أحد هذه العناصر ، فسيتعرض المصمم وعليك التعديل كـ XML لإصلاحه. ليس بالضبط سهل الاستخدام.

ومع ذلك ، لدي كائن DTE الذي يمثل مثيل Visual Studio ، وكذلك SoundiEtems التي أعتمد عليها.

هل من الممكن ، في مكان ما في أعماق DTE ، تسجيل مستمع لحذف هذا المشروع؟ وإذا كان الأمر كذلك ، فكيف أفعل ذلك؟

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

المحلول

يبدو أن الجاني هنا هو مجموعة القمامة. لقد وجدت أن مجموعتي الحدثين يتصرفان بشكل متماثل.

Events2 events2 = dte.Events as Events2;
if (events2 != null)
{
    this.projectItemsEvents = events2.ProjectItemsEvents;
    this.projectItemsEvents.ItemAdded += this.ProjectItemsEvents_ItemAdded;
    this.projectItemsEvents.ItemRemoved += this.ProjectItemsEvents_ItemRemoved;
    this.projectItemsEvents.ItemRenamed += this.ProjectItemsEvents_ItemRenamed;
}

this.csharpProjectItemsEvents =
    dte.Events.GetObject("CSharpProjectItemsEvents") as ProjectItemsEvents;
if (this.csharpProjectItemsEvents != null)
{
    this.csharpProjectItemsEvents.ItemAdded += this.CSharpProjectItemsEvents_ItemAdded;
    this.csharpProjectItemsEvents.ItemRemoved += this.CSharpProjectItemsEvents_ItemRemoved;
    this.csharpProjectItemsEvents.ItemRenamed += this.CSharpProjectItemsEvents_ItemRenamed;
}

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

private ProjectItemsEvents projectItemsEvents;
private ProjectItemsEvents csharpProjectItemsEvents;

نصائح أخرى

الدفع هذا المقال الأسئلة الشائعة وهو ما يشرح كيفية التسجيل في أحداث Prosintiems (بما في ذلك ItemDeleted).

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