Oppure

Loading
19/01/10 22:17
balto
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):

public class ColumnsChartProperties
    {
        private int _Count = 1;
        private string _FirstColumnText = "Prima Colonna", _SecondColumnText = "Seconda Colonna", _ThirdColumnText = "Terza Colonna", _FourthColumnText = "Quarta Colonna";
        private List<float> _FirstColumnValues = new List<float>();
        private List<float> _SecondColumnValues = new List<float>();
        private List<float> _ThirdColumnValues = new List<float>();
        private List<float> _FourthColumnValues = new List<float>();
        private List<Color> _ColumnsColors = new List<Color>();

        private string _YAxeText = "Ordinate";
        private int _MinimumValue = 0, _MaximumValue = 100, _IncrementValue = 10;

        private string _XAxeText = "Ascisse";
        private List<string> _XAxeValues = new List<string>();

        [CategoryAttribute("Generale"), DescriptionAttribute("Il numero di colonne diverse. Deve essere compreso tra 1 e 4."), DefaultValueAttribute(1)]
        public int Tipi
        {
            get { return _Count; }
            set
            {
                if (value > 0 && value <= 4)
                    _Count = value;
                else
                    _Count = 1;
            }
        }

        [CategoryAttribute("Prima Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Prima Colonna")]
        public string TestoPrimaColonna
        {
            get { return _FirstColumnText; }
            set
            {
                if (value == "")
                    _FirstColumnText = "Prima Colonna";
                else
                    _FirstColumnText = value;
            }
        }

        [CategoryAttribute("Seconda Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Seconda Colonna")]
        public string TestoSecondaColonna
        {
            get { return _SecondColumnText; }
            set
            {
                if (value == "")
                    _SecondColumnText = "Seconda Colonna";
                else
                    _SecondColumnText = value;
            }
        }

        [CategoryAttribute("Terza Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Terza Colonna")]
        public string TestoTerzaColonna
        {
            get { return _ThirdColumnText; }
            set
            {
                if (value == "")
                    _ThirdColumnText = "Terza Colonna";
                else
                    _ThirdColumnText = value;
            }
        }

        [CategoryAttribute("Quarta Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Quarta Colonna")]
        public string TestoQuartaColonna
        {
            get { return _FourthColumnText; }
            set
            {
                if (value == "")
                    _FourthColumnText = "Quarta Colonna";
                else
                    _FourthColumnText = value;
            }
        }

        [CategoryAttribute("Prima Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
        public List<float> ValoriPrimaColonna
        {
            get { return _FirstColumnValues; }
            set { _FirstColumnValues = value; }
        }

        [CategoryAttribute("Seconda Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
        public List<float> ValoriSecondaColonna
        {
            get { return _SecondColumnValues; }
            set { _SecondColumnValues = value; }
        }

        [CategoryAttribute("Terza Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
        public List<float> ValoriTerzaColonna
        {
            get { return _ThirdColumnValues; }
            set { _ThirdColumnValues = value; }
        }

        [CategoryAttribute("Quarta Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
        public List<float> ValoriQuartaColonna
        {
            get { return _FourthColumnValues; }
            set { _FourthColumnValues = value; }
        }

        [CategoryAttribute("Generale"), DescriptionAttribute("Il colore di ciascuna colonna.")]
        public List<Color> Colori
        {
            get { return _ColumnsColors; }
            set { _ColumnsColors = value; }
        }

        [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il testo da visualizzare vicino all' asse."), DefaultValueAttribute("Ordinate")]
        public string TestoY
        {
            get { return _YAxeText; }
            set
            {
                if (value == "")
                    _YAxeText = "Ordinate";
                else
                    _YAxeText = value;
            }
        }

        [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il valore minimo della scala sull' asse.\nDeve essere minore del valore massimo e dell' intervallo."), DefaultValueAttribute(0)]
        public int ValoreMinimo
        {
            get { return _MinimumValue; }
            set
            {
                if (value < ValoreMassimo && value < Intervallo)
                    _MinimumValue = value;
                else
                {
                    _MinimumValue = 0;
                    _MaximumValue = 100;
                    _IncrementValue = 10;
                }
            }
        }

        [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il valore massimo della scala sull' asse.\nDeve essere maggiore del valore minimo e dell' intervallo."), DefaultValueAttribute(100)]
        public int ValoreMassimo
        {
            get { return _MaximumValue; }
            set
            {
                if (value > ValoreMinimo && value > Intervallo)
                    _MaximumValue = value;
                else
                {
                    _MinimumValue = 0;
                    _MaximumValue = 100;
                    _IncrementValue = 10;
                }
            }
        }

        [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)]
        public int Intervallo
        {
            get { return _IncrementValue; }
            set
            {
                if (value > ValoreMinimo && value < ValoreMassimo)
                    _IncrementValue = value;
                else
                {
                    _MinimumValue = 0;
                    _MaximumValue = 100;
                    _IncrementValue = 10;
                }
            }
        }

        [CategoryAttribute("Asse delle Ascisse"), DescriptionAttribute("Il testo da visualizzare vicino all' asse."), DefaultValueAttribute("Ascisse")]
        public string TestoX
        {
            get { return _XAxeText; }
            set
            {
                if (value == "")
                    _XAxeText = "Ascisse";
                else
                    _XAxeText = value;
            }
        }

        [CategoryAttribute("Asse delle Ascisse"), DescriptionAttribute("I valori letterali da visualizzare sull'asse.")]
        public List<string> ValoriAscisse
        {
            get { return _XAxeValues; }
            set { _XAxeValues = value; }
        }
    }
Ultima modifica effettuata da balto 19/01/10 22:18
aaa
21/01/10 9:25
Il Totem
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.
aaa
21/01/10 9:31
balto
Grazie mille Totem =)
aaa