Come posso visualizzare stringhe personalizzate quando sono selezionati più elementi?

StackOverflow https://stackoverflow.com/questions/634630

  •  10-07-2019
  •  | 
  •  

Domanda

Ho una griglia di proprietà che mi aiuta a gestire tutti i controlli in un modulo. Questi controlli sono per gente di tipo designer, quindi non sono molto preoccupato per l'interfaccia utente ... fino a quando qualcuno seleziona più oggetti.

Ho un UITypeEditor per " EffectiveDiameter " proprietà su questi oggetti comuni. Tiene traccia delle unità (metri contro piedi) e fa al volo alcune cose carine. Tuttavia, quando qualcuno seleziona due o tre oggetti comuni, EffectiveDiameter è vuoto, anche se restituisce la stessa stringa di testo.

Ad esempio, nella maggior parte dei controlli, Microsoft ha " Anchor " proprietà che ha un output di testo di "Top, Right". Quando lo tiri giù è un oggetto con un bel UITypeEditor. Tuttavia, quando selezioni cinque oggetti nel tuo modulo che hanno tutti la stessa impostazione di ancoraggio, puoi comunque vedere la stringa "In alto, A destra". nella griglia delle proprietà.

/// <summary>
/// The default containing class for all Unit-Management Conversion classes.
/// </summary>
[
 Serializable,
 EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)),
 TypeConverter(typeof(umConversionTypeConverter)),
]
public class umConversion
{
    ...
}


public class umConversionTypeEditor : UITypeEditor
{
    ...
}



// Now, in my designer class, I have ...
private double _effectiveDiameter { get; set; }

[DisplayName("Effective Diameter")]
public virtual umConversion EffectiveDiameter
{
    get
    {
            umConversion ret = new umConversion (_effectiveDiameter);
            ret.MeasureInSI = _si;
            return ret;
        }
        set
        {
           _effectiveDiameter = value.ImperialUnits;
        }
    }
}

Se seleziono diversi dei miei oggetti personalizzati, tutti con lo stesso diametro effettivo, come posso visualizzare EffectiveDiameter nella PropertyGrid come fa Anchor? In questo momento, quel campo è sempre vuoto.

È stato utile?

Soluzione

Dalla tua descrizione sembra che tu stia parlando dell'effettivo Diametro di tipo doppio. Ma nel tuo esempio stai mostrando un UITypeEditor per la classe umConversion. Quindi, per favore, chiarisci.

Se sei nel secondo caso, dove la tua proprietà è in realtà una classe tua e non un tipo primitivo, assicurati di implementare il metodo Equals. La classe MultiPropertyDescriptorGridEntry in PropertyGrid MS chiama Equals per sapere se tutte le istanze di destinazione hanno lo stesso valore. Non sono sicuro che questo sia il tuo problema, ma lo testerei per eliminare questa possibilità.

Altri suggerimenti

Posiziona un attributo TypeConverter anche su ogni proprietà ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top