IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Supprimer la bordure d'un MDIContainer et modifier sa couleur de fond


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 106
    Points : 67
    Points
    67
    Par défaut Supprimer la bordure d'un MDIContainer et modifier sa couleur de fond
    Bonjour,

    Est-il possible de supprimer la bordure d'un MDIContainer
    et de modifier sa couleur de fond?

    Merci

  2. #2
    Membre averti
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Points : 392
    Points
    392
    Par défaut
    j'ai un peu la fléme d'ouvrir vb.net aujourd'hui

    donc regarde dans la bibliothèque d'objet a
    frm2.MdiParent
    tu devrai ab=voir des propriété et des méthode derrière

    si tu es perdu clique ici
    langage connus : xhtml/css , ASP.NET/VB.NET , JS, JQuery , PHP , SQL, PL/SQL, JAVA,
    BI : DataStage ,Essbase , BO , Microsoft BI , SAS, Talend, Cognos, Qliqview

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut mdi couleur de fond,bordure
    bonjour
    il n'est pas possible de changer la couleur de fond elle prend la couleur systeme du panneau de configuration.
    mais on peut contourner une image .
    la bordure oui c'est possible.
    voici un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'le fond avec une image dans resources (compiler avec resource incorpore)
     Me.BackgroundImage = My.Resources.Collines
    'sans bordure ni croix 
     Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    bon code.....

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    pour modifier le BackColor, il y a cette astuce que j'avais lu quelque part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            '    pour forcer la couleur de fond d'un MDI Form.
            For Each ctrl As Control In Me.Controls
                If ctrl.GetType() Is GetType(Windows.Forms.MdiClient) Then
                    ctrl.BackColor = Color.Coral '.FromArgb(202, 207, 223)
                    Exit For
                End If
            Next
    A mettre dans le Load du MDI Form et voir si cela fonctionne?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 106
    Points : 67
    Points
    67
    Par défaut
    Merci pour vos réponse.

    Après plusieurs recherches, j'ai trouvé un code qui me permet de supprimer le bord.
    Grâce au bout de code que chrismonoye a donné et celui-ci,
    mon problème est résolu.

    Voici comment résoudre ce problème:

    Créer un module du nom de MdiClientPanel.vb puis ajouter-y ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    Imports System.Runtime.InteropServices
     
    Public Class MdiClientPanel
        Inherits Panel
        Private m_mdiForm As Form
        Private ctlClient As New MdiClient()
     
     
     
     
        Public ReadOnly Property MdiForm() As Form
            Get
                If Me.m_mdiForm Is Nothing Then
                    Me.m_mdiForm = New Form()
     
                    Dim field As System.Reflection.FieldInfo = GetType(Form).GetField("ctlClient", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
                    field.SetValue(Me.m_mdiForm, Me.ctlClient)
                End If
                Return Me.m_mdiForm
            End Get
        End Property
     
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            MyBase.Controls.Add(Me.ctlClient)
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Dim mdiClient As MdiClient = Nothing
            ' Parcourt des contrôles de la Form
            For i As Integer = 0 To Me.Controls.Count - 1
     
                ' Si le Form est un MDI Container, il contient un client MDIClient
                mdiClient = TryCast(Me.Controls(i), MdiClient)
                If mdiClient IsNot Nothing Then
     
     
                    Exit For
     
                End If
            Next
     
            ' Si le contrôle MDIClient est trouvé
            If mdiClient IsNot Nothing Then
     
                Dim iStyle As Integer = Win32.GetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE)
                'Suppression du style WS_EX_CLIENTEDGE des styles étendus du contrôle courant
                iStyle = iStyle And Not Win32.WS_EX_CLIENTEDGE
                'Application du nouveau style
     
                iStyle = Win32.SetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE, iStyle)
            End If
     
            For Each ctrl As Control In Me.Controls
                If ctrl.GetType() Is GetType(Windows.Forms.MdiClient) Then
                    ctrl.BackColor = Color.White  '.FromArgb(202, 207, 223)
                    Exit For
                End If
            Next
        End Sub
    End Class
     
     
    Public NotInheritable Class Win32
        Private Sub New()
        End Sub
     
        <DllImport("user32.dll")> _
        Public Shared Function GetWindowLong(ByVal window As IntPtr, ByVal index As Integer) As Integer
        End Function
     
        <DllImport("user32.dll")> _
        Public Shared Function SetWindowLong(ByVal window As IntPtr, ByVal index As Integer, ByVal value As Integer) As Integer
        End Function
     
        Public Const GWL_EXSTYLE As Integer = -20
        Public Const WS_EX_CLIENTEDGE As Integer = &H200
     
    End Class
    Ah, j'oublais. Il permet aussi de mettre le MDI container dans un panel au lieu de la forme.
    Utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim child As New Form
    child.MdiParent = MdiClientPanel1.MdiForm

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 63
    Points
    63
    Par défaut
    Excellentissime !

    Il y a juste une boucle en trop !

    Il remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
            If mdiClient IsNot Nothing Then
     
                Dim iStyle As Integer = Win32.GetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE)
                'Suppression du style WS_EX_CLIENTEDGE des styles étendus du contrôle courant
                iStyle = iStyle And Not Win32.WS_EX_CLIENTEDGE
                'Application du nouveau style
     
                iStyle = Win32.SetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE, iStyle)
            End If
     
            For Each ctrl As Control In Me.Controls
                If ctrl.GetType() Is GetType(Windows.Forms.MdiClient) Then
                    ctrl .BackColor = Color.White'.FromArgb(202, 207, 223)
                    Exit For
                End If
            Next
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            If mdiClient IsNot Nothing Then
    
                Dim iStyle As Integer = Win32.GetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE)
                'Suppression du style WS_EX_CLIENTEDGE des styles étendus du contrôle courant
                iStyle = iStyle And Not Win32.WS_EX_CLIENTEDGE
                'Application du nouveau style
    
                iStyle = Win32.SetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE, iStyle)
                mdiClient.BackColor = Color.White
            End If
    Et pour le form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim toto As New Form2 With {.MdiParent = MdiClientPanel1.MdiForm}
            toto.Show()
        End Sub
    Le code devrais être dans les FAQ s'il n'y est pas déjà !

    EDIT :
    C'est presque parfait, il manque les TopLevel
    Il faut mettre le TopLevel de la form du Panel à false et le TopLevel de la fenêtre principal à true, sinon on ne peut plus récupérer le focus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2007, 10h18
  2. c# Comment modifier la couleur de fond d'une statusBar
    Par padodanle51 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/03/2006, 17h36
  3. Modifier la couleur de fond d'Access (97)
    Par pht33 dans le forum IHM
    Réponses: 1
    Dernier message: 08/12/2005, 23h02
  4. [JTable] Modifier la couleur de fond d'une ligne
    Par joes_bushi dans le forum Composants
    Réponses: 2
    Dernier message: 20/09/2005, 12h13
  5. Modifier la couleur de fond d'un popupmenu
    Par lil_jam63 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 05/08/2004, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo