2010-11-03 30 views
5

Hola, esta es mi primera pregunta sobre el desbordamiento de pila, así que perdónenme si hago algo estúpido. Bueno, mi problema es que estoy trabajando en un editor de niveles y quiero usar un control PropertyGrid para editar las propiedades de los mosaicos/entidades, etc. así que todo funciona hasta ahora, los valores se muestran correctamente, se actualizan cuando se cambian a través del código pero el El problema que estoy explicando es que no puedo cambiar los valores a menos que sea un booleano, busqué en Google pero simplemente no pude encontrar soluciones.Winforms PropertyGrid - propiedades no editables

Este es el código en el que definen las propiedades:

[Description("Defines the Position on the screen")] 
    public Vector2 screenpos { get; set; } 
    Vector2 WorldPos; 
    [Description("Defines the texture of the selected tile")] 
    public string texture { get; set; } 
    [Description("Defines if the player can collide with this tile")] 
    public bool IsCollidable { get; set; } 
    [Description("Defines on what layer this tile is drawn (1-3)")] 
    public int Layer { get; set; } 
    [Description("Shows if the tile is currently visible on the screen")] 
    public bool OnScreen { get; private set; } 

puedo editar el IsCollidable y si quito lo privado de conjunto de OnScreen puedo editar lo mismo, pero no puedo editar cualquier otra cosa, ah y Me gustaría aclararles si pudieran expresar sus respuestas de una manera un tanto más simple. No soy un programador experimentado, gracias de antemano.

Respuesta

0

Lo arreglé, tuve this.KeyPreview = true; en mi constructor de Form1, eliminando que podría solucionar el problema. ¡Gracias por toda tu ayuda!

1

Necesita crear un Editor de tipos de interfaz de usuario personalizado para su clase Vector2.

Here's a tutorial.

5

La mayoría de los tipos estándar con una propiedad pública (es decir, lectura + escritura) deben ser editables.

Si Vector2 es bastante simple, y lo que desea que se expanda en el PropertyGrid, entonces:

[Description("Defines the Position on the screen")] 
[TypeConverter(typeof(ExpandableObjectConverter))] 
public Vector2 screenpos { get; set; } 

Si Vector2 es su propio código, a continuación, también puede decorar Vector2 y se aplicará a todas las propiedades:

[TypeConverter(typeof(ExpandableObjectConverter))] 
public {class|struct} Vector2 {...} 

también hay un truco para hacer esto para los tipos fuera de su c ontrol; en el inicio de aplicaciones, ejecute:

TypeDescriptor.AddAttributes(typeof(Vector2), 
    new TypeConverterAttribute(typeof(ExpandableObjectConverter))); 
0

El problema que estoy expierencing es que no puedo cambiar los valores a menos que sea un valor lógico

no veo nada en su código que explica esto. No es necesario hacer nada especial para hacer int o string propiedades editables en un PropertyGrid, como lo demuestra este mínimo ejemplo:

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication13 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
     } 
    } 

    public class Test 
    { 
     public string StringProperty { get; set; } 
     public int IntProperty { get; set; } 
     public bool BoolProperty { get; set; } 
    } 

    class MainForm : Form 
    { 
     public MainForm() 
     { 
     var propertyGrid = new PropertyGrid() { Dock = DockStyle.Fill }; 
     this.Controls.Add(propertyGrid); 
     propertyGrid.SelectedObject = new Test(); 
     } 
    } 
} 

puedo editar las tres propiedades con el código de seguridad. ¿Cómo determinaste que "no puedes cambiar los valores"? ¿Qué estás viendo exactamente?

+0

Los veo como una cuadrícula de propiedad normal, no en gris, puedo mover el cursor de texto y demás, pero si escribo (letras o números) no pasa nada. –

Cuestiones relacionadas