2013-10-18 81 views

回答

4

我設法使用個性化的顏色選擇器對話框中的屬性網格和這裏的情況下,它的複製代碼一些需要太:

using System; 
using System.ComponentModel; 
using System.Drawing; 
using System.Drawing.Design; 
using System.Windows.Forms; 
using System.Windows.Forms.Design; 

namespace HelpersLib 
{ 
    public class MyColorEditor : UITypeEditor 
    { 
     public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 
     { 
      return UITypeEditorEditStyle.Modal; 
     } 

     public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 
     { 
      if (value.GetType() != typeof(RGBA)) 
      { 
       return value; 
      } 

      IWindowsFormsEditorService svc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); 

      if (svc != null) 
      { 
       using (DialogColor form = new DialogColor((RGBA)value)) 
       { 
        if (svc.ShowDialog(form) == DialogResult.OK) 
        { 
         return form.NewColor.RGBA; 
        } 
       } 
      } 

      return value; 
     } 

     public override bool GetPaintValueSupported(ITypeDescriptorContext context) 
     { 
      return true; 
     } 

     public override void PaintValue(PaintValueEventArgs e) 
     { 
      using (SolidBrush brush = new SolidBrush((RGBA)e.Value)) 
      { 
       e.Graphics.FillRectangle(brush, e.Bounds); 
      } 

      e.Graphics.DrawRectangleProper(Pens.Black, e.Bounds); 
     } 
    } 
} 

,這是它的外觀在屬性網格:

screenshot1

當我點擊它的按鈕,它會打開custom color dialog

但仍然有一個問題,我無法解決。 我無法將Color結構與此UITypeEditor一起使用,因此創建了RGBA類。 當我使用的顏色結構,它是這樣的:

screenshot2

我將打開另一個問題吧我猜:Custom ColorEditor does not work properly on Color struct

1

要與PropertyGrid互動,您必須創建屬於自己的「屬性類」(as described here)。您可以自定義不同的部件,因此可以根據需要提供多種解決方案。作爲第一種方法,您的問題,在這裏你有propertyGrid1代碼:

Property curProperty = new Property(); 
propertyGrid1.SelectedObject = curProperty; 

Property被定義爲:

public class Property 
{ 
    private ColorDialog _dialog = new customColorDialogDialog(); 

    public ColorDialog dialog 
    { 
     get { return _dialog; } 
     set { _dialog.ShowDialog(); } 
    } 
} 
class customColorDialogDialog : ColorDialog 
{ 

} 

在這段代碼中,你的顏色對話框(customColorDialogDialog)被觸發,當點擊在屬性名稱(「對話框」)右側的單元格上。

+0

我喜歡這個圖像效果:https://dl.dropbox.com/u/14076298/ShareX/2013/10/d4Z3Ue8VNH.png,我不能修改顏色類,因爲我使用這個上課節省太多,它會看起來很糟糕。所以解決方案必須具有屬性。 – Jaex

+0

@Jaex我明白你已經創建了一個自定義的ColorDialog(從我的示例代碼中繼承ColorDialog),它將圖片中引用的類作爲其屬性之一,是不是?就定義了ColorDialog類的類而言,您不需要擔心其他任何事情;只需將我的customColorDialog:ColorDialog替換爲您的類。 – varocarbas

+0

@Jaex你能否用定義你自定義顏色對話框的代碼更新你的問題?這樣,我就能更清楚地解決你的疑惑。 – varocarbas

相關問題