none
DRAWLINE avec vb RRS feed

  • Question

  • Bonjour

     me voici devant un problème que je sais pas résoudre  j'ai un projet de dessin qui comprend un form pour entrer les coordonnées de la ligne avec 2 bouton un pour créer la ligne et l'autre pour  terminer le projet

     chaque fois que je click sur creer la ligne je voudrais que sur le form2 le dessin  se réalise suivant les données ce qui  implique la création de plusieurs lignes  voici mon form1 et le début de code mais là  j'ai besoin de votre aide  si précieuse

    et mon début de code:

    Imports System.Drawing.Graphics
    
    Public Class Form2
    
    
    
    
        Dim mygraphics As Object, mypen As Object
    
    
    
    
        Private Sub Form2_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
            Dim g As Graphics = e.Graphics
            Dim penLine As Pen = New Pen(Color.CornflowerBlue, 1)
            Dim brosse As Pen = New Pen(Color.White, 1)
            Dim x As Single = Form1.Txt1_txtstartpointx.Text
            Dim y As Single = Form1.Txt2_txtstarty.Text
            Dim xf As Single = Form1.Txt4_txtendpoitx.Text
            Dim yf As Single = Form1.Txt5_txtrngpointy.Text
    
    
            With g
                .DrawLine(penLine, x, y, xf, yf)
    
    
    
            End With
            g.Dispose()
    
        End Sub
    
    
        Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
            Form1.Show()
            Form1.Txt1_txtstartpointx.Text = ""
            Form1.Txt2_txtstarty.Text = ""
            Form1.Txt4_txtendpoitx.Text = ""
            Form1.Txt5_txtrngpointy.Text = ""
        End Sub
    End Class
    

    un grand merci

    vendredi 25 mars 2016 12:05

Réponses

  • Re bonjour,

    Si on le fait sur une seule Form (j'ai pas le temps de le faire sur 2), ca donne ca :

    Public Class Form1
        Private ReadOnly _lines As New List(Of Line)
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim startX, endX, startY, endY as Int32
            if (Int32.TryParse(TxtStartX.Text, startX) AndAlso 
                Int32.TryParse(TxtEndX.Text, endX) AndAlso
                Int32.TryParse(TxtStartY.Text, startY) AndAlso
                Int32.TryParse(TxtEndY.Text, endY)) Then
                _lines.Add(New Line With{ 
                      .Startpoint = New Point(startX, startY),
                      .EndPoint = New Point(endX, endY)})
                PictureBox1.Invalidate
            End If
        End Sub
    
        Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
            e.Graphics.Clear(Color.White)
            For Each line As Line In _lines
                e.Graphics.DrawLine(Pens.Black, line.StartPoint, line.EndPoint)
            Next
        End Sub
    End Class
    
    Public Class Line
        Property StartPoint As Point
        Property EndPoint As Point
    End Class


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 29 mars 2016 15:35
  • Merci de marquer comme réponse si c'est ok

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse SIMONGEORGES mercredi 30 mars 2016 06:42
    mercredi 30 mars 2016 06:33

Toutes les réponses

  • Bonjour, SIMONGEORGES,

    Veuillez consulter le lien en bas :
    Forms, Controls, and Menus
    Je vous remercie par avance de votre retour.

    Cordialement,
    Teodora


    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 25 mars 2016 16:22
    Modérateur
  • merci mais  cela me dis pas comment faire helas
    vendredi 25 mars 2016 16:28
  • Bonjour,

    Il est préférable de stocker les lignes dans le Form2 genre. D'abord une classe pour stocker les infos :

    Public  Class Line
    Public Property StartPoint as Point
    Public Property EndPoint as Point
    End Class

    Ensuite stocker les lignes dans une collection de Line, avec une méthode pour ajouter une ligne :

    Private Lines as New List(Of Line)
    Public Sub AddLine(line as Line)
    Lines.Add(line)
    Me.Invalidate() 'pour forcer le redessin, donc l'event Paint)
    End Sub

    Ensuite quand on clique sur le bouton, ajouter la nouvelle ligne :

    Dim newLine as New Line()
    newLine.StartPoint = new Point(Double.Parse(txtStartPointx.Text), Double.Parse(txtStartPointy.Text))
    ....
    Form2.AddLine(newLine)

    Enfin, dans l'event Paint de votre Form2 :

    For Each line in Line
    e.Graphics.DrawLine(line.StartPoint.X, line.StartPoint.Y, line.EndPoint.X, line.EndPoint.Y)
    Next


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 29 mars 2016 07:02
  • merci beaucoup juste une question comment remplir la lit(ofline)? je vais tester cela
    mardi 29 mars 2016 12:59
  • sur la ligne for each line in line

    j’obtiens un erreur qui n'accepte pas le mot line merci de dire quoi faire

    merci encore


    Erreur	1	Le type de 'line' ne peut pas être déduit à partir d'une expression contenant 'line'.	

    mardi 29 mars 2016 13:26
  • Re bonjour,

    Si on le fait sur une seule Form (j'ai pas le temps de le faire sur 2), ca donne ca :

    Public Class Form1
        Private ReadOnly _lines As New List(Of Line)
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim startX, endX, startY, endY as Int32
            if (Int32.TryParse(TxtStartX.Text, startX) AndAlso 
                Int32.TryParse(TxtEndX.Text, endX) AndAlso
                Int32.TryParse(TxtStartY.Text, startY) AndAlso
                Int32.TryParse(TxtEndY.Text, endY)) Then
                _lines.Add(New Line With{ 
                      .Startpoint = New Point(startX, startY),
                      .EndPoint = New Point(endX, endY)})
                PictureBox1.Invalidate
            End If
        End Sub
    
        Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
            e.Graphics.Clear(Color.White)
            For Each line As Line In _lines
                e.Graphics.DrawLine(Pens.Black, line.StartPoint, line.EndPoint)
            Next
        End Sub
    End Class
    
    Public Class Line
        Property StartPoint As Point
        Property EndPoint As Point
    End Class


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 29 mars 2016 15:35
  • merci beaucoup je vais mettre en pratique

    mardi 29 mars 2016 18:58
  • Merci de marquer comme réponse si c'est ok

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse SIMONGEORGES mercredi 30 mars 2016 06:42
    mercredi 30 mars 2016 06:33