PDA

View Full Version : [VB.NET] Picture in un form MDI


Quseto82
13-02-2010, 11:11
Buongiorno a tutti quanti,
dovrei inserire un immagine come sfondo di un form settato come MDI CONTAINER. Ho creato un picturebox e la metto come sfondo, il problema è che quanto apro un form figlio l'immagine mi rimane in primo piano sopra il form aperto. Ho provato con SendToBack ma così l'immagine sparisce del tutto. Ho provato a mettere l'immagine con sfondo del form, ma essendo mdi container non me la visualizza e mi fa vedere solo il classico sfondo grigio.
Vi prego aiutatemi.
Vi ringrazio saluti Francesco

MarcoGG
13-02-2010, 12:29
Strano. Sicuro di aver usato il codice corretto ?

Se Form1 è di avvio del Progetto e di tipo MDI, e Form2 è child di Form1 :

> Immagine sfondo su avvio di Form1 :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.BackgroundImage = Image.FromFile(Application.StartupPath & "\sfondo.bmp")
Me.BackgroundImageLayout = ImageLayout.Center

End Sub

> Avvio di Form 2 da Form1 ( pulsante, menu, ecc... ) :
Dim Frm2 As New Form2
Frm2.MdiParent = Me
Frm2.Show()

Non noto nulla di strano. La Form2 copre correttamente l'immagine di sfondo su Form1.

Quseto82
15-02-2010, 07:25
Buongiorno, grazie per la celere risposta.
Caricando l'immagine tramite codice, come hai detto tu, va tutto bene. Grazie. Quando invece carico l'immagine nelle proprietà del form, l'immagine non si vede proprio. E invece inserendo la picturebox questa mi rimane sempre in primo piano_!! BAH
cmq adesso ho risolto.
Grazie tante!! ;)

MarcoGG
15-02-2010, 12:44
Buongiorno, grazie per la celere risposta.
Caricando l'immagine tramite codice, come hai detto tu, va tutto bene. Grazie. Quando invece carico l'immagine nelle proprietà del form, l'immagine non si vede proprio. E invece inserendo la picturebox questa mi rimane sempre in primo piano_!! BAH
cmq adesso ho risolto.
Grazie tante!! ;)

Questo succede perchè la Form MDI deve stare ovviamente sempre in primo piano rispetto alle Form figlie. Perciò un controllo su Form MDI fa lo "scherzo" di "bucare" eventuali Form figlie.
Personalmente non trovo consigliabile mettere controlli ( pulsanti, picturebox, ecc... ) direttamente sulla Form MDI, che uso solo come Form-container-principale dell'applicazione. Buona cosa è invece mettere il menu principale dell'applicazione su Form MDI.

Un'alternativa valida è quella di inserire una "Form di sfondo", senza bordi nè controlbox, che copre tutta la client area della MDI. A questa Form di sfondo si possono aggiungere tutti i controlli e le immagini che si desiderano, e staranno in secondo piano rispetto alle successive Form figlie :

Perciò sul Form Load della MDI avremo :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim FrmSfondo As New Form_Sfondo
FrmSfondo.BackgroundImage = Image.FromFile(Application.StartupPath & "\sfondo.bmp")
FrmSfondo.BackgroundImageLayout = ImageLayout.Center
FrmSfondo.MdiParent = Me
FrmSfondo.FormBorderStyle = Windows.Forms.FormBorderStyle.None
FrmSfondo.Width = Me.ClientSize.Width - (SystemInformation.Border3DSize.Width * 2)
FrmSfondo.Height = Me.ClientSize.Height - (SystemInformation.Border3DSize.Height * 2)
FrmSfondo.Show()

End Sub

E quindi l'eventuale pulsante che mi apre la Form2 va inserito su Form_Sfondo :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Frm2 As New Form2
Frm2.MdiParent = Me.MdiParent
Frm2.Show()

End Sub

E il gioco è fatto. ;)

Quseto82
15-02-2010, 14:19
La secondo è una soluzione un po laboriosa. Cmq ho risolto adattandomi il logo con Photoshop e l'ho messo come sfondo come dicevi prima, ed il risultato pè perfetto!!
Grazie tante ancora.
p.s.
Il forum è davvero ottimo, ogni volta riuscite a trovare la soluzione!!
:) :) :)

lucausa75
05-09-2010, 08:22
Salve ragazzi,
riporto su questo vecchio thread ma ho un problema simile che vi espongo.

Ho un form MDI (Me) che successivamente al suo carimento lancia un form (frmMain) al suo interno.

Nel form MDI ho inserito una PictureBox che nell'evento Load del form MDI mi carica una immagine.

Il tutto avviene perfettamente ma il secondo form non viene caricato.
Se elimino le righe di codice relative il caricamento dell'immagine nella PictureBox il secondo form viene caricato:

Con caricamento immagine:
http://img255.imageshack.us/img255/3570/immaginenxx.th.jpg (http://img255.imageshack.us/i/immaginenxx.jpg/)

Come dovrebbe essere:
http://img294.imageshack.us/img294/8329/immagine2eo.th.jpg (http://img294.imageshack.us/i/immagine2eo.jpg/)

Senza caricamento immagine:
http://img837.imageshack.us/img837/6245/immagine3j.th.jpg (http://img837.imageshack.us/i/immagine3j.jpg/)

Questo il codice:

Private Sub MDIfrmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim FileName As String
FileName = Application.StartupPath & "\Logo1.bmp"

picLogo1.Visible = False
' Load the picture into a Bitmap.
Dim MyBitmap As New Bitmap(FileName)

Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
Me.WindowState = FormWindowState.Maximized

picLogo1.Height = Me.Height
picLogo1.Width = Me.Width

' Display the results.
picLogo1.Image = MyBitmap
picLogo1.SizeMode = PictureBoxSizeMode.StretchImage
picLogo1.Visible = True

frmMain.MdiParent = Me
frmMain.Show()

End Sub

Questo sembrerebbe la parte di codice incriminato che non mi fa caricare il secondo form:

picLogo1.Image = MyBitmap
picLogo1.SizeMode = PictureBoxSizeMode.StretchImage
picLogo1.Visible = True

Come posso risolvere?