Creare finestra proprietà oggetti

martedì 22 novembre 2005 - 10.38

GuardianOfTheFlame Profilo | Junior Member

Ciao a tutti,
sto realizzando un ambiente grafico che gestisce alcuni oggetti fondamentali: linee, rettangoli, text e picture. Devo ora realizzare una tool window ( x questo ho già il componente che mi permette di farlo senza scervellarmi troppo ) che mostra/modifica le proprietà di un oggetto selezionato nel disegno ( tipo la finestra di proprietà in Visual Studio x intenderci ).
Avete consigli su come potrei realizzarla? Magari qualche controllo che mi può aiutare di cui nn sono a conoscenza.
Mi sembra una problematica piuttosto comune e magari qualcuno mi può dare qualche utile dritta!
Gli oggetti sono salvati su un db, io pensavo di usare una griglia (userò FlexGrid che già abbiamo) con due colonne: nome proprietà e valore.
Immagino la parte + difficile sia la creazione dinamica dei controlli x inserimento del valore ( combo, text o dialog x scelta colore etc. ).

Grazie a tutti
Salo

Brainkiller Profilo | Guru

Ciao,
non usare FlexGrid c'è la classe PropertyGrid documentata nel Framework che rappresenta la finestra delle proprietà di Visual Studio. In questo modo la puoi utilizzare liberamente nelle tue applicazioni.
Se non ricordo male questa classe usa la Reflection per rappresentarti automaticamente le proprietà degli oggetti che costruisci.

Poi riguardo la deserializzazione degli oggetti da DB questa è tutt'altra cosa.

Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

GuardianOfTheFlame Profilo | Junior Member

Grazie della risposta! è stato un buono spunto, sto provando e sembra quello che ho bisogno... forse.
Per poterlo usare nel mio programma però ho bisogno di 2 requisiti fondamentali:
-poter mostrare all'utente solo alcune proprietà che io gli lascio modificare; ( è quindi possibile dire al controllo di non mostrarne alcune? )
-per alcune di queste proprietà, ho bisogno che l'utente possa scegliere tra un sottoinsieme dei valori possibili.
Un'altra cosa utile potrebbe essere modificare i nomi delle proprietà, o meglio delle label con il nome ( gli utenti vorranno vedere i nomi in italiano visto che è tutto in italiano: x es. Colore Linea al posto di LyneColor )

Se è possibile fare entrambe le cose è il controllo ideale!
Solo ci sto dando un'occhiata ma ancora nn ho trovato un modo x farlo :-(

Riciao!
Matteo

Brainkiller Profilo | Guru

>-poter mostrare all'utente solo alcune proprietà che io gli lascio
>modificare; ( è quindi possibile dire al controllo di non mostrarne
>alcune? )

Puoi marcarla come Private invece come come Public.
Questa è un'opzione.

>-per alcune di queste proprietà, ho bisogno che l'utente possa
>scegliere tra un sottoinsieme dei valori possibili.

Per questo devi creare un enumerazione (enum) di valori come per esempio la classe Color.

>Un'altra cosa utile potrebbe essere modificare i nomi delle proprietà,
>o meglio delle label con il nome ( gli utenti vorranno vedere
>i nomi in italiano visto che è tutto in italiano: x es. Colore
>Linea al posto di LyneColor )

Per questo ci sono tutta uan serie di attributi per decoreare proprietà e metodi che ti consentono di specificare il testo che appare come descrizione. Ciao


David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

GuardianOfTheFlame Profilo | Junior Member

I problemi sorgono xché passo alla propertygrid l'oggetto Metadraw, un componente esterno che uso x la grafica. Esso è un contenitore di oggetti grafici le cui proprietà ( a parte quelle generali tipo dimensione area disegno ) sono relativi all'oggetto "Corrente". la proprietà current però rappresenta un puntatore e nn l'oggetto stesso. Nn riesco quindi a passare alla property grid l'oggetto linea del metadraw ( x es. ), ma il metadraw stesso il cui oggetto corrente è la linea.
Con il risultato che vedo tutte le proprietà anche nn relative alla linea ( x es. TextHAlign ) che io nn voglio mostrare.
Non posso però modificare la definizione della classe Metadraw xché è un componente esterno di cui nn ho i sorgenti.
Ovviamente non posso nemmeno modificare le enum da loro definite.
Nn so ora se sarà necessario, ma potrei, nel caso di TextHAlign che prevede i valori Top,Bottom,Center, impedire all'utente di scegliere Center x es.?

La mia situazione è la seguente: gli oggetti li ho su un db. Ora li leggo in tabelle del dataset e uso queste info x aggiungere oggetti al metadraw.
Se nn posso risolvere i problemi che ti dicevo pocanzi, dovrei creare delle classi customizzate Linee, Rettangoli, TextBox e Immagini in cui inserire i dati letti dal db ( a questo punto immagino sia meglio usare i OledbCommand.Execute giusto? ) e creare gli oggetti sul Metadraw. Usando Id come riferimento, passo l'oggetto Linea alla PropertyGrid che mostra come voglio io xché la classe la definisco come preferisco ( e le enum le faccio in italiano ).
X fare ciò c'è molto da cambiare nel codice già scritto, x quello volevo essere sicuro che sia la strada giusta...
Se mi sai dare qualsiasi tipo di consiglio, sono ben accetti!!! ;-)
Anche solo sapere se è la cosa giusta da fare...

Grazie di nuovo,
Salo

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5