플러그인 방식의 애플리케이션 프레임워크 구축(7) - 기본 서비스
5143 단어 응용 프로그램
어떻게 이런 서비스들을 실현합니까?플러그인이 실행될 때 프로그램 자체의 메뉴, 도구막대, 도구막대 정지 등을 얻을 수 있기를 바랍니다. 예를 들어 메뉴 항목을 추가하고 도구막대 단추를 추가하는 등 항목을 추가할 수 있기를 바랍니다.실행할 때 어떤 메뉴나 도구막대를 얻기 위해서, 우리는 모든 메뉴의 후자 도구막대에 키키를 분배한 다음, 필요할 때 이 키를 통해 실례를 얻어야 한다.이 키에 대해서 말하자면, 나의 예는 비교적 간단하다. 바로 그의 이름이다. Tool Strip 서비스의 코드를 살펴보자.
복제하다
보존
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace PluginFramework
{
public class ToolStripService : IToolStripService
{
private IApplication application = null;
private Dictionary<String, ToolStrip> toolStrips = new Dictionary<string, ToolStrip>();
public ToolStripService(IApplication application)
{
this.application = application;
}
#region IToolStripService Members
public System.Windows.Forms.ToolStrip GetToolStrip(string toolStripName)
{
ToolStrip toolStrip = null;
if (toolStrips.ContainsKey(toolStripName))
{
toolStrip = toolStrips[toolStripName];
}
return toolStrip;
}
public void AddToolStrip(string toolStripName, System.Windows.Forms.ToolStrip toolStrip)
{
if (toolStrips.ContainsKey(toolStripName))
{
MessageBox.Show("The tool strip name has existed!");
}
else
{
toolStrips[toolStripName] = toolStrip;
// toolstrip ,
if (application.TopToolPanel != null)
{
application.TopToolPanel.Controls.Add(toolStrip);
}
}
}
public void AddToolStrip(string toolStripName,
System.Windows.Forms.ToolStrip toolStrip,
ToolStripDockState option)
{
if (toolStrips.ContainsKey(toolStripName))
{
MessageBox.Show("The tool strip name has existed!");
}
else
{
toolStrips[toolStripName] = toolStrip;
switch (option)
{
case ToolStripDockState.Left:
if (application.LeftToolPanel != null)
{
application.LeftToolPanel.Controls.Add(toolStrip);
}
break;
case ToolStripDockState.Right:
if (application.RightToolPanel != null)
{
application.RightToolPanel.Controls.Add(toolStrip);
}
break;
case ToolStripDockState.Top:
if (application.TopToolPanel != null)
{
application.TopToolPanel.Controls.Add(toolStrip);
}
break;
case ToolStripDockState.Bottom:
if (application.BottomToolPanel != null)
{
application.BottomToolPanel.Controls.Add(toolStrip);
}
break;
}
}
}
public void RemoveToolStrip(string toolStripName)
{
ToolStrip toolStrip = GetToolStrip(toolStripName);
if (toolStrip != null)
{
if (application.TopToolPanel != null
&& application.TopToolPanel.Controls.Contains(toolStrip))
{
application.TopToolPanel.Controls.Remove(toolStrip);
}
else if (application.BottomToolPanel != null
&& application.BottomToolPanel.Controls.Contains(toolStrip))
{
application.BottomToolPanel.Controls.Remove(toolStrip);
}
else if (application.LeftToolPanel != null
&& application.LeftToolPanel.Controls.Contains(toolStrip))
{
application.LeftToolPanel.Controls.Remove(toolStrip);
}
else if (application.RightToolPanel != null
&& application.RightToolPanel.Controls.Contains(toolStrip))
{
application.RightToolPanel.Controls.Remove(toolStrip);
}
}
toolStrips.Remove(toolStripName);
}
#endregion
}
}
보기나 정지 도구막대에 대해 말하자면 사전에 직접 실례를 넣지 않고 대상의 유형을 사전에 넣는 것이 좋다. 보기와 정지 도구막대 자체는Form에서 파생된 것이기 때문에 보기나 정지 도구막대가 닫힐 때 대상은 소각되고 대상의 창설은 플러그인의Load 방법에서 이루어진다.우리는 플러그인의 Load 방법을 다시 호출할 수 없다. 이렇게 해서 우리의 사용에 불편을 가져왔기 때문에 우리는 유형을 등록하고 서비스에서 하나의 Show 방법을 실현하는 것이 비교적 합리적이다. 여기서 편의를 보여주기 위해 나는 직접 Load에서 실례화를 하고 실례를 사전에 넣었다.
다음 그림에서는 플러그인이 포함된 정지 도구막대, 도구막대, 새 메뉴 'View' 와 View 메뉴의 하위 메뉴를 보여 줍니다.
요즘은 시간이 없어서 글을 느리게 보내고 잘못 썼어요. 잘 모르는 부분은 원본 코드를 참고할 수 있어요. 여러분의 양해를 바랍니다.
소스 코드
http://files.cnblogs.com/guanjinke/pluginsample3.rar
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SpringBoot 빠른 어플리케이션 구축 방법 소개SpringBoot을 선택한 이유는 더 가벼운 성능 때문입니다.평소의 Spring 프로젝트에는 의존하는 라이브러리가 너무 많고 설정이 번잡하기 때문에 이메일 서비스만 제공하는 프로그램에 사용하는 것도 사소한 일이다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.