Newsgroup: it.comp.lang.visual-basic
Titolo: Maledetti cambiamenti da VB6 a NET vediamo chi ci riesce !!!

Attenzione importantissimo... provate a realizzare un wizard usando il 
controllo Panel di VB2008 Express... intendo il classico wizard con i 
pulsanti "Avanti" "Indietro" e "Fine" fatemi sapere se ci riuscite... deve 
essere visibile un solo pannello per volta fino al completamento del wizard, 
ma i pannelli devo essere sovrapposti come qualsiasi wizard serio che sia 
degno di tale nome.
Io ho fallito clamorosamente... sembrerebbe che VB2008 tratta i pannelli in 
maniera completamente diversa da VB6, ad esempio:
Quando si disegna un wizard in modalita progettazione si ricorre di solito 
ad un form ed ai Panel(Contenitori) ma provate a disegnarne anche solo 2 che 
acquisiscano qualunque informazione vogliate... o semplicemente che 
contengano 2 button.
Tutti o quasi saprete certamente che vanno resi invisibili o meglio se ne 
rende visibile uno per volta... io cosi facevo in VB6, ma oggi ho avuto una 
sgraditissima sorpresa da VBNET. mi sono accorto che sovrapponendo 2 
pannelli, questi vengono incapsulati l'uno dentro l'altro (provate anche voi 
a farlo graficamente in modalità progettazione) per ottenere questo in VB6 
si doveva ricorrere al taglia e incolla, ovvero tagliavo il pannello 
selezionavo eventualmente un altro pannello e c'è lo incapsulavo dentro con 
incolla...(così si è giustificabile l'incapsulamento) ora questo potrebbe 
essere utile in qualche situazione, ma non nel mio caso... i pannelli devono 
essere sovrapposti ma non incapsulati uno nell'altro... ecco il problema 
VBNET incapsula anche quando nn lo si vuole... e adesso come lo realizzo il 
wizard ??? sono incazzato nero, perchè i miei pannelli devono essere 
sovrapposti e resi tutti invisibili tranne quello che viene compilato 
dall'utente in quel momento che rendo visibile ad esempio con 
"Panel1.Visible=true" ma il VB li incapsula anche con la semplice 
sovrapposizione grafica...in fase di progettazione ma che hanno combinato 
quelli di redmond ?
A me basterebbe sapere se vi è una scappatoia per evitare l'incapsulamento 
da sovrapposizione... se nn si può ovviare a questo dovrò realizzare un 
wizard multifinestra come ai tempi di WIN3.11 ma come siamo ridotti ?
Vediamo chi riesce in questa + che banale impresa, il prodotto con cui 
provare è VB2008 Express edition !!!
Fatemi sapere !

Ivan wrote:
[CUT]
Tieni premuto SHIFT mentre trascini il secondo panel per farlo collimare col 
primo.
Bye
Raf 

"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:g1jq30$rbq$1...@alix.livenet.it...

Niente da fare nn mi risolve il problema neppure cosě... comportamento 
identico sia con SHIFT destro che con sinistro !!! 

 identico sia con SHIFT destro che con sinistro !!! 
Io non ho avuto problemi,
shift sinistro e trascino il panel2 sopra il panel1 fino a quando il 
bordo non diventa blu.
ciao
stefano


Ok ha funzionato... grazie mille...perchè prima non andava ? ecco cosa hai 
in buona fede omesso di dirmi o suggerirmi perchè tutto questo funzioni.
1) Io utilizzo i panel senza bordi ecco perchè non potevo vedere diventare 
il bordo blu io li vedo tratteggiati in fase progettazione i suddetti bordi 
in quanto è cosi che VBNET li mostra senza bordo in fase progettazione.
2) Contano anche le dimensioni sembrerebbe, ovvero io avevo fatto collimare 
i bordi dei panel con quelli superiore, sinistro e destro del form, cosa che 
mi ingannava otticamente probabilmente... o meglio i 2 panel forse non erano 
perfettamente uguali come dimensioni e forse anche questo incasinava 
ulteriormente il tutto.
Ecco come ho risolto:
Ho evitato di ancorarmi direttamente ai bordi del form mantenendo sempre i 
panel bordless in modo che comunque grazie all'assenza dei bordi il wizard 
appare anche piu professionale a mio vedere, agendo in questo modo ho potuto 
dimensionare perfettamente i panels, finalmente libero dall'indesiderato ed 
inevitabile effetto ottico che si ha ancorandosi ai bordi della form... con 
le dimensioni finalmente uguali dei due panel ho dunque potuto sovrapporli 
in modo preciso con metodo suggeritomi del tasto SHIFT, devo tuttavia 
segnalare che il bordo non diventa affatto blu se i panel sono bordless, e 
questo può ingannare e far pensare al peggio, ma in sintesi funziona !
Grazie Raf e Grazie Stefano, se non avessi potuto risolvere avrei fatto un 
grosso passo indietro stile win 3.11 wizard multiform... roba che l'utente 
si scazza già prima di usare il software se si realizzano dei wizard simili 
nel 2008.
:) 


Prego
Ah, dimenticavo: puoi anche usare i tasti cursore per spostare i controlli 
(+shift per ridimensionare), se col mouse trovi questo tipo di difficoltà...
Ciao
Raf 

 in buona fede omesso di dirmi o suggerirmi perchč tutto questo funzioni.
ooooops  :-)
chiedo venia, ma non ci ho proprio pensato.
In effetti come "modus operandi" mi sembra un po' farraginoso, non č 
esattamente immediato riuscire a sovrapporre correttamente i due panel.
Comunque penso ci sia un modo piů immediato solo che magari non lo 
conosciamo.
ciao
stefano

 nel 2008.
Anche in VB6 comunque, per quel tipo di finestre ho sempre trovato
piu' comodo mettere i pannelli non allineati in fase di design, in
modo che fosse piu' chiaro quanti e come erano fatti, facendo poi
semplicemente nel Form_Load un banale ciclo di Move e ZOrder in modo
da metterli a posto... in questo modo era anche piu' facile editarli
perche' non era necessario ricordarsi ogni volta di riposizionarli e
portare davanti quello desiderato prima di salvare.
Gia' che parli di "multiform", c'e' un altro sistema simpatico con cui
puoi ottenere l'effetto wizard in 
VB.NET
 che in molti casi e' ancora
piu' versatile del sistema a pannelli sovrapposti: in pratica disegni
la finestra master con in basso i classici pulsanti avanti-indietro
ecc.. e al centro un *unico* panel vuoto; quindi aggiungi al progetto
tante finestre quante sono le tue schede, disegnando in ciascuna i
controlli desiderati come fosse una form normale
A questo punto puoi incapsulare le finestre figlie (non parliamo di
MDI, sono proprio form standard) nel pannello della finestra madre,
con una chiamata del genere:
'Supponiamo MainWizardForm sia la finestra master e che panelMain sia
il pannello vuoto al centro
Public Class MainWizardForm
    Inherits System.Windows.Forms.Form
    Dim currentPage As Form
    Dim pages as New List(Of Form)
    Private Sub MainWizardForm_Load(ByVal sender As Object, ByVal e As
System.EventArgs) _
        Handles MyBase.Load
        pages.Add(New Pagina1Form)
        pages.Add(New Pagina2Form)
        'ecc... questa lista servira' per gestire lo spostamento
avanti-dietro
        'che non ho omesso
    End Sub
    Private Sub ShowPage(ByVal f As Form)
      'Togliamo bordi e barra del titolo e cambiomo il Dock per
      'riempire il Panel interamente
      f.FormBorderStyle = Windows.Forms.FormBorderStyle.None
      f.TopLevel = False
      f.Dock = DockStyle.Fill
      'chiudiamo la pagina corrente, se c'e', e mostriamo quella nuova
      If Not currentPage Is Nothing Then
         currentPage.Close()
         currentPage = Nothing
      End If
      currentPage = f
      panelMain.Controls.Add(currentPage)
      currentPage.Show()
    End Sub
End Class
l'effetto estetico e' indistinguibile, la complessita' del codice
praticamente identica ed e' anzi meglio riutilizzabile, e hai altri
effetti collaterali vantaggiosi, come ad esempio il fatto di poter
pescare le form-scheda da DLL separate, il fatto di poter derivare una
form da un'altra e includerla come nuova pagina ecc...

Il Thu, 29 May 2008 07:02:45 -0700 (PDT), Luca D ha scritto:
[cut]
Ottimo spunto, però perché non usare un tab control che tramite le tab
pages gestisce il layout dei singoli tabs ? Si potrebbe pensare di
nascondere e/o attivare i singoli tab tramite i tasti Avanti e Indietro
Just my 5 cents
Ciao
PaF


Si puo' fare anche con I tab, ma in sostanza restano una variante dei
panel, nel senso che devi comunque lavorare con tutti i controlli di
tutte le schede in un'unica finestra, quella invece e' un'alternativa
per poter lavorare a finestre separate

Ottimi suggerimenti ne farò tesoro... ormai in questo caso proseguo con i 
panel nn ho voglia di rifare !!! :)
Potrebbe essere che testerò questa idea in progetti futuri... intanto c'è da 
vedere se e per quando riesco a terminare il lavoro... una regia automatica 
audio... è abbastanza impegnativa... ma sto superando scoglio dopo scoglio, 
anche grazie al presente NG !!!
A risentirci al prossimo intoppo dunque ;)

pannelli, questi vengono incapsulati l'uno dentro l'altro 
Io in questi casi agisco a basso livello andando a modificare il
codice che crea l'IDE, non so in VB ma in C# c'è una procedura nella
classe della form InitializeComponent che crea tutti gli oggetti della
form e ne assegna le proprietà, smanettandoci dentro (anche se
sconsigliato da microsoft) si possono risolvere problemi che
graficamente sembrano insormontabili.
Ciao
-- 
Fritz
Togli *ERASE* per rispondere in e-mail.

 ha scritto nel messaggio 
news:483ee51c$0$18152$4faf...@reader3.news.tin.it...


 ha scritto nel messaggio 
news:irms345hp3cblkofi...@4ax.com...
