Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [vb.net] modifica valore del tipo

    salve a tutti,

    Forse il titolo del post non è italianizzato bene, ma ora vi spiego il mio dilemma....

    Io ho questa structure:
    codice:
        Structure Etichetta
            Structure Linea
                Dim PuntoIni As Point
                Dim PuntoFine As Point
            End Structure
            Dim Testo As String
            Dim Valore As String
            Dim SizeTesto As SizeF
            Dim SizeValore As SizeF
            Dim PuntoTesto As Point
            Dim PuntoValore As Point
            Dim Sottolineato As Linea
            Dim FontTesto As Font
            Dim FontValore As Font
        End Structure
    Vorrei fare in modo che quando vado a modificare Testo, Valore, FontTesto e FontValore il programma mi restituisca in automatico sizetesto e valoretestomettendomi:

    codice:
    dim bmp as new bitmap(picturebox1.width, picturebox1.heigth) 
    dim grp as graphics = Graphics.FromImage(bmp)
    sizetesto = grp.measurestring(Testo, FontTesto)

    e mi modifichi i valori nella structure linea, mettendomi:

    codice:
    Puntoini.x = puntotesto.x + sizetesto.width + 5
    puntoini.y = sizetesto.heigth
    puntofine.y = puntoini.y
    è possibile fare ciò??? mi consigliate una via alternativa?

    ps: la structure viene usata come array
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  2. #2
    Invece di usare tutti questi campi pubblici sostituisci quelli che dipendono da altri campi con delle Property che restituiscano il valore correttamente ricalcolato.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    non ho capito scusa... comunque mi sono dimenticato di dirvo che la structure è in un modulo...

    vi posto il codice, ancora in fase di costruzione:

    codice:
    Structure Etichetta
            Structure Linea
                Dim PuntoIni As Point
                Dim PuntoFine As Point
            End Structure
            Dim Testo As String
            Dim Valore As String
            Dim SizeTesto As SizeF
            Dim SizeValore As SizeF
            Dim PuntoTesto As Point
            Dim PuntoValore As Point
            Dim Sottolineato As Linea
            Dim FontTesto As Font
            Dim FontValore As Font
        End Structure
        Public arrEt As Etichetta()
        Sub CreaArrEt(ByVal grp As Graphics, ByVal bmp As Bitmap)
            Dim strTesto As String, arrTesto() As String, arrT() As String
            Dim i As Int32, nArr As Int32, pntX As Int32, pntY As Int32, pntValX As Int32
            Dim Controllo As TextBox
            Dim fStyle As FontStyle, gpcUnit As GraphicsUnit = GraphicsUnit.Pixel
            pntX = 5 : pntY = 5 : strTesto = "ARTICOLO,0,0;VARIANTE,0,0;TAGLIA,1,1;PREZZO,1,1" : arrTesto = strTesto.Split(";")
            For i = 0 To arrTesto.GetUpperBound(0)
                ReDim Preserve arrEt(nArr)
                arrT = arrTesto(i).Split(",")
                With arrEt(nArr)
                    .Testo = arrT(0) & ":"
                    Controllo = Form1.Controls("txt" & arrT(0))
                    .Valore = Controllo.Text
                    Controllo = Nothing
                    .FontTesto = New Font("Verdana", 10, FontStyle.Regular, GraphicsUnit.Pixel)
                    .SizeTesto = grp.MeasureString(arrEt(nArr).Testo, arrEt(nArr).FontTesto)
                    Select Case arrT(1)
                        Case "0"
                            fStyle = FontStyle.Regular
                            .FontValore = New Font("Verdana", 10, fStyle, gpcUnit)
                        Case "1"
                            fStyle = FontStyle.Bold
                            .FontValore = New Font("Verdana", 12, fStyle, gpcUnit)
                    End Select
                    .SizeValore = grp.MeasureString(.Valore, .FontValore)
                    .PuntoTesto = New Point(pntX, pntY)
                    pntValX = .SizeTesto.Width + .PuntoTesto.X + 5
                    .PuntoValore = New Point(pntValX, .PuntoTesto.Y)
                    .Sottolineato.PuntoIni = New Point(pntValX, .PuntoValore.Y - 2)
                End With
                nArr = nArr + 1
            Next
        End Sub
    strtesto contiene:
    - descrizione di ogni valore (il nome del controllo nel form è uguale);
    - se è un campo importante: 0 - non lo è; 1 lo è;
    - se il campo occupa tutta la riga o solo metà: 0 tutta la riga, 1 occupa metà riga.
    Ovviamente, se è 1 il prossimo campo che ha 1 dovrà andare a riempire lo spazio vuoto. se non ce ne sono più di 1 l'ultimo campo impostato a 1 diventerà 0...

    capito adesso che cosa voglio fare???

    lo sò, sono contorto...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  4. #4
    Domanda: ma perché non crei una classe etichetta in cui incapsulare tutti i metodi (creazione nel costruttore, rendering, stampa, ...)?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    risposta: perchè non sò da dove partire...

    vb.net è, a mio parere, molto + vasto di visual basic...
    e poi a dirla tutta è il mio primo vero programma in vb.net...
    certo ho fatto alcuni giochini in vb.net, tipo il tris, ma quelli erano una cacchiata al confronto di quello che devo fare ora...

    mi serve qualcuno che mi aiuti!!!
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

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.