2010-11-03 15 views
5

Hallo das ist meine erste Frage von Stack Overflow, also vergib mir, wenn ich etwas Dummes tun. Nun, mein Problem ist, dass ich an einem Level-Editor arbeite und ich möchte ein PropertyGrid-Steuerelement verwenden, um Eigenschaften von Kacheln/Entities usw. zu bearbeiten. So funktioniert alles soweit, die Werte werden korrekt angezeigt, aktualisiert, wenn durch Code geändert Problem, das ich habe, ist, dass ich Werte nicht ändern kann, es sei denn, es ist ein boolescher, ich googelte viel, aber ich konnte einfach keine Lösungen finden. HierWinforms PropertyGrid - Eigenschaften nicht editierbar

ist der Code, wo ich die Eigenschaften definieren:

[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; } 

Ich kann die IsCollidable bearbeiten und wenn ich die privaten von OnScreen der Satz entfernen kann ich das bearbeiten, aber ich kann nicht bearbeiten alles andere, oh und Ich würde schätzen, wenn Sie Ihre Antworten ein bisschen einfacher fassen könnten, ich bin nicht so viel eines erfahrenen Programmierers, danke im Voraus.

Antwort

0

Ich reparierte es, ich hatte this.KeyPreview = true; In meinem Form1-Konstruktor konnte ich das Problem beheben. Danke für Ihre Hilfe!

1

Sie müssen einen benutzerdefinierten UI-Typeneditor für Ihre Klasse Vector2 erstellen.

Here's a tutorial.

5

Die meisten Standardtypen mit einer öffentlichen Eigenschaft (dh lesen + schreiben) sollten bearbeitbar sein.

Wenn Vector2 ist ziemlich einfach, und Sie wollen einfach nur in der PropertyGrid zu erweitern, dann:

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

Wenn Vector2 Ihren eigenen Code ist, dann können Sie auch Vector2 dekorieren selbst und es gilt auf alle Eigenschaften:

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

Es gibt auch einen Trick, um dies außerhalb Ihrer c für Typen zu tun Kontrolle; bei app Start laufen:

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

das Problem i bin expierencing, dass ich nicht Werte ändern können, wenn es sich um eine boolean

Ich sehe nichts in Ihrem Code, der dies erklärt. Sie brauchen nichts Besonderes zu tun int oder string Eigenschaften editierbar in einem Property zu machen, wie sie durch dieses minimal Beispiel demonstriert:

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(); 
     } 
    } 
} 

ich alle drei Eigenschaften mit dem obigen Code bearbeiten kann. Wie haben Sie festgestellt, dass Sie Werte nicht ändern können? Was siehst du genau?

+0

Ich sehe sie wie eine normale Eigenschaft Raster, nicht ausgegraut nichts kann ich den Text-Cursor und Sachen zu bewegen, aber wenn ich (Buchstaben oder Zahlen) nichts passiert. –

Verwandte Themen