PDA

View Full Version : [VB.NET] NullReferenceExeption


birmarco
28-11-2010, 21:24
Ciao a tutti, non sono molto esperto di VB.net ma sto realizzando un piccolo editor di testi rtf a scopo sperimentale... sono di fronte ad un piccolo problema che non riesco a risolvere: ho una richtextbox in cui se seleziono del testo automaticamente mi dice il nome del font... il problema nasce quando evidenzio due font diversi... vb in runtime mi da NullReferenceExeption. Il codice è il seguente:


Private Sub txtBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBox.SelectionChanged
Dim valore As String
valore = CStr(txtBox.SelectionFont.FontFamily.Name)
frmOutputConsole.outputList.Items.Add(valore)
For i As Integer = 0 To (fontBox.Items.Count - 1)
If fontBox.Items.Item(i).ToString = valore Then
fontBox.Text = valore
Exit For
End If
Next
End Sub

fontBox è una comboBox
txtBox è una richtextbox

Grazie a tutti! :)

EDIT. .NET Framework 4 e VS 2010 Pro

jackk87
28-11-2010, 21:45
Ciao selezionando due font diversi se non sbaglio ti genera errore su questa riga:

valore = CStr(txtBox.SelectionFont.FontFamily.Name)


perchè avendo due font diversi non hai un nome del font quindi genera errore dovresti utilizzare un Try Catch per esempio:


Private Sub txtBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBox.SelectionChanged
Dim valore As String

Try
valore = CStr(txtBox.SelectionFont.FontFamily.Name)
Catch ex As Exception
valore = "Indefinito"
End Try

frmOutputConsole.outputList.Items.Add(valore)
For i As Integer = 0 To (fontBox.Items.Count - 1)
If fontBox.Items.Item(i).ToString = valore Then
fontBox.Text = valore
Exit For
End If
Next
End Sub

birmarco
28-11-2010, 21:55
Ciao selezionando due font diversi se non sbaglio ti genera errore su questa riga:

valore = CStr(txtBox.SelectionFont.FontFamily.Name)


perchè avendo due font diversi non hai un nome del font quindi genera errore dovresti utilizzare un Try Catch per esempio:


Private Sub txtBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBox.SelectionChanged
Dim valore As String

Try
valore = CStr(txtBox.SelectionFont.FontFamily.Name)
Catch ex As Exception
valore = "Indefinito"
End Try

frmOutputConsole.outputList.Items.Add(valore)
For i As Integer = 0 To (fontBox.Items.Count - 1)
If fontBox.Items.Item(i).ToString = valore Then
fontBox.Text = valore
Exit For
End If
Next
End Sub


Avevo già provat ad usare try e catch ma l'avevo fatto nel modo sbagliato... con il tuo funziona! GRAZIE MILLE! :)

Se voglio andare oltre... e applicare anche il font che o selezionato al testo della combo box posso? Ovviemente se seleziono un solo font... :)

jackk87
28-11-2010, 22:00
Avevo già provat ad usare try e catch ma l'avevo fatto nel modo sbagliato... con il tuo funziona! GRAZIE MILLE! :)

Se voglio andare oltre... e applicare anche il font che o selezionato al testo della combo box posso? Ovviemente se seleziono un solo font... :)

certo che puoi, anche se ne selezioni due poi nella combobox selezioni il font e quei due font diventano quello che hai selezionato più semplicemente come tutte le applicazioni di testo come word ecc...

birmarco
29-11-2010, 14:29
certo che puoi, anche se ne selezioni due poi nella combobox selezioni il font e quei due font diventano quello che hai selezionato più semplicemente come tutte le applicazioni di testo come word ecc...

forse non ci siamo capiti molto bene! :) io intendevo applicare il font al testo della combo box... esempio: seleziono una parola in times new roman e il testo della combo box diventa "times new roman" in stile times new roman. :)

jackk87
29-11-2010, 14:32
comunque puoi farlo ugualmente utilizzando try catch oppure confrontando i font :D

birmarco
29-11-2010, 19:20
comunque puoi farlo ugualmente utilizzando try catch oppure confrontando i font :D

Non riesco a trovare il comando... :(

ComboBox.SelectedText.???

Non trovo nessun .Font da qualche parte... :confused:

jackk87
29-11-2010, 19:55
Non riesco a trovare il comando... :(

ComboBox.SelectedText.???

Non trovo nessun .Font da qualche parte... :confused:

mi sembra strano dovresti avere:
ComboBox1.Font

anche

ComboBox1.Font.FontFamily

birmarco
29-11-2010, 21:43
mi sembra strano dovresti avere:
ComboBox1.Font

anche

ComboBox1.Font.FontFamily

Hai ragione! :) Grazie! =)

Non esiste anche un metodo specifico per ogni item? perchè sarebbe carino ricreare una selezione font in stile word 2007... ;) o devo creare un controllo personalizzato? :)

jackk87
29-11-2010, 21:49
Hai ragione! :) Grazie! =)

Non esiste anche un metodo specifico per ogni item? perchè sarebbe carino ricreare una selezione font in stile word 2007... ;) o devo creare un controllo personalizzato? :)

Mi dispiace ma non ho avuto mai il bisogno di utilizzare questo tipo di opzione e che io sappia non è previsto un metodo specifico per ogni item

birmarco
30-11-2010, 10:19
Mi dispiace ma non ho avuto mai il bisogno di utilizzare questo tipo di opzione e che io sappia non è previsto un metodo specifico per ogni item

non ti preoccupare! Grazie lo stesso dell'attenzione! :)