Главная » C#, Компоненты » Получение информации о проекте

0

Расположенный на форме компонент обладает полной информацией обо всех принадлежащих ему объектах, но иногда возникает необходимость посмотреть вверх и получить информацию о проекте, которому принадлежит форма, содержащая вставленный компонент. В этом случае можно использовать класс Project item. Получить его экземпляр можно недокументированным вызовом метода site.Getservice(typeof {Projectitem}). Например, в листинге?.^ показан код компонента, получающего имя формы, имя документа и даже число точек останова в текущем проекте (рис. 7.5). Код здесь достаточно простой и, я думаю, в дополнительных комментариях не нуждается. Единственное замечание— для работы этого компонента требуется подключить библиотеки EnvDTE и EnvDTE80, содержащие описание класса projectitem (рис. 7.6).

Цистинг7 12.

using System; using System. Data; using System. Drawing;

using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Windows.Forms;

using EnvOTE; using EnvDTE80;

namespace ProjectltemControlExample {

public class ProjectltemControl : UserControl {

// Буфер для отображения сообщений private ListBox logListBox;

// Конструктор

public ProjectltemControl() {

InitializeComponent();

}

private void InitializeComponent(} {

this.logListBox = new System.Windows.Forms.ListBox(); this.SuspendLayout();

//

// logListBox

//

this.logListBox.Dock = System.Windows.Forms.DockStyle.Fill; this.logListBox.Location = new System.Drawing.Point(0, 0); this.logListBox.Name = "logListBox";

this.logListBox.Size = new System.Drawing.Size(200, 95); this.logListBox.Tablndex = 0;

//

// Proj ectltemControl

//

this.Controls.Add(this.logListBox);

this.Name = "ProjectltemControl";

this.Size = new System.Drawing.Size(200, 100);

this.ResumeLayout(false};

// Свойство Site устанавливается дизайнером только в режиме // разработки в момент установки связи между дизайнером и компонентом.

public override ISite Site {

get

{

return base.Site;

}

set

{

// Сохраняем значение Site base.Site = value;

// Получаем информацию Preparelnformation();

}

}

// Получаем информацию

private void Preparelnforrnation ()

}

ClearLog(};

if (base.Site == null)

}

return;

}

// Получаем интерфейс ProjectItem Projectltem pi =

(ProjectItem) Site.GetService (typeof (Projectltem.) ) ; if (pi == null}

{

return;

}

DoLog(string.Format{"Форма {0}pi.Name)}; if (pi.Document !- null}

DoLog(string.Format("Имя документа {0}", pi.Document.FullName)}; if (pi.Properties.DTE.Debugger != null)

DoLog(string.Format("Число точек останова (Of",

pi.Properties.DTE.Debugger.Breakpoints.Count)}; DoLog(string.Format("Путь к VS {0}", pi.Properties.DTE.FileName));

// Добавляем строку в журнал private void DoLog(string text) (

logListBox.Items.Add(text);

logListBox.Selectedlndex = logListBox.Items.Count – 1;

}

private void ClearLogO (

logListBox.Items.Clear();

}

}

Рис. 7.5.

Рис. 7.6. Добавление ссылок на библиотеки EnvDTE и EnvDTE80

}

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии