2013-06-05 65 views
2

用PropertyGrid控件運行了一下,現在偶然發現了一個奇怪的問題。 我有一個Uint32屬性,它是一個有點掩碼的類。 所以我決定用32個按鈕創建一個自定義下拉UserControl,以使Uint32可編輯。 這裏是類(不含按一下按鈕處理程序):PropertyGrid中的自定義下拉編輯器控件以白色顯示

class MaskEditorControl : UserControl, IIntegerMaskControl 
{ 
     public MaskEditorControl() 
     { 
      InitializeComponent(); 
     } 

     public UInt32 ModifyMask(IServiceProvider provider, UInt32 mask) 
     { 
      IWindowsFormsEditorService editorService = null; 
      if (provider != null) 
       editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; 

      if (editorService != null) 
      { 
       m_mask = mask; 
       checkBox0.CheckState = (m_mask & (1 << 0)) == 0 ? CheckState.Unchecked : CheckState.Checked; 
       checkBox1.CheckState = (m_mask & (1 << 1)) == 0 ? CheckState.Unchecked : CheckState.Checked; 
       checkBox2.CheckState = (m_mask & (1 << 2)) == 0 ? CheckState.Unchecked : CheckState.Checked; 
       editorService.DropDownControl(this); 
      } 

      return m_mask; 
     } 
     private UInt32 m_mask = 0; 

} 

ModifyMask(...)的IIntegerMaskControl接口的實現功能,正在從另一個類叫做:

public interface IIntegerMaskControl 
{ 
    UInt32 ModifyMask(IServiceProvider provider, UInt32 mask); 
} 

public class IntegerMaskEditor : UITypeEditor 
{ 
    public static IIntegerMaskControl control = null; 

    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 
    { 
     return UITypeEditorEditStyle.DropDown; 
    } 

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 
    { 
     if (control == null) 
      return "Error: IIntegerMaskControl not set!"; 

     return control.ModifyMask(provider, (UInt32)value); 
    } 
} 

這裏是物業本身:

[System.ComponentModel.CategoryAttribute("Base")] 
    [Editor(typeof(IntegerMaskEditor), typeof(UITypeEditor))] 
    public UInt32         renderMask { get; set; } 

它的工作原理,但我得到了白顏色(包括按鈕),它只是看起來錯誤顯示我的控制。我找不到原因。這裏是截圖的鏈接:that is how the control looks like in action。 任何人對於爲什麼以及如何避免它有任何想法?我可以去調用一個表單,但我寧願堅持下拉。

在此先感謝!

回答

0

屬性網格使用ViewBackColor屬性來顯示下拉顏色。我沒有看到其他任何允許更改背景顏色的屬性。

然而,在下拉所示的控制下被父到控制(形式),你可以修改,用這樣的代碼:

public partial class MaskEditorControl : UserControl, IIntegerMaskControl 
{ 
    private Color _initialBackColor; 

    public MaskEditorControl() 
    { 
     InitializeComponent(); 
     _initialBackColor = BackColor; 
    } 

    protected override void OnParentChanged(EventArgs e) 
    { 
     base.OnParentChanged(e); 
     if (Parent != null) 
     { 
      Parent.BackColor = _initialBackColor; 
     } 
    } 
} 
+0

不能贊成票這個問題的答案(沒有足夠的聲望) ,但它的工作。謝謝!有沒有辦法告訴控制器不要選擇父母的背部顏色?那將是最好的方式。 – Sergey

+0

我不這麼認爲,下拉框表單(父級)使用視圖顏色,我認爲它是通過設計使其看起來更好 - 從屬性網格創建者的角度來看:-)。 –

相關問題