2016-02-22 3 views
0

Я создал новый пользовательский элемент управления, который имеет свойство, как ...Как создать пользовательский элемент управления с помощью шрифта по умолчанию его родителя?

private Font m_DisplayFont; 
public Font DisplayFont 
{ 
    get { return m_DisplayFont; } 
    set { m_DisplayFont = value; } 
} 

Я хочу установить m_DisplayFont для шрифта родителя, когда я бросаю новый пользовательский элемент управления в контейнер (форма, GroupBox, и т.д.) ,

В настоящее время я пробовал следующее, но не могу получить родительский объект при создании класса. Любые предлагаемые приветствовались. Благодаря!

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Reflection; 

namespace MyTestControl 
{ 
    public partial class UserControl1 : ProgressBar 
    { 
     private Font m_DisplayFont; 
     public Font DisplayFont 
     { 
      get { return m_DisplayFont; } 
      set { m_DisplayFont = value; } 
     } 

     public UserControl1() 
     { 
      InitializeComponent(); 

      object parent = base.Parent; 
      m_DisplayFont = null; 
      if (parent != null) 
      { 
       //See if parent contains a font 
       Type type = parent.GetType(); 
       IList<PropertyInfo> props = new List<PropertyInfo>(type.GetProperties()); 
       foreach (PropertyInfo propinfo in props) 
       { 
        if (propinfo.Name == "Font") 
        { 
         m_DisplayFont = (Font)propinfo.GetValue(parent, null); 
        } 
       } 
      } 
      if (m_DisplayFont == null) m_DisplayFont = new Font("Verdana", 20.25f); 
     } 
    } 
} 

ответ

2

Вы можете использовать ParentChanged событие:

Происходит при изменении значения свойства Parent.

private void ParentChanged(Object sender, EventArgs args) 
{ 
    var parent = this.Parent; 
    if (parent == null) 
     return; 

    var fontProp = parent 
     .GetType() 
     .GetProperty("Font"); 
    var font = (fontProp == null) ? 
     new Font("Verdana", 20.25f) : (Font)fontProp.GetValue(parent, null); 
    this.m_DisplayFont = font; 
} 
+0

Это сработало отлично! Благодаря! –