2016-06-07 28 views
0

我正在开发我的第一个MMC管理单元。我想每个SnapIn配置信息。我需要从SnapIn面板控件访问这些信息。我没有看到从这些控件中找到父SnapIn对象的方法。除了创建静态全局之外,还有其他方法吗?如何获取MMC SnapIn面板控件的父项

这就是管理单元的一部分FormViewDescription似乎产生了使用默认的构造函数的控件:

// Create a form view for the root node. 
FormViewDescription fvd = new FormViewDescription(); 
fvd.DisplayName = "Status"; 
fvd.ViewType = typeof(SelectionFormView); 
fvd.ControlType = typeof(SelectionControl); 

感谢

回答

1

在你的控制(SelectionControl),您可以实现Microsoft.ManagementConsole.IFormViewControl接口。然后您会收到一个电话号码Initialize,其中FormView作为参数。从这个参数你可以访问管理单元。

这里有一个例子:

public class SelectionControl : UserControl, IFormViewControl 
{ 
    ... 

    public void Initialize(FormView view) 
    { 
     var snapIn = view.ScopeNode.SnapIn; 

     ... 
    } 
} 

将帖子

您可以使用下面的类的基类的控制,而不是UserControl的:

// 
// @(#) FormViewControl.cs 
// 
// Project: usis.ManagementConsole 
// System:  Microsoft Visual Studio 2015 
// Author:  Udo Schäfer 

using System; 
using System.Windows.Forms; 
using Microsoft.ManagementConsole; 

namespace usis.ManagementConsole 
{ 
    // --------------------- 
    // FormViewControl class 
    // --------------------- 

    /// <summary> 
    /// Provides an empty control that can be used to create the content of a Windows Forms view. 
    /// </summary> 
    /// <seealso cref="UserControl" /> 
    /// <seealso cref="IFormViewControl" /> 

    public class FormViewControl : UserControl, IFormViewControl 
    { 
     #region fields 

     private Control oldParent; 

     #endregion fields 

     #region properties 

     // ----------------- 
     // FormView property 
     // ----------------- 

     /// <summary> 
     /// Gets the associated Windows Forms view. 
     /// </summary> 
     /// <value> 
     /// The form view. 
     /// </value> 

     protected FormView FormView { get; private set; } 

     // --------------- 
     // SnapIn property 
     // --------------- 

     /// <summary> 
     /// Gets the scope node's snap-in. 
     /// </summary> 
     /// <value> 
     /// The scope node's snap-in. 
     /// </value> 

     protected NamespaceSnapInBase SnapIn 
     { 
      get { return this.FormView.ScopeNode.SnapIn; } 
     } 

     #endregion properties 

     #region overrides 

     // ---------------------- 
     // OnParentChanged method 
     // ---------------------- 

     /// <summary> 
     /// Raises the <see cref="Control.ParentChanged"/> event. 
     /// </summary> 
     /// <param name="e">An <see cref="T:System.EventArgs"/> that contains the event data.</param> 

     protected override void OnParentChanged(EventArgs e) 
     { 
      if (Parent != null) 
      { 
       if (!DesignMode) Size = Parent.ClientSize; 
       Parent.SizeChanged += Parent_SizeChanged; 
      } 
      if (oldParent != null) 
      { 
       oldParent.SizeChanged -= Parent_SizeChanged; 
      } 
      oldParent = Parent; 
      base.OnParentChanged(e); 
     } 

     #endregion overrides 

     #region IFormViewControl implementation 

     // ----------------- 
     // Initialize method 
     // ----------------- 

     /// <summary> 
     /// Uses the associated Windows Forms view to initialize the control. 
     /// </summary> 
     /// <param name="view">The associated <c>FormView</c> value.</param> 

     public void Initialize(FormView view) 
     { 
      FormView = view; 
      OnInitialize(); 
     } 

     // ------------------- 
     // OnInitialize method 
     // ------------------- 

     /// <summary> 
     /// Called when the control is initialized. 
     /// </summary> 

     protected virtual void OnInitialize() { } 

     #endregion IFormViewControl implementation 

     #region private methods 

     // ------------------------- 
     // Parent_SizeChanged method 
     // ------------------------- 

     private void Parent_SizeChanged(object sender, EventArgs e) 
     { 
      if (!DesignMode) Size = Parent.ClientSize; 
     } 

     #endregion private methods 
    } 
} 

// eof "FormViewControl.cs" 

(这也会调整其父母的控制权。)

请注意:请勿访问类的构造函数中的SnapIn属性。改用OnInitialize方法。

+0

该会员编译得很好,但从未被调用。 – Jay

+0

您是否已将接口IFormViewControl添加到您的类中? – Udo

+0

明天我会仔细检查,但我很确定我做了。我添加了一个跟踪并使用debugview来查看它是否在运行时被调用 – Jay

相关问题