Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Problema con PropertyGrid
Forum - C# / VB.NET - [C#] Problema con PropertyGrid

Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 23:17
Martedì, 19/01/2010
Salve ragazzi, sto scrivendo un programma che utilizza un controllo PropertyGrid al fine di permettere all' utente di settare determinate proprietà. Ho fatto tutto perchè la PropertyGrid sia pronta e funziona tutto correttamente. L' unico problema è che io vorrei modificare la proprietà ReadOnlyAttribute di un elemento della PropertyGrid al variare di un altro.
Ad esempio, nella PropertyGrid ho un integer (Count) e una string(Name). Vorrei che se Count ha un certo valore, allora Name è ReadOnly, altrimenti no. Come potrei fare?

Il codice per ora è questo(solo il frammento relativo alla PropertyGrid):

Codice sorgente - presumibilmente C#

  1. public class ColumnsChartProperties
  2.     {
  3.         private int _Count = 1;
  4.         private string _FirstColumnText = "Prima Colonna", _SecondColumnText = "Seconda Colonna", _ThirdColumnText = "Terza Colonna", _FourthColumnText = "Quarta Colonna";
  5.         private List<float> _FirstColumnValues = new List<float>();
  6.         private List<float> _SecondColumnValues = new List<float>();
  7.         private List<float> _ThirdColumnValues = new List<float>();
  8.         private List<float> _FourthColumnValues = new List<float>();
  9.         private List<Color> _ColumnsColors = new List<Color>();
  10.  
  11.         private string _YAxeText = "Ordinate";
  12.         private int _MinimumValue = 0, _MaximumValue = 100, _IncrementValue = 10;
  13.  
  14.         private string _XAxeText = "Ascisse";
  15.         private List<string> _XAxeValues = new List<string>();
  16.  
  17.         [CategoryAttribute("Generale"), DescriptionAttribute("Il numero di colonne diverse. Deve essere compreso tra 1 e 4."), DefaultValueAttribute(1)]
  18.         public int Tipi
  19.         {
  20.             get { return _Count; }
  21.             set
  22.             {
  23.                 if (value > 0 && value <= 4)
  24.                     _Count = value;
  25.                 else
  26.                     _Count = 1;
  27.             }
  28.         }
  29.  
  30.         [CategoryAttribute("Prima Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Prima Colonna")]
  31.         public string TestoPrimaColonna
  32.         {
  33.             get { return _FirstColumnText; }
  34.             set
  35.             {
  36.                 if (value == "")
  37.                     _FirstColumnText = "Prima Colonna";
  38.                 else
  39.                     _FirstColumnText = value;
  40.             }
  41.         }
  42.  
  43.         [CategoryAttribute("Seconda Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Seconda Colonna")]
  44.         public string TestoSecondaColonna
  45.         {
  46.             get { return _SecondColumnText; }
  47.             set
  48.             {
  49.                 if (value == "")
  50.                     _SecondColumnText = "Seconda Colonna";
  51.                 else
  52.                     _SecondColumnText = value;
  53.             }
  54.         }
  55.  
  56.         [CategoryAttribute("Terza Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Terza Colonna")]
  57.         public string TestoTerzaColonna
  58.         {
  59.             get { return _ThirdColumnText; }
  60.             set
  61.             {
  62.                 if (value == "")
  63.                     _ThirdColumnText = "Terza Colonna";
  64.                 else
  65.                     _ThirdColumnText = value;
  66.             }
  67.         }
  68.  
  69.         [CategoryAttribute("Quarta Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Quarta Colonna")]
  70.         public string TestoQuartaColonna
  71.         {
  72.             get { return _FourthColumnText; }
  73.             set
  74.             {
  75.                 if (value == "")
  76.                     _FourthColumnText = "Quarta Colonna";
  77.                 else
  78.                     _FourthColumnText = value;
  79.             }
  80.         }
  81.  
  82.         [CategoryAttribute("Prima Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
  83.         public List<float> ValoriPrimaColonna
  84.         {
  85.             get { return _FirstColumnValues; }
  86.             set { _FirstColumnValues = value; }
  87.         }
  88.  
  89.         [CategoryAttribute("Seconda Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
  90.         public List<float> ValoriSecondaColonna
  91.         {
  92.             get { return _SecondColumnValues; }
  93.             set { _SecondColumnValues = value; }
  94.         }
  95.  
  96.         [CategoryAttribute("Terza Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
  97.         public List<float> ValoriTerzaColonna
  98.         {
  99.             get { return _ThirdColumnValues; }
  100.             set { _ThirdColumnValues = value; }
  101.         }
  102.  
  103.         [CategoryAttribute("Quarta Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
  104.         public List<float> ValoriQuartaColonna
  105.         {
  106.             get { return _FourthColumnValues; }
  107.             set { _FourthColumnValues = value; }
  108.         }
  109.  
  110.         [CategoryAttribute("Generale"), DescriptionAttribute("Il colore di ciascuna colonna.")]
  111.         public List<Color> Colori
  112.         {
  113.             get { return _ColumnsColors; }
  114.             set { _ColumnsColors = value; }
  115.         }
  116.  
  117.         [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il testo da visualizzare vicino all' asse."), DefaultValueAttribute("Ordinate")]
  118.         public string TestoY
  119.         {
  120.             get { return _YAxeText; }
  121.             set
  122.             {
  123.                 if (value == "")
  124.                     _YAxeText = "Ordinate";
  125.                 else
  126.                     _YAxeText = value;
  127.             }
  128.         }
  129.  
  130.         [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il valore minimo della scala sull' asse.\nDeve essere minore del valore massimo e dell' intervallo."), DefaultValueAttribute(0)]
  131.         public int ValoreMinimo
  132.         {
  133.             get { return _MinimumValue; }
  134.             set
  135.             {
  136.                 if (value < ValoreMassimo && value < Intervallo)
  137.                     _MinimumValue = value;
  138.                 else
  139.                 {
  140.                     _MinimumValue = 0;
  141.                     _MaximumValue = 100;
  142.                     _IncrementValue = 10;
  143.                 }
  144.             }
  145.         }
  146.  
  147.         [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il valore massimo della scala sull' asse.\nDeve essere maggiore del valore minimo e dell' intervallo."), DefaultValueAttribute(100)]
  148.         public int ValoreMassimo
  149.         {
  150.             get { return _MaximumValue; }
  151.             set
  152.             {
  153.                 if (value > ValoreMinimo && value > Intervallo)
  154.                     _MaximumValue = value;
  155.                 else
  156.                 {
  157.                     _MinimumValue = 0;
  158.                     _MaximumValue = 100;
  159.                     _IncrementValue = 10;
  160.                 }
  161.             }
  162.         }
  163.  
  164.         [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("L' intervallo tra un valore e l'altro della scala.\nDeve essere maggiore del valore minimo e minore del valore massimo."), DefaultValueAttribute(10)]
  165.         public int Intervallo
  166.         {
  167.             get { return _IncrementValue; }
  168.             set
  169.             {
  170.                 if (value > ValoreMinimo && value < ValoreMassimo)
  171.                     _IncrementValue = value;
  172.                 else
  173.                 {
  174.                     _MinimumValue = 0;
  175.                     _MaximumValue = 100;
  176.                     _IncrementValue = 10;
  177.                 }
  178.             }
  179.         }
  180.  
  181.         [CategoryAttribute("Asse delle Ascisse"), DescriptionAttribute("Il testo da visualizzare vicino all' asse."), DefaultValueAttribute("Ascisse")]
  182.         public string TestoX
  183.         {
  184.             get { return _XAxeText; }
  185.             set
  186.             {
  187.                 if (value == "")
  188.                     _XAxeText = "Ascisse";
  189.                 else
  190.                     _XAxeText = value;
  191.             }
  192.         }
  193.  
  194.         [CategoryAttribute("Asse delle Ascisse"), DescriptionAttribute("I valori letterali da visualizzare sull'asse.")]
  195.         public List<string> ValoriAscisse
  196.         {
  197.             get { return _XAxeValues; }
  198.             set { _XAxeValues = value; }
  199.         }
  200.     }


Ultima modifica effettuata da balto il 19/01/2010 alle 23:18


Importante è ricordare, ma più importante è dimenticare.
(Rainer Maria Rilke)
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:25
Giovedì, 21/01/2010
Dato che non puoi modificare gli specificatori a runtime, l'unica possibilità consiste nel lanciare un'eccezione quando Name non può essere cambiata. La PropertyGrid catturerà l'eccezione ne visualizzerà il testo in un messagebox.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 10:31
Giovedì, 21/01/2010
Grazie mille Totem =)


Importante è ricordare, ma più importante è dimenticare.
(Rainer Maria Rilke)
PM Quote