+ Rispondi al messaggio
Pagina 1 di 4 123 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33

due domande sulla creazione di controlli

  1. #1
    lucameloni91 non è in linea Novello
    Post
    29
    Like Inviati  
    0
    Like Ricevuti  
    0
    salve, avrei due domande
    1) come posso "disabilitare" una proprietà di un controllo che eredita da un altro?ad esempio, creo un controllo che eredita da RichTextBox, come posso disabilitare ad esempio la proprietà TextLenght in modo che nel mio controllo non venga visualizzata?
    2) come potrei fare ad impostare una sorta di spaziatura interna fra i caratteri in un controllo che eredita dalla RichTextBox?
    grazie

  2. #2
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Post
    2,600
    Like Inviati  
    0
    Like Ricevuti  
    0
    Vado giù senza rete!
    Per la 1, non saprei. C'è questo link che potrebbe darti qualche idea:
    custom controls in C# - MSDN Forums

    Per la 2, se ho capito cosa vuoi fare, penso potresti agire nell'evento textchanged riorganizzandolo secondo le tue esigenze.

    Per il punto1, considera che potresti sostituire una tua proprietà TextLenght a quella di default, per far restituire un numero che fornisci tu, secondo una tua logica....se questo ti può aiutare!
    ℹ️ Leggi di più su alextyx ...

  3. #3
    lucameloni91 non è in linea Novello
    Post
    29
    Like Inviati  
    0
    Like Ricevuti  
    0
    mmm per la prima credo di aver capito che se eredito ad esempio dalla RichTextBox non posso disabilitarne le proprietà ereditate, quindi dovrei provare ereditando da Control...
    per la seconda io intendo una spaziatura tipo questa nell'esempio:
    AA BB CC
    però gli spazi fra i caratteri non voglio che possano venire cancellati, una sorta di padding ogni due caratteri, capisci cosa intendo?

  4. #4
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Post
    2,526
    Like Inviati  
    0
    Like Ricevuti  
    0
    Non so come fare ad allargare lo spazio tra due caratteri, però ti posso dire che l'operazione (di distanziazione) si chiama crenatura, in inglese kerning.
    Forse se cerchi in internet trovi qualcosa...

    Se dovessi fare una cosa del genere, mi verrebbe come possibile soluzione questa:
    A ogni battuta di un tasto inserisco (per esempio in una variabile) il numero di caratteri inseriti.
    Se questo numero è pari a 2, oppure a un multiplo di 3 + 2, allora viene inserito automaticamente 1 spazio.
    Così ti trovi automaticamente la spaziatura fatta.
    Stessa cosa al contrario nel caso di cancellazioni.

    Prova a guardare qui:
    A class to parse graphical fonts - The Code Project - VB.NET
    Ultima modifica di cippalippa; 25-10-2007 14:27 
    ℹ️ Leggi di più su cippalippa ...

  5. #5
    lucameloni91 non è in linea Novello
    Post
    29
    Like Inviati  
    0
    Like Ricevuti  
    0
    mmm ora provo a cercare qualcosa sul kerning, comunque non ho capito tanto bene quale sarebbe la tua idea

    no quello non centra, comunque grazie lo stesso per l'aiuto che mi stai dando

  6. #6
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Post
    2,600
    Like Inviati  
    0
    Like Ricevuti  
    0
    però gli spazi fra i caratteri non voglio che possano venire cancellati, una sorta di padding ogni due caratteri, capisci cosa intendo?
    Forse esiste anche un modo migliore, ma agire nell'evento textchanged del tuo controllo come ti suggerivo, lo escludi per qualche motivo preciso che mi sfugge?
    Il click del pulsante, purtroppo, ha il difetto che viene bypassato dal copia/incolla fatto col mouse.
    ℹ️ Leggi di più su alextyx ...

  7. #7
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Post
    2,526
    Like Inviati  
    0
    Like Ricevuti  
    0
    Provo a rispiegarmi,
    Hai detto che vuoi ottenere:

    AA BB CC

    Puoi fare in modo che, dopo che hai battuto due tasti nel box, il programma ti aggiunga automaticamente uno spazio.
    Quindi tu batti AA e il programma mette automaticamente uno spazio, tu scrivi BB, il programma mette un altro spazio...


    Mi è venuta in mente un'altra soluzione:
    Se i numeri da inserire non sono tanti e ti basta che siano su una sola riga, puoi usare la maskedbox.
    Quella ti imposta automaticamente gli spazi tra le lettere.
    Ultima modifica di cippalippa; 25-10-2007 15:49 
    ℹ️ Leggi di più su cippalippa ...

  8. #8
    lucameloni91 non è in linea Novello
    Post
    29
    Like Inviati  
    0
    Like Ricevuti  
    0
    @alextyx:
    mmm sinceramente il textchanged non mi ispira tanto, preferirei il keypress, ma comunque anche se facessi così come potrei rendere quegli spazi "incancellabili"? potrei cercare di intercettare la pressione del tasto Canc e fare in modo che se prova a cancellare uno spazio questo non venga cancellato?
    @cippalippa:
    più o meno stesso discorso, quello ho già provato a farlo, ma come posso rendere gli spazi fra le coppie di caratteri "incancellabili"?
    grazie

  9. #9
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Post
    2,526
    Like Inviati  
    0
    Like Ricevuti  
    0
    Non li renderesti incancellabili, ma faresti in modo che scritta la seconda lettera ti troveresti lo spazio inserito automaticamente e saresti nella posizione giusta per scrivere la nuova copia di valori.
    Nella Masked lo spazio non esiste proprio, quindi salterebbe da un posto all'altro.

    Per enderli incancellabili potresti scrivere all'evento textchanged:
    Se il carattere premuto è DEL e la posizione è un multiplo di 3 allora annulla l'inserzione...
    Ultima modifica di cippalippa; 25-10-2007 16:15 
    ℹ️ Leggi di più su cippalippa ...

  10. #10
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Post
    2,600
    Like Inviati  
    0
    Like Ricevuti  
    0
    Senti, è una cosina fatta in 10 minuti, non pretendo che non abbia qualche bug che potrai magari correggere da solo, comunque la falsariga di quello che ho in testa è questa:

        Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    
            Dim Casella As TextBox = CType(sender, TextBox)
            Dim Testo As String = Casella.Text
    
            'Evito di avvitarmi in un loop senza fine indicando quando il cambio del testo non è opera dell'utente, ma del codice
            Static HoCambiatoIo As Boolean = False
    
            If Not HoCambiatoIo Then
                'Resetto il flag, perchè potrei anche non cambiare niente della stringa
                HoCambiatoIo = False
    
                'memorizzo la posizione del cursore
                Dim Posizione As Integer = Casella.SelectionStart
    
                'Memorizzo quanti spazi ci sono fino alla posizione attuale del cursore
                Dim SpaziPrima As Integer = 0
                SpaziPrima = Posizione + 1 - Testo.Substring(0, Posizione).Replace(" ", "").Length
    
                'Tolgo tutti gli eventuali spazi
                Testo = Testo.Replace(" "c, "")
    
                'Ora inserisco uno spazio ogni 2 caratteri, se almeno due caratteri ci sono.
                Dim i As Integer = 2
                Do While i < Testo.Length
                    Testo = Testo.Insert(i, " ")
                    i += 3
                Loop
    
                'Se c'è stato un cambiamento, allora devo aggiornare il testo della textbox
                If Testo <> Casella.Text Then
                    HoCambiatoIo = True
                    Casella.Text = Testo
                    'Ora riposiziono il cursore, tenendo conto di quanti spazi sono stati aggiunti rispetto a prima
                    Dim SpaziDopo As Integer = Posizione - Testo.Substring(0, Posizione - 1).Replace(" ", "").Length
                    Casella.SelectionStart = Posizione - SpaziPrima + SpaziDopo
                End If
    
            Else
                HoCambiatoIo = False
            End If
    
        End Sub
    
    Come ti ho già detto, è inutile che tu cerchi di intercettare un tasto, come il 'canc', quando chiunque ti ci può incollare un testo privo di spazi, o comunque effettuare operazioni da mouse.

    Rimane da valutare il consiglio di Massimo. Se la Masked è in grado di fornire una prestazione simile, è senz'altro preferibile. Io non la conosco abbastanza da sapere se sia fattibile, o meno, nè con quali settaggi ottenere l'effetto voluto.
    Ultima modifica di elisab; 30-10-2011 02:27 
    ℹ️ Leggi di più su alextyx ...

+ Rispondi al messaggio
Pagina 1 di 4 123 ... ultimoultimo

Potrebbero interessarti anche ...

  1. Guida sulla Creazione di una VPN lato Client
    Da sistemista nel forum Pausa caffè
    Risposte: 0
    Ultimo Post: 26-01-2020, 13:11
  2. Risposte: 10
    Ultimo Post: 14-01-2015, 21:00
  3. Risposte: 2
    Ultimo Post: 10-07-2013, 14:36
  4. dubbio sulla creazione software vb.net con mysql
    Da TeGlider nel forum Visual Basic .Net
    Risposte: 8
    Ultimo Post: 23-04-2013, 14:18
  5. Domande sulla tecnologia DOT.NET
    Da Vanessa nel forum Altri linguaggi e strumenti
    Risposte: 0
    Ultimo Post: 05-12-2006, 10:28