옵션 페이지 만들기
이 연습에서는 속성 그리드를 사용하여 속성을 검사하고 설정하는 간단한 도구/옵션 페이지를 만듭니다.
이러한 속성을 설정 파일에 저장하고 설정 파일에서 복원하려면 다음 단계를 수행한 다음, 설정 범주 만들기를 참조하세요.
MPF는 도구 옵션 페이지를 만드는 데 도움이 되는 Package 클래스와 DialogPage 클래스라는 두 가지 클래스를 제공합니다. Package
클래스를 서브클래싱하여 이러한 페이지에 대한 컨테이너를 제공하는 VSPackage를 만듭니다. DialogPage
클래스에서 파생하여 각 도구 옵션 페이지를 만듭니다.
도구 옵션 그리드 페이지 만들기
이 섹션에서는 간단한 도구 옵션 속성 그리드를 만듭니다. 이 그리드를 사용하여 속성 값을 표시하고 변경할 수 있습니다.
VSIX 프로젝트를 만들고 VSPackage를 추가하기
모든 Visual Studio 확장은 확장 자산을 포함하는 VSIX 배포 프로젝트로 시작합니다.
MyToolsOptionsExtension
이라는 Visual Studio VSIX 프로젝트를 만듭니다. “vsix”를 검색하여 새 프로젝트 대화 상자에서 VSIX 프로젝트 템플릿을 찾을 수 있습니다.MyToolsOptionsPackage
이라는 Visual Studio 패키지 항목 템플릿을 추가하여 VSPackage를 추가합니다. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가>새 항목을 선택합니다. 새 항목 추가 대화 상자에서 Visual C# 항목>확장성으로 이동하여 Visual Studio 패키지를 선택합니다. 대화 상자 하단의 이름 필드에서 파일 이름을MyToolsOptionsPackage.cs
로 변경합니다. VSPackage를 만드는 방법에 대한 자세한 내용은 VSPackage를 사용하여 확장 만들기를 참조하세요.
도구 옵션 속성 그리드 만들기
코드 편집기에서 MyToolsOptionsPackage 파일을 엽니다.
다음 using 문을 추가합니다.
using System.ComponentModel;
OptionPageGrid
클래스를 선언하고 DialogPage에서 파생시킵니다.public class OptionPageGrid : DialogPage { }
ProvideOptionPageAttribute를
VSPackage
클래스에 적용하여 OptionPageGrid에 대한 옵션 범주 및 옵션 페이지 이름을 클래스에 할당합니다. 결과는 다음과 같습니다.[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] [ProvideMenuResource("Menus.ctmenu", 1)] [Guid(GuidList.guidMyToolsOptionsPkgString)] [ProvideOptionPage(typeof(OptionPageGrid), "My Category", "My Grid Page", 0, 0, true)] public sealed class MyToolsOptionsPackage : Package
OptionPageGrid
클래스에OptionInteger
속성을 추가합니다.속성에 속성 그리드 범주를 할당할 System.ComponentModel.CategoryAttribute를 적용합니다.
속성에 이름을 할당할 System.ComponentModel.DisplayNameAttribute를 적용합니다.
속성에 설명을 할당할 System.ComponentModel.DescriptionAttribute를 적용합니다.
public class OptionPageGrid : DialogPage { private int optionInt = 256; [Category("My Category")] [DisplayName("My Integer Option")] [Description("My integer option")] public int OptionInteger { get { return optionInt; } set { optionInt = value; } } }
참고
DialogPage의 기본 구현은 적절한 변환기가 있거나 적절한 변환기가 있는 속성으로 확장할 수 있는 구조 또는 배열인 속성을 지원합니다. 변환기 목록은 System.ComponentModel 네임스페이스를 참조하세요.
프로젝트를 빌드하고 디버깅을 시작합니다.
Visual Studio의 실험적 인스턴스에서 도구 메뉴의 옵션을 클릭합니다.
왼쪽 창에 내 범주가 표시됩니다. (옵션 범주는 사전순으로 나열되므로 목록의 중간 정도에 표시됩니다.) 내 범주를 열고 내 그리드 페이지를 클릭합니다. 옵션 그리드가 오른쪽 창에 나타납니다. 속성 범주는 내 옵션이고 속성 이름은 내 정수 옵션입니다. 속성 설명 내 정수 옵션이 창 아래쪽에 나타납니다. 값을 초기 값인 256에서 다른 값으로 변경합니다. 확인을 클릭한 다음, 내 그리드 페이지를 다시 엽니다. 새 값이 유지되는 것을 볼 수 있습니다.
옵션 페이지는 Visual Studio의 검색 상자를 통해서도 사용할 수 있습니다. IDE 상단 근처의 검색 상자에 내 범주를 입력하면 결과에 내 범주 -> 내 그리드 페이지가 표시됩니다.
도구 옵션 사용자 지정 페이지 만들기
이 섹션에서는 사용자 지정 UI가 있는 도구 옵션 페이지를 만듭니다. 이 페이지를 사용하여 속성 값을 표시하고 변경할 수 있습니다.
코드 편집기에서 MyToolsOptionsPackage 파일을 엽니다.
다음 using 문을 추가합니다.
using System.Windows.Forms;
OptionPageGrid
클래스 바로 앞에OptionPageCustom
클래스를 추가합니다.DialogPage
에서 새 클래스를 파생시킵니다.public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } }
GUID 특성을 추가합니다. OptionString 속성을 추가합니다.
[Guid("00000000-0000-0000-0000-000000000000")] public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } }
두 번째 ProvideOptionPageAttribute를 VSPackage 클래스에 적용합니다. 이 특성은 클래스에 옵션 범주 및 옵션 페이지 이름을 할당합니다.
[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] [ProvideMenuResource("Menus.ctmenu", 1)] [Guid(GuidList.guidMyToolsOptionsPkgString)] [ProvideOptionPage(typeof(OptionPageGrid), "My Category", "My Grid Page", 0, 0, true)] [ProvideOptionPage(typeof(OptionPageCustom), "My Category", "My Custom Page", 0, 0, true)] public sealed class MyToolsOptionsPackage : Package
MyUserControl이라는 새 사용자 정의 컨트롤을 프로젝트에 추가합니다.
사용자 정의 컨트롤에 TextBox 컨트롤을 추가합니다.
속성 창의 도구 모음에서 이벤트 단추를 클릭한 다음, 벗어나기 이벤트를 두 번 클릭합니다. 새 이벤트 처리기가 MyUserControl.cs 코드에 나타납니다.
공용
OptionsPage
필드,Initialize
메서드를 컨트롤 클래스에 추가하고 이벤트 처리기를 업데이트하여 옵션 값을 텍스트 상자의 내용으로 설정합니다.public partial class MyUserControl : UserControl { public MyUserControl() { InitializeComponent(); } internal OptionPageCustom optionsPage; public void Initialize() { textBox1.Text = optionsPage.OptionString; } private void textBox1_Leave(object sender, EventArgs e) { optionsPage.OptionString = textBox1.Text; } }
optionsPage
필드는 부모OptionPageCustom
인스턴스에 대한 참조를 보유합니다.Initialize
메서드는 TextBox에OptionString
을 표시합니다. 이벤트 처리기는 포커스가 TextBox를 벗어날 때 TextBox의 현재 값을OptionString
에 씁니다.패키지 코드 파일에서
OptionPageCustom.Window
속성에 대한 재정의를OptionPageCustom
클래스에 추가하여MyUserControl
인스턴스를 만들고 초기화하고 반환합니다. 이제 클래스는 다음과 같이 표시됩니다.[Guid("00000000-0000-0000-0000-000000000000")] public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } protected override IWin32Window Window { get { MyUserControl page = new MyUserControl(); page.optionsPage = this; page.Initialize(); return page; } } }
프로젝트를 빌드하고 실행합니다.
실험적 인스턴스에서 도구>옵션을 클릭합니다.
내 범주를 찾은 다음, 내 사용자 지정 페이지를 찾습니다.
OptionString 값을 변경합니다. 확인을 클릭한 다음, 내 사용자 지정 페이지를 다시 엽니다. 새 값이 유지되는 것을 볼 수 있습니다.
액세스 옵션
이 섹션에서는 연결된 도구 옵션 페이지를 호스트하는 VSPackage에서 옵션 값을 가져옵니다. 동일한 기술을 사용하여 공용 속성의 값을 확보할 수 있습니다.
패키지 코드 파일에서 OptionInteger라는 공용 속성을 MyToolsOptionsPackage 클래스에 추가합니다.
public int OptionInteger { get { OptionPageGrid page = (OptionPageGrid)GetDialogPage(typeof(OptionPageGrid)); return page.OptionInteger; } }
이 코드는 GetDialogPage를 호출하여
OptionPageGrid
인스턴스를 생성하거나 검색합니다.OptionPageGrid
는 공용 속성인 해당 옵션을 로드하기 위해 LoadSettingsFromStorage를 호출합니다.이제 MyToolsOptionsCommand라는 사용자 지정 명령 항목 템플릿을 추가하여 값을 표시합니다. 새 항목 추가 대화 상자에서 Visual C#>확장성으로 이동하여 사용자 지정 명령을 선택합니다. 창 아래쪽의 이름 필드에서 명령 파일 이름을 MyToolsOptionsCommand.cs로 변경합니다.
MyToolsOptionsCommand 파일에서 명령의
ShowMessageBox
메서드 본문을 다음으로 바꿉니다.private void ShowMessageBox(object sender, EventArgs e) { MyToolsOptionsPackage myToolsOptionsPackage = this.package as MyToolsOptionsPackage; System.Windows.Forms.MessageBox.Show(string.Format(CultureInfo.CurrentCulture, "OptionInteger: {0}", myToolsOptionsPackage.OptionInteger)); }
프로젝트를 빌드하고 디버깅을 시작합니다.
실험적 인스턴스의 도구 메뉴에서 MyToolsOptionsCommand 호출을 클릭합니다.
메시지 상자에
OptionInteger
의 현재 값이 표시됩니다.
옵션 페이지 열기
이 섹션에서는 옵션 페이지를 여는 단추에 대한 명령 및 이벤트를 추가합니다.
먼저 OpenPageCommand.cs라는 파일을 추가합니다.
그런 다음 OpenPageCommand.cs를 열고 Execute 메서드를 변경합니다.
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); Type optionsPageType = typeof(OptionPageCustom); Instance.package.ShowOptionPage(optionsPageType); }
프로젝트를 실행한 다음 호출 단추(기본적으로 도구 옵션 아래에 있음)를 클릭합니다. 그러면 옵션 페이지가 열리는 것을 볼 수 있습니다.
옵션 페이지 열기에 대한 자세한 내용은 다음 문서를 참조할 수 있습니다.