Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    252

    [VB2010 WINFORM] creare piu pulsanti in un controllo

    ciao,
    ho la necessità di creare piu pulsanti in posizioni diverse all'interno di un controllo e poi di gestire le funzioni separate.
    nel codice che segue ho creato un pulsante , e credevo che ripetendo la funzione mi avrebbe creato altri pulsanti in posizioni diverse come si vede da "x" che varia ma così non è .
    il mio risultato vorrebbe essere quello di avere 10 20 50 100 pulsanti uguali in posizioni diverse e con nome diverso per poi associargli altre funzioni da richiamare al click degli stessi.

    codice:
    Public buttonV As New Button()
    public x = 0
    
    
    Me.NoteBox.Controls.Add(buttonV)
            buttonV.Size = New Size(20, 20)
            buttonV.BackColor = Color.Green
            buttonV.Location = New Point(x, 30)
            buttonV.Text = ""
            x = x + 20
    P.s. sono certo che alla fine i pulsanti in questione possono anche essere 400 circa. secondo voi crea problemi alla pesantezza del programma ? altre soluzioni? grazie

  2. #2
    Il codice che hai postato dovrebbe funzionare, forse accade che li disegni uno sopra l'altro, in quanto la variabile x si azzera ogni volta che ripeti la funzione. Ad ogni modo, se per esempio tu volessi creare una sorta di griglia (tipo il gioco Campo Minato) non è conveniente usare tanti Button, ma è preferibile progettare un usercontrol che disegni direttamente l'interfaccia mediante i metodi GDI della classe Graphics. Gli eventi click li puoi intercettare basandoti sulle coordinate effettive del mouse all'interno dello usercontrol. Un simile sistema è molto più snello e occupa meno risorse.
    Chi non cerca trova.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    252
    in realtà non si ripete sullo stesso punto perchè ti ho postato male il codice
    le variabili sono dichiarate separatamente. però devo fare un altro tipo di discorso
    non tipo memory.

    in realtà mi crea un pulsante e quando gli chiedo di farne un secondo, mi sposta quello già creato di 20 cioè il valore di x incrementato

    codice:
    Public Class FrmChart
    
    
        Public buttonV As New Button()
        Public x = 0
    
    Private Sub Button1_Click........
    
        Public buttonV As New Button()
    
            Me.NoteBox.Controls.Add(buttonV)
            buttonV.Size = New Size(20, 20)
            buttonV.BackColor = Color.Green
            buttonV.Location = New Point(x, 30)
            buttonV.Text = ""
            x = x + 20
    
    End Sub

  4. #4
    Ho provato ad implementare lo stesso algoritmo senza guardare la tua soluzione e funziona, vedi se ti può essere utile:
    codice:
    Public Class Form1
        Private x As Integer
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim b As New Button
    
            b.Size = New Size(20, 20)
            b.Text = "X"
            b.Location = New Point(x, 100)
    
            Me.Controls.Add(b)
    
            x += 20
        End Sub
    End Class
    Chi non cerca trova.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    252
    funziona perfettamente ora
    li duplica però come faccio ora a sapere il nome effettivo di ogni pulsante
    per associare un comando quando ci clicco sopra con il mouse?

    es. nel form in automatico si creano
    10 pulsanti tutti con text vuota però quando clicco sul 3° voglio che mi cambi colore etc

  6. #6
    Devi assegnare una proprietà Name e poi collegare l'evento click con una tua Sub (mediante AddHandler), qualcosa tipo questo esempio:
    codice:
    Public Class Form1
        Private x As Integer
        Private n As Integer
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim b As New Button
    
            n += 1
    
            b.Name = "Pulsante" & n.ToString
            b.Size = New Size(20, 20)
            b.Text = "X"
            b.Location = New Point(x, 100)
            AddHandler b.Click, AddressOf Pulsante_Click
    
            Me.Controls.Add(b)
    
            x += 20
        End Sub
    
        Private Sub Pulsante_Click(sender As System.Object, e As System.EventArgs)
            Console.WriteLine(CType(sender, Button).Name)
        End Sub
    End Class
    Chi non cerca trova.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    252
    Originariamente inviato da tas
    Devi assegnare una proprietà Name e poi collegare l'evento click con una tua Sub (mediante AddHandler), qualcosa tipo questo esempio:
    codice:
    Public Class Form1
        Private x As Integer
        Private n As Integer
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim b As New Button
    
            n += 1
    
            b.Name = "Pulsante" & n.ToString
            b.Size = New Size(20, 20)
            b.Text = "X"
            b.Location = New Point(x, 100)
            AddHandler b.Click, AddressOf Pulsante_Click
    
            Me.Controls.Add(b)
    
            x += 20
        End Sub
    
        Private Sub Pulsante_Click(sender As System.Object, e As System.EventArgs)
            Console.WriteLine(CType(sender, Button).Name)
        End Sub
    End Class
    grazie tas appena provo ti faccio sapere come è andata
    a presto

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    252
    Originariamente inviato da garzone
    grazie tas appena provo ti faccio sapere come è andata
    a presto
    codice:
    Private Sub Pulsante_Click(sender As System.Object, e As System.EventArgs)
            Console.WriteLine(CType(sender, Button).Name)
        End Sub
    End Class
    scusa ma non ho capito come funziona questa parte!!!
    mi aiuti a capire

    i tasti me li crea ovviamente e gli assegna anche il nome con il numero progressivo.
    Per fare una prova ho inserito un msgbox "sono qui" all'interno della sub pulsante
    e mi appare il msg ogni volta che ne clicco uno.
    Però non capisco come assegnargli un colore , ho fargli fare cose diverse per ogni pulsante creato.

    grazie

  9. #9
    la riga:
    codice:
    AddHandler b.Click, AddressOf Pulsante_Click
    fa in modo che l'evento click del pulsante appena creato sia associato alla sub Pulsante_Click.

    A questo punto sai che un click su un qualsiasi pulsante creato con quella procedura provocherà la chiamata di quella sub. Per capire su quale pulsante l'utente ha cliccato devi controllare la variabile sender, che contiene l'oggetto (nel tuo caso un Button) che ha generato l'evento. Per effettuare azioni differenti in base al pulsante puoi scrivere quindi qualcosa del genere:
    codice:
    Select Case CType(sender, Button).Name
        Case "Pulsante1"
            '...
        Case "Pulsante2"
            '...
    End Select
    Chi non cerca trova.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    252
    perfetto ora mi è tutto chiaro e fa quello che dico io

    grazie mille , sei come sempre essenziale, preciso, ed esaustivo.
    dovrò pagarti per qualche lezione privata sull' ado.net

    ehehehe a presto
    ciao

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