+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Coordinate errate di un controllo in UserControl

  1. #1
    L'avatar di GarGia1960
    GarGia1960 non è in linea Scolaretto
    Post
    252

    Coordinate errate di un controllo in UserControl

    Salve a tutti,

    allora il mio problema e' che ho creato un controllo utente
    che dovrebbe essere un Panel modificato o migliorato
    da ora in poi lo chiamo ucPanel (usercontrolPanel),
    con visualizzazione 3D, testo, ecc...

    Allora finche' lo metto nel form tutto ok.
    Quando inserisco un nuovo controllo in ucPanel
    mi vengono fuori le coordinate del contenitore dove si trova ucPanel.

    Questo e' il codice completo di ucPanel

    codice:
    Imports System.ComponentModel
    Imports System.Drawing.Drawing2D
    
    Public Class ucPanel3D
    
        Private txt As String
    
        Private Sub Panel3DInit(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.AutoScaleMode = AutoScaleMode.None
            SetStyle(ControlStyles.ResizeRedraw, True)
        End Sub
        
        <Browsable(True), Description("Title text")> Public Property Caption() As String
            Get
                Return txt
            End Get
            Set(ByVal value As String)
                txt = value
                Me.Invalidate()
            End Set
        End Property
    
    
    
        Private Sub DrawPanel(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
            Dim gr As Graphics = e.Graphics
            Dim fnt As Font = Me.Font
    
            gr.SmoothingMode = SmoothingMode.HighQuality
    
            Dim rect As Rectangle = Me.ClientRectangle
            ControlPaint.DrawBorder3D(gr, rect)                      REM Disegno un bordo 3D
    
            Dim LText As Integer = gr.MeasureString(txt, fnt).Width
            Dim posX As Integer = (rect.Width - LText) / 2
    
            gr.DrawString(txt, fnt, Brushes.Blue, posX, 1)           REM Centro un titolo sul controllo
    
        End Sub
    End Class
    Da quello che intuisco il controllo in se stesso non e' un contenitore,
    come faccio a renderlo tale e che mi accetti altri controlli.

    Vi ringrazio fin da adesso per un'eventuale risposta.

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,251
    Blogs
    5
    SetStyle(ControlStyles.ContainerControl, True)
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    L'avatar di GarGia1960
    GarGia1960 non è in linea Scolaretto
    Post
    252
    Grazie ho provato , dopo ricompilazione non mi funziona.
    Intanto cerchero' di informarmi meglio sul web

  4. #4
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    286
    Non capisco da dove erediti... Gestisci gli eventi di MyBase, ma qual è?

  5. #5
    L'avatar di GarGia1960
    GarGia1960 non è in linea Scolaretto
    Post
    252
    Ho risolto cosi dal Web:

    codice:
    Imports System.ComponentModel
    Imports System.Drawing.Drawing2D
    
    Public Class ucPanel3D
        Inherits ContainerControl
        Implements IContainer
    
    
        Sub New()
    
            ' La chiamata è richiesta dalla finestra di progettazione.
            InitializeComponent()
    
            ' Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent().
            'MyBase.AutoScaleMode = AutoScaleMode.None
            SetStyle(ControlStyles.ResizeRedraw Or ControlStyles.ContainerControl, True)
        End Sub
        Private txt As String
    
        <Browsable(True), Description("Title text")> Public Property Caption() As String
            Get
                Return txt
            End Get
            Set(ByVal value As String)
                txt = value
                Me.Invalidate()
            End Set
        End Property
    
        Private ReadOnly Property IContainer_Components As ComponentCollection Implements IContainer.Components
            Get
                Throw New NotImplementedException()
            End Get
        End Property
    
        Private Sub DrawPanel(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
            Dim gr As Graphics = e.Graphics
            Dim fnt As Font = Me.Font
    
            gr.SmoothingMode = SmoothingMode.HighQuality
    
            Dim rect As Rectangle = Me.ClientRectangle
            ControlPaint.DrawBorder3D(gr, rect)                      REM Disegno un bordo 3D
    
            Dim LText As Integer = gr.MeasureString(txt, fnt).Width
            Dim posX As Integer = (rect.Width - LText) / 2
    
            gr.DrawString(txt, fnt, Brushes.Blue, posX, 1)           REM Centro un titolo sul controllo
    
        End Sub
    
        Public Sub Add(component As IComponent) Implements IContainer.Add
            Throw New NotImplementedException()
            MyBase.Container.Add(component)
        End Sub
    
        Public Sub Add(component As IComponent, name As String) Implements IContainer.Add
            Throw New NotImplementedException()
            MyBase.Container.Add(component)
        End Sub
    
        Public Sub Remove(component As IComponent) Implements IContainer.Remove
            Throw New NotImplementedException()
            MyBase.Container.Remove(component)
        End Sub
    End Class

    Se possibile potrei avere un vostro parere se c'e' codice superfluo.

    A me funziona
    Grazie.

  6. #6
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    286
    Quote Originariamente inviato da GarGia1960 Visualizza il messaggio
    Ho risolto cosi dal Web:
    Ah ecco... Adesso che erediti ha senso.
    Quote Originariamente inviato da GarGia1960 Visualizza il messaggio
    Se possibile potrei avere un vostro parere se c'e' codice superfluo.
    L'implementazione dell'interfaccia è inutile. Basta notare che Visual Studio ha predisposto il sollevamento delle eccezioni nei metodi e nella proprietà.

  7. #7
    L'avatar di GarGia1960
    GarGia1960 non è in linea Scolaretto
    Post
    252
    OK , Grazie

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi