Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Visibilità di oggetti nelle MultiPage di Alka

    Molti di voi avranno presente la pillola di alka ("MultiPageWinApp").

    Bhè ho questo problemuccio:

    In una Pagina-panel che chiamiamo 'MyPageAlkA' (oggetto 'BasePage' della classe di alka) ho inserito un datagridview. Avrei bisogno che la suddetta datagridview potesse essere vista anche in una Form aperta successivamente a quella in cui c'è la datagridview, poiche mi servono le coodinate della cella del datagrid da modificare attraverso alcune operazioni che vengono compiute nella finestra nuova.

    Prima di inserire il datagridview nella 'BasePage' di alka, nella nuova finestra mi bastava prefissare col nome della finestra in cui vi era contenuta:
    Dim DGVScout As DataGridView = FormBase.MyDataGridView

    ora non va più bene poichè MyDataGridView non è più un oggetto definito in 'FormBase', ma è definito nella 'MyPageAlkA'.
    Facendo:
    Dim DGVScout As DataGridView = MyPageAlkA.MyDataGridView
    poiche mi dice che "Il riferimento a un membro non condiviso richiede un riferimento a un oggetto".

    Com'è risolvibile la cosa??

    Ciao ciao

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Il problema si risolve semplicemente passando al Form, allo UserControl o al generico contenitore di riferimento che deve disporre di un elemento che si trova "da un'altra parte" il riferimento a quest'ultimo.

    In tutti gli ambiti in cui esiste, in generale, un oggetto che deve accedere ad elementi di un altro oggetto, è sufficiente fare in modo che il primo passi il riferimento dell'oggetto condiviso al secondo, oppure che il secondo vada a prelevarsi tale informazione dal primo.

    Nel tuo caso, potresti semplicemente inserire una variabile nella classe del Form che vai a creare e visualizzare, di tipo DataGridView, in cui memorizzi il riferimento del controllo DataGridView della pagina corrente al quale il Form dovrà accedere; valorizzando quella variabile e chiamando il Form, magari con un metodo personalizzato ad hoc che si occupa di inizializzarlo e di visualizzarlo, è possibile usare il riferimento contenuto nella variabile per manipolare direttamente l'oggetto collegato.

    Occorre approfondire la programmazione ad oggetti e comprendere il legame tra classi, oggetti e loro riferimenti.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Mi è abbastanza chiaro quello che mi dici!

    Speravo ci fosse un legame tra oggetti anche non fissi!
    Cioè se io ho una gerarchia del tipo:
    FormBase ->
    Pannel1 ->
    Pannel2(nel quale verrà ereditata la "MyPageAlkA")

    quindi
    MyPageAlkA ->
    MyPageAlkA (as BasePage)

    ingenuamente credevo che si potesse recuperare il MyDataGridView attraverso:

    FormPrincipale.Pannel1.Pannel2.. :master: ..MyDataGridView (das poi usare in un altra Form)

    invece, correggimi se sbagio, tu mi dicì che in in Pannel1 devo già "farle conoscere " (termine inappropriato ma che rende il concetto...credo!!!) una DataGrid (che chiamiamo EreditMyDataGridView ) dire che se in Pannel2 c'è la MyPageAlkA è MyDataGridView;

    dopo basta:
    FormPrincipale.Pannel1.EreditMyDataGridView

    Ho capito bene????

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Non saprei dirti se hai capito bene o meno poiché sono io che non ho capito nulla di ciò che devi fare. La spiegazione è alquanto contorta.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Come no...mi sembrava chiarissimo !!!

    Riassumendo...
    Sendo te devo creare un oggetto nel FormBase che eredita dal MyPageAlkA il MyDataGridView???

  6. #6
    Ho capito, ci avevo provato anche prima ma non trovavo la strada giusta per arrivarci, poi rileggendo bene la risposta ho capito che dovevo passare per i 'Controls':
    codice:
        'Riferimento del controllo DataGridView
        Private ImportDGV As MyGridView = _
                        My.Forms.FormPrincipale.PagePanel _
                            .Controls.Item("PagInserimentoDatiScout") _
                            .Controls.Item("TablePanelloPrincipale") _
                            .Controls.Item("SplitContainerDatiPartita") _
                            .Controls.Item(0) _
                            .Controls.Item("TABLEPanelloInserimDati") _
                            .Controls.Item("GroupBoxDatiGiocatori") _
                            .Controls.Item("TableDatiScoutPrincipale") _
                            .Controls.Item("Tab_DatiScoutDataGridView")
    l'unica cosa è nello SplitContainer che non riesco a riscontrare il Panel1 per cui sono andato avanti con Controls.Item(0), ma c'è un altro modo????

    Grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.