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。 任何人對於爲什麼以及如何避免它有任何想法?我可以去調用一個表單,但我寧願堅持下拉。
在此先感謝!
不能贊成票這個問題的答案(沒有足夠的聲望) ,但它的工作。謝謝!有沒有辦法告訴控制器不要選擇父母的背部顏色?那將是最好的方式。 – Sergey
我不這麼認爲,下拉框表單(父級)使用視圖顏色,我認爲它是通過設計使其看起來更好 - 從屬性網格創建者的角度來看:-)。 –