Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [VB.NET] Disegnare su una PictureBox

    Salve a tutti,
    sono decisamente un newbie del .NET, sto cercando di impararlo.
    Cercavo di rifare una classe che avevo scaricato anni fa per VB6 che trasforma una PictureBox in un display lcd disegnando delle linee sulla pb.
    per capirci avevo fatto questa stupida app:


    nel cercare di rifarla in .NET mi sono ritrovato con l'ostacolo della mancanza di un metodo PictureBox.Line(...) e cercando un po su google ho trovato un modo per disegnare sulla pb ma in modo statico, ossia all'evento PictureBox_Paint().
    Volendolo fare in modo dinamico ho provato a definire una variabile globale e all'evento PictureBox_Paint() ho assegnato il "controller grafico" della pb alla variabile globale nella speranza di poterla controllare da una subroutine dinamica... già arrivati a questo punto qualcuno di voi si sarà messo le mani nei capelli ma compatitemi, non so nulla di VB.NET e iniziare cn le cose facili non mi piace U_U

    il risultato del mio tentativo è la seguente simpatica schermata:


    qualcuno mi saprebbe spiegare a cosa è dovuto quest'errore?
    e come posso rimediare?

    grazie a chi mi degnerà di una risposta

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970

    Re: [VB.NET] Disegnare su una PictureBox

    Originariamente inviato da ultimateshadow
    Salve a tutti,
    sono decisamente un newbie del .NET, sto cercando di impararlo.
    Benvenuto nel nostro mondo.

    Cercavo di rifare una classe che avevo scaricato anni fa per VB6 che trasforma una PictureBox in un display lcd disegnando delle linee sulla pb.
    per capirci avevo fatto questa stupida app:
    Io non userei tanto le abbreviazioni, è già difficile capire le richieste se scritte normalmente, figurati con le abbreviazioni tipo sms!.

    nel cercare di rifarla in .NET mi sono ritrovato con l'ostacolo della mancanza di un metodo PictureBox.Line(...) e cercando un po su google ho trovato un modo per disegnare sulla pb ma in modo statico, ossia all'evento PictureBox_Paint().
    Volendolo fare in modo dinamico ho provato a definire una variabile globale e all'evento PictureBox_Paint() ho assegnato il "controller grafico" della pb alla variabile globale nella speranza di poterla controllare da una subroutine dinamica... già arrivati a questo punto qualcuno di voi si sarà messo le mani nei capelli ma compatitemi, non so nulla di VB.NET e iniziare cn le cose facili non mi piace U_U
    Forse è il caso di postare il codice utilizzato anche perchè non riesco a vedere le immagini, mi vengono tagliate dal Firewall aziendale.
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    scusa dai ho cercato di non abbreviare niente ma PictureBox dopo la quarta volta mi rompo le balle a scriverlo ahahah

    comunque il codice che avevo postato tramite immagine era una mera prova in un progetto nuovo non stupirti se sono solo 2 righe xD

    codice:
    Public Class Form1
        Dim G As Graphics
        Dim objPen As Pen = New Pen(Drawing.Color.Red, 1)
        Dim segH As Integer, segW As Integer, Spacer As Integer, bp
    
    
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            segH = P.Height - (P.Height / 10)
            segW = (segH / 3) * 2
            Spacer = segW / 5
            bp = New Point((P.Height / 20), Spacer)
        End Sub
    
        Private Sub P_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles P.Paint
            G = e.Graphics
        End Sub
    
        Private Sub Draw()
            'objPen.DashStyle = Drawing2D.DashStyle.Solid
            G.DrawLine(Pens.AliceBlue, 0, 0, 20, 20) 'Qua invece mi da errore. dice: Exceptio trown: parametro non valido.
            'Immagino sia dovuto al fatto che in qualche modo non è una assegnazione "legale" quella che ho fatto per G
            G.DrawLine(objPen, bp.X + 1, bp.Y, bp.X + segH, bp.Y)  'Qua c'è un BrakePoint ma non ci arriva e cmunque darebbe errore anche qui
            G.DrawLine(objPen, bp.X + 2, bp.Y + 1, bp.X + segH + 1, bp.Y + 1)
            G.DrawLine(objPen, bp.X + 3, bp.Y + 2, bp.X + segH + 2, bp.Y + 2)
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Draw()
        End Sub
    End Class
    questo è quanto

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Un po contorto.....direi che così ha molto più senso:

    codice:
     Public Class Form1
            Dim G As Graphics
            Dim objPen As Pen = New Pen(Drawing.Color.Red, 1)
            Dim segH As Integer, segW As Integer, Spacer As Integer, bp
    
            Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                segH = P.Height - (P.Height / 10)
                segW = (segH / 3) * 2
                Spacer = segW / 5
                bp = New Point((P.Height / 20), Spacer)
            End Sub
    
            Private Sub P_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles P.Paint
                e.Graphics.DrawLine(Pens.AliceBlue, 0, 0, 20, 20) 'Qua invece mi da errore. dice: Exceptio trown: parametro non valido.
                e.Graphics.DrawLine(objPen, bp.X + 1, bp.Y, bp.X + segH, bp.Y)  'Qua c'è un BrakePoint ma non ci arriva e cmunque darebbe errore anche qui
                e.Graphics.DrawLine(objPen, bp.X + 2, bp.Y + 1, bp.X + segH + 1, bp.Y + 1)
                e.Graphics.DrawLine(objPen, bp.X + 3, bp.Y + 2, bp.X + segH + 2, bp.Y + 2)
            End Sub
        End Class
    Manca oltretutto l'assegnazione di P ( segH = P.Height - (P.Height / 10), cos'è? e quel bp solitario?

    Ovviamente non posso controllare il senso delle coordinate X, Y delle tue linee.
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    ok ok P è la Form o la PictureBox, ma il disegno che crea non mi dice nulla.
    Sbagliare è umano, perseverare è diabolico.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ovvero:
    Immagini allegate Immagini allegate
    Sbagliare è umano, perseverare è diabolico.

  7. #7
    eh ma così l'avevo fato anche io! ah comunque P è il nome della PictureBox1 e il disegno al momento non mi interessa: è una riga!
    tornando a noi, quello che mi manca a quanto pare è QUANDO c'è il trigger dell'evento paint
    ma anche capendo questo mi sfugge come posso disegnare sulla picturebox in un secondo momento e magari cose diverse a seconda di eventuali argomenti passati alla subroutine che tu mi hai crudelmente ( ) eliminato.

    cioè lo scopo della classe sarebbe di creare una sub che prende in ingresso una stringa e la stampa sullo schermo lcd la scritta corrispondete, se potessi vedere la prima immagine che ho postato capiresti subito cosa intendo...

    tu immaigna l'lcd dell'autoradio: sintonizzi 105 allora l'autoradio usa il metodo Draw("105") e magari dopo un intervallo di tempo Draw("Artista - Brano")

    questo non lo posso fare se il disegno lo creo nel P_Paint() perchè eseguirebbe sempre lo stesso disegno a prescindere da cosa io voglio che scriva

    il codice in vb6 aiuterebbe? potrei postarti la classe xD

  8. #8
    ammazza, stavo rileggendo la mia ultima risposta... mi spiego veramente male... scusa... se non hai capito cosa sto dicendo te lo riscrivo!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    tornando a noi, quello che mi manca a quanto pare è QUANDO c'è il trigger dell'evento paint
    Quando viene ridisegnato il Form o la PictureBox, ovvero quando la PictureBox ad esempio esce dai limiti dello schermo opuure viene coperta da un'altro Form e poi scoperta oppure forzando il disegno con il metodo .Refresh


    ma anche capendo questo mi sfugge come posso disegnare sulla picturebox in un secondo momento e magari cose diverse a seconda di eventuali argomenti passati alla subroutine che tu mi hai crudelmente ( ) eliminato.
    Chiedo umilmente perdono

    cioè lo scopo della classe sarebbe di creare una sub che prende in ingresso una stringa e la stampa sullo schermo lcd la scritta corrispondete, se potessi vedere la prima immagine che ho postato capiresti subito cosa intendo...
    Qualche piccola modifica:

    codice:
    Public Class Form1
    
        Dim objPen As Pen = New Pen(Drawing.Color.Red, 1)
        Dim segH As Integer, segW As Integer, Spacer As Integer, bp
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            segH = Me.Height - (Me.Height / 10)
            segW = (segH / 3) * 2
            Spacer = segW / 5
            bp = New Point((Me.Height / 20), Spacer)
        End Sub
    
        Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
            Draw()
        End Sub
    
        Sub Draw()
            Dim g As Graphics = PictureBox1.CreateGraphics
            g.DrawLine(Pens.AliceBlue, 0, 0, 20, 20)
            g.DrawLine(objPen, bp.X + 1, bp.Y, bp.X + segH, bp.Y)
            g.DrawLine(objPen, bp.X + 2, bp.Y + 1, bp.X + segH + 1, bp.Y + 1)
            g.DrawLine(objPen, bp.X + 3, bp.Y + 2, bp.X + segH + 2, bp.Y + 2)
            g.Dispose()
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Draw()
        End Sub
    
    End Class
    Sbagliare è umano, perseverare è diabolico.

  10. #10
    ti concedo il perdono per la cancellazione

    in ogni caso sai che pensavo di aver fatto moooolto più casino..

    grazie mille per l'aiuto!! ora mi è tutto (quanto riguarda il draw sulle picturebox) chiaro! :P

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 © 2024 vBulletin Solutions, Inc. All rights reserved.