2017-07-19 95 views
5

Özel bir özellik ızgarası uyguladıktan sonra, her özelliğin etiketinin konumunu soldan sağa değiştirip değiştiremeyeceğimi bilmek istiyorum.Özellik Kılavuz: Her özelliğin görünen ad etiketini kılavuzun sağ tarafına nasıl ayarlanır?

Özel özellik kılavuzum, resimde gördüğünüz gibi özelliği gösterir.

enter image description here

ben böyle olmasını bunu değiştirmek istiyorum:

enter image description here

Bu

public class CustomPropertyGrid : PropertyGrid 
{ 

    private System.ComponentModel.Container components = null; 
    private ReperesentAttr representAttr; 
    private myTab tab; 
    public CustomPropertyGrid() 
    { 
     this.representAttr = new ReperesentAttr("", ""); 
     tab.SetRepresentAttr = this.representAttr; 
     InitializeComponent(); 
     this.PropertySort = PropertySort.Alphabetical; 
     this.RightToLeft = RightToLeft.Yes; 


    // this. 

    } 

    public ReperesentAttr SetRepresentAttr 
    { 
     set 
     { 
      representAttr = value; 
      tab.SetRepresentAttr = this.representAttr; 

     } 
    } 
    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      if (components != null) 
      { 
       components.Dispose(); 
      } 
     } 
     base.Dispose(disposing); 
    } 

    #region Codice generato da Progettazione componenti 
    /// <summary> 
    /// Metodo necessario per il supporto della finestra di progettazione. Non modificare 
    /// il contenuto del metodo con l'editor di codice. 
    /// </summary> 
    private void InitializeComponent() 
    { 
     // 
     // UserControl1 
     // 
     this.Name = "myPropertyGrid"; 

    } 
    #endregion 

    protected override PropertyTab CreatePropertyTab(Type tabType) 
    { 
     tab = new myTab(representAttr); 
     return tab; 
    } 
} 

public class myTab : PropertyTab 
{ 
    private ReperesentAttr representAttr; 
    public myTab(ReperesentAttr representAttr) 
    { 
     this.representAttr = representAttr; 
    } 

    public ReperesentAttr SetRepresentAttr 
    { 
     set 
     { 
      representAttr = value; 
     } 
    } 
    // get the properties of the selected component 
    public override System.ComponentModel.PropertyDescriptorCollection GetProperties(object component, System.Attribute[] attributes) 
    { 
     PropertyDescriptorCollection properties; 
     if (attributes != null) 
      properties = TypeDescriptor.GetProperties(component, attributes); 
     else 
      properties = TypeDescriptor.GetProperties(component); 

     //Componet must implement the ICUSTOMCLASS interface. 
     if (component is ICustomClass) 
     { 
      ICustomClass bclass = (ICustomClass)component; 

      //The new array of properties, based on the PublicProperties properties of "model" 
      PropertyDescriptor[] arrProp = new PropertyDescriptor[bclass.PublicProperties.Count]; 

      for (int i = 0; i < bclass.PublicProperties.Count; i++) 
      { 
       //Find the properties in the array of the propertis which neme is in the PubliCProperties 
       PropertyDescriptor prop = properties.Find(bclass.PublicProperties[i].Name, true); 
       //Build a new properties 
       arrProp[i] = TypeDescriptor.CreateProperty(prop.ComponentType, prop, new CategoryAttribute(this.representAttr.Category)); 

      } 
      return new PropertyDescriptorCollection(arrProp); 
     } 
     else 
     { 
      return properties; 
     } 
    } 

    public override System.ComponentModel.PropertyDescriptorCollection GetProperties(object component) 
    { 
     return this.GetProperties(component, null); 
    } 

    // PropertyTab Name 
    public override string TabName 
    { 
     get 
     { 
      return "Properties"; 
     } 
    } 

    //Image of the property tab (return a blank 16x16 Bitmap) 
    public override System.Drawing.Bitmap Bitmap 
    { 
     get 
     { 
      return new Bitmap(16, 16); 
     } 
    } 

} 
public class ReperesentAttr 
{ 
    string category = string.Empty; 
    string name = string.Empty; 
    public ReperesentAttr(string name, string category) 
    { 
     this.category = category; 
     this.name = name; 
    } 
    public string Category 
    { 
     set { category = value; } 
     get { return category; } 
    } 

    public string Name 
    { 
     set { name = value; } 
     get { return name; } 
    } 
} 
public interface ICustomClass 
{ 
    PropertyList PublicProperties 
    { 
     get; 
     set; 
    } 
} 
public class PropertyList : NameObjectCollectionBase 
{ 
    public void Add(Object value) 
    { 
     //The key for the object is taken from the object to insert 
     this.BaseAdd(((CustomProperty)value).Name, value); 
    } 

    public void Remove(String key) 
    { 
     this.BaseRemove(key); 
    } 

    public void Remove(int index) 
    { 
     this.BaseRemoveAt(index); 
    } 

    public void Clear() 
    { 
     this.BaseClear(); 
    } 

    public CustomProperty this[String key] 
    { 
     get 
     { 
      return (CustomProperty)(this.BaseGet(key)); 
     } 
     set 
     { 
      this.BaseSet(key, value); 
     } 
    } 

    public CustomProperty this[int indice] 
    { 
     get 
     { 
      return (CustomProperty)(this.BaseGet(indice)); 
     } 
     set 
     { 
      this.BaseSet(indice, value); 
     } 
    } 
    public bool HasKey(String key) 
    { 
     foreach(String item in this.BaseGetAllKeys()) 
     { 
      if(key == item) 
       return true; 
     } 

     return false; 
    } 

} 
+1

Bunu yapabileceğinizi sanmıyorum. Winforms özellik ızgarasının iç ızgarası yapılandırılamaz. –

+0

Wild guess ama belki DataGridViewCellStyle.Alignment Property yardımcı olabilir? Örnek: this.dataGridView1.Columns ["MüşteriAdı"]. DefaultCellStyle .Alignment = DataGridViewContentAlignment.MiddleRight; – krzysztofla

+0

Özellik kılavuzudur ve dataGrid'den farklıdır. @KrzysztofLa –

cevap

1

sizin CustomPropertyGrid Bu ekle Özel Mülkiyet ızgaranın ana kod bu olduğunu Başlayabilirsiniz:

const int WS_EX_LAYOUTRTL = 0x400000; 
private bool _RTL = false; 

[Description("Change to the right-to-left layout."), DefaultValue(false), 
Localizable(true), Category("Appearance"), Browsable(true)] 
public bool Mirrored 
{ 
    get 
    { 
     return _RTL; 
    } 
    set 
    { 
     if (_RTL != value) 
      _RTL = value; 
     base.OnRightToLeftChanged(EventArgs.Empty); 
    } 
} 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams CP; 
     CP = base.CreateParams; 
     if (this.Mirrored) 
      CP.ExStyle = CP.ExStyle | WS_EX_LAYOUTRTL; 
     return CP; 
    } 
} 

Gönderen https://www.microsoft.com/middleeast/msdn/mirror.aspx

+0

adreslerine bu kodu eklediğimde bir sorun vardır: etiketler sağa gider. metin gösterilmiyor. ve bir kısmı siyah olur: https://www.dropbox.com/s/qjefidstcsxqrja/puo.png?dl=0 –

+0

Bu kod Genişletilmiş pencere stillerini kullandığı veya kullandığı için, bu soruna neden olabilir. Https://msdn.microsoft.com/en-us/library/ff700543(v=vs.85).aspx adresinde genişletilmiş pencere stillerini okumak isteyebilirsiniz, ayrıca bu Windows stilleri https://msdn.microsoft .com/tr-tr/kütüphane/ms632600 (v = VS.85) .aspx. Ayrıca bu yığın taşması sorusuna bakın https://stackoverflow.com/questions/8206450/what-are-the-possible-values-for-createparams-style – DafyddNZ