Ciao, ho scritto un controllo per fare ciò (trascinare elementi), il problema è che l'ho scritto in c#, se vuoi ti passo il codice (che magari puoi tradurre in vb) oppure puoi usarlo come libreria (senza tradurlo in vb).
è possibile utilizzare qualsiasi elemento si voglia (linee, rettangoli, immagini ecc...) semplicemente ereditando da "Elemento" e sovrascrivendo il metodo scrivi (come mostrato nella classe alla fine dell'esempio)
ecco una bozza di codice di come usarlo in vb.net (importato come libreria esterna)
qui il progetto demo in vb.netcodice:Imports U235Anteprima Public Class Form1 'inserisco nell'anteprima un immagine Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then 'dichiaro un tipo "Immagine" (più in basso una spiegazione di come creare tipi da utilizzare (esempio una linea) Dim imm As U235Anteprima.Immagine = New U235Anteprima.Immagine() 'imposto l'immagine prendendo il percorso da OpenFileDialog1 imm.Image = New Bitmap(OpenFileDialog1.FileName) 'le do un nome imm.Nome = "immagine" 'lo aggiungo alla lista di elementi dell'anteprima anteprima1.ListaElementi.Add(imm) 'faccio ridisegnegnare l'anteprima anteprima1.Invalidate() End If End Sub 'scelta font della scritta Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If FontDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then 'cambio font alla textbox che conterrà la scritta Me.TextBox1.Font = FontDialog1.Font End If End Sub 'al click creo un elemento di tipo "Scritta" e recupero il font e il testo dalla textbox1 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'dichiaro un tipo Scritta Dim stringa As U235Anteprima.Stringa = New U235Anteprima.Stringa() 'imposto il font prendendolo dalla texbox1 (precedentemente impostato) stringa.Font = FontDialog1.Font 'imposto il testo prendendolo dalla texbox1 (precedentemente scritto) stringa.Testo = Me.TextBox1.Text 'imposto il nome che preferisco stringa.Nome = "stringa" 'lo aggiungo alla lista anteprima1.ListaElementi.Add(stringa) 'faccio ridisegnegnare l'anteprima anteprima1.Invalidate() End Sub 'questo evento scaturisce quando clicco su un elemento con il tasto dx del mouse, in questo caso cancello l'elemento dalla lista Private Sub anteprima1_TastoDX(ByVal sender As System.Object, ByVal elemento As U235Anteprima.IElemento) Handles anteprima1.TastoDX 'cancello l'elemento dalla lista anteprima1.ListaElementi.Remove(elemento) End Sub 'questo evento scaturisce quando trascino un elemento nell'anteprima Private Sub anteprima1_Trascinamento(ByVal sender As System.Object, ByVal elemento As U235Anteprima.IElemento) Handles anteprima1.Trascinamento 'qui inserisci il tuo codice per la stampante ricavando la posizione dall'elemento (che puoi ampliare ereditanto come vuoi) 'comunque la posizione degli elementi la puoi senpre ricavare dalla lista dell'anteprima senza attendere o usare questo evento con : 'elemento.Point End Sub 'questo l'ho inserito per mostrarti il funzionamento della creazione di nuovi tipi di elementi (funziona come gli altri) 'in basso potrai vedere un esempio di come creare appunto nuovi elementi (linee rettangoli icone ecc...) Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim Linea As Linea = New Linea() Linea.Pen = New Pen(Color.AliceBlue, 5) Linea.Size = New Size(NumericUpDown1.Value, 5) Linea.CorrezioneAngolo = 5 Linea.Point = New Point(20, 20) Linea.Nome = "stringa" anteprima1.ListaElementi.Add(Linea) anteprima1.Invalidate() End Sub End Class 'questo esempio mostra come creare nuovi elementi. basta ereditare da Elemento e sovrascrivere la sub scrivi, 'aggiungendo all'occorenza (come in questo caso il "Pen") altre variabili utili al caso. 'il controllo chiamerà il metodo scrivi e modificherà la posizione data da "point" Public Class Linea Inherits Elemento Public Pen As Pen Public CorrezioneAngolo As Integer 'sovrascrivo il metodo scrivi della classe di base Public Overrides Sub Scrivi(ByRef g As System.Windows.Forms.PaintEventArgs) 'scrivo l'elemento grafico nel graphics del controllo g.Graphics.DrawLine(Pen, Point.X, Point.Y, Point.X + Size.Width, Point.Y + Size.Height - CorrezioneAngolo) MyBase.Scrivi(g) End Sub End Class
qui il progetto del controllo (in c#)
P.S. i progetti sono solo delle bozzeanche se perfettamente funzionanti.

anche se perfettamente funzionanti.
Rispondi quotando