Modifica textbox

martedì 18 novembre 2003 - 17.37

Tax Profilo | Newbie

Ciao , io ho un problema , dovrei creare un controllo che scriva all'interno di un quadrato.
vorrei poter digitare i caratteri come in una textbox multilinea.
Però vorrei fare in modo che quando il testo arriva a riempire tutto lo spazio di visualizzazione il quadrato aumenti in altezza in modo da visualizzare tutto il testo .
Dovrei poi fare in modo che chi lo usa possa cambiare anche lo spazio interlinea fra le varie righe.
Perfovare datemi qualche consiglio non so propio come uscire da questa situazione !!!!!!!!!

Anonimo Profilo | Senior Member

Ciao.
sono novizio, ma vorrei chiederti una cosa:
perchè non usi il richtextbox? Perchè non si ridimensiona automaticamente?

Puoi essere più chiaro sul progetto?
ciao

Brainkiller Profilo | Guru

Ciao Tax,
anche secondo me la soluzione qui è usare il RichTextBox che fa mi pare quello che tu chiedi.
La cosa più difficile è verificare quando allargare il controllo verso il basso per farci stare dell'altro testo, ma questo passaggio l'ho capito poco, potresti rispiegarlo in dettaglio?
In ogni caso ci sono diversi eventi gestiti dal RichTextBox bisogna vedere se c'è anche questo.
ciao

david

Tax Profilo | Newbie

Il problema della richTextBox è che mi torna il testo in formato rtf ,che non è compatibile con quello che mi serve(Anche se in realtà non l'ho approfondito come controllo perchè mi è stato detto che non può essere convertito in stringa), comunque provo a vedere .
Per quel che riguarda le dimensioni intendo che se creo una textBox alta un tot , questa visualizza solo le righe che stanno in quell'altezza . Per esempio se ho una textbox (multilinea) che visualizza solo tre linee. Io quando vado a digitare la quarta riga , il campo della textbox scorre facendo scomparire alla vista la mia prima riga. Io vorrei che, invece di far scomparire la prima riga, la textbox aumenti in altezza in modo da visualizzare comunque tutte le mie righe . Grazie per i consigli ....

Brainkiller Profilo | Guru

Ora ho capito.
Non sottovalutare il RichTextBox è un componente molto potente inoltre ci sono varie proprieta non solo RTFText mi pare ma anche la semplice Text che ritorna il testo classico come lo ritorna la textbox. Ci ho lavorato parecchio ma non di recente quindi vedi sul framework le proprietà e i metodi che sono veramente tanti.

Per l'altro problema anche in quel caso, non so se è possibile. Forse è necessario fare un accrocchio per far sì che si allarghi automaticamente, ma immagino sarà necessario intercettare un particolare messaggio Win32 e questo si può fare derivando un'altra classe dalla classe base e fare un override del WndProc, insomma un mezzo casino. Mi riservo del tempo per guardarci e farti sapere.
ciao

David

Tax Profilo | Newbie

Ho provato a fare un autodimensionamento usando la textbox, ma riesco ad aumentare le dimensioni , ma il panello di visualizzazione scorre lo stesso nascondendo la prima riga e poi le altre. Probabilmente ha un suo evento interno che gestisce automaticamente.
In alternativa sto cercando di crearne una mia .
Sono riuscito a utilizzare un drawString all'interno del mio controllo ,
che mi scrive riga dopo riga l'array di stringhe che mi creo , un po come fa la multilinea della textbox credo .

Ok funziona se intercetto il keyPress all'esterno del controllo .
Ma io voglio utilizzare il metodo onKeyPress dell'interno del mio controllo , e da li richiamare la sub che gestisce la creazione dell'array di stringhe . Non riesco a capire perchè non me lo intercetta !!! o provato a fare altre prove per esempio scrivendo all'interno del mio controllo il metodo onClick e mi funziona , il metodo onPaint mi funziona. Ma il metodo onKeyPress che utilizza l'evento KeyPressEventArgs propio non riesco a intercettarlo , non capisco perchè , sbaglio qualcosa , forse dopo che ho disegnato il mio controllo sul panello dove lo devo metter perde il fuoco e non intercetta più l'evento. aiuto !!!!!
p.s. Penso che la modifica della textbox non mi risulti utile al fine di poter scegliere lo spazio tra una riga e l'altra , mente creandomi il controllo da me stesso posso gestirmi sia l'interlinea che anche l'autodimensionamento del controllo , quindi penso che da adesso optero piu verso questo metodo , comunque se aete delle dritte su come fermare lo scorrimento del panello nelle RTB , fatem,i sapere.
Grazie per i consigli finora forniti !

Brainkiller Profilo | Guru

Ciao Tax,
io proverei una cosa di questo tipo, allora crei una textbox multiline e disabiliti il WordWrap in modo che mentre uno scrive invece di tornare a capo continua sulla stessa linea. in questo modo sono obbligati a premere invio per tornare a capo.
Così facendo puoi controllare il numero di righe e nell'evento keypress mettere sto codice:

Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

If ((e.KeyChar = Chr(13)) And (TextBox2.Lines.Length >= 4)) Then
TextBox2.Height = TextBox2.Height + TextBox2.Font.Height
End If

End Sub

In pratica alla pressione dell'invio se il numero di righe rappresentare è >=4 allarga il controllo textbox in altezza e si ottiene l'effetto da te desiderato.
Eventualmente poi se devi inserire quel testo in un DB puoi fare una replace eliminando i ritorni a capo.
Purtroppo non sono riuscito ad intercettare e capire qual è l'evento che segnala la nuova riga, pensavo rientrare fra gli scroll invece no.
ciao
david

Tax Profilo | Newbie

Grazie proverò a vedere ma mi sa che non si riesce a bloccare lo scroll , comunque sono arrivato quasi alla fine del mio controllo personalizzato e penso che procedero in quella direzione .

Se posso però vi farei un altra domanda . A me piacerebbe utilizzare un controllo che visualizza tutte le propietà del controllo selezionato , propio come nel designer di visual studio . Ecco vorrei sapere se è gia stato creato e quindi posso inserirlo nella mia form propio come un qualsiasi altro controllo , o devo crearmelo da solo ? In caso avete qualche consiglio di come partire
a crearmi questo controllo.

Brainkiller Profilo | Guru

Il controllo di cui parli si chiama PropertyGrid ed è già implementato.
Cerca sul Framework lo trovi. Per inserirlo in una WinForm prova con questo codice. Incollalo nel Load:

' The initial constructor code goes here.

Dim propertyGrid1 As New PropertyGrid()
propertyGrid1.CommandsVisibleIfAvailable = True
propertyGrid1.Location = New Point(10, 20)
propertyGrid1.Size = New System.Drawing.Size(400, 300)
propertyGrid1.TabIndex = 1
propertyGrid1.Text = "Property Grid"

Me.Controls.Add(propertyGrid1)

propertyGrid1.SelectedObject = textBox1

Vedrai che apparirà ciò che cerchi. Non so ancora bene come funziona e se fa uso di Reflection. Se ne facesse uso può essere utile poi per riutilizzarlo con i tuoi controlli personalizzati.
Ciao

David

Brainkiller Profilo | Guru

Ti confermo viene usata la reflection quindi lo puoi usare anche con i tuoi oggetti e posizionarlo sulla Form.
Automaticamente si accorgerà delle proprietà definite nell'oggetto.
ciao

David

Tax Profilo | Newbie

Grazie mille david .
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5