【问题标题】:How to fix System.FormatException: 'Input string was not in a correct format'如何修复 System.FormatException:“输入字符串的格式不正确”
【发布时间】:2019-08-06 00:10:15
【问题描述】:

我正在尝试在 VB.NET 中为 RichTextBox 更改字体系列

我曾尝试通过谷歌甚至特定网站搜索代码问题。没有任何效果。

这些是FontFamily更改的代码(它是一个工具条组合按钮)

Private Sub TscFontFamily_TextChanged(sender As Object, e As EventArgs) Handles tscFontFamily.TextChanged
        rtbContent.SelectionFont = New Font(Convert.ToString(tscFontFamily.Text), Convert.ToInt32(tscFontSize.Text))
    End Sub

还有 FontSize(也是一个工具条组合按钮)

 Private Sub tscFontSize_TextChanged(sender As Object, e As EventArgs) Handles tscFontSize.TextChanged
        Dim newSize As Single = Convert.ToSingle(tscFontSize.Text)
        rtbContent.SelectionFont = New Font(rtbContent.SelectionFont.FontFamily, newSize)
    End Sub

我希望这会起作用,因为它是有道理的,对吧?但它说“输入字符串的格式不正确”,如果我删除 Convert.ToString 和其他转换代码,它会说“从字符串转换”到输入“单”是无效的。”。

另外要提到的是,我实际上已经尝试过 Convert.ToString 和 Convert.ToDouble 以及基本上两者的一切。

【问题讨论】:

  • 您是否无意中标记了vba,或者您正在寻找VBA 和VB.Net 的答案,因为我在这里没有看到任何VBA?
  • 如果您遇到此错误,则 tscFontSize.Text 的内容无法转换为 Integer、Double 或 Single。那个文本框的内容是什么?请记住,将为您键入的每个字符调用 TextChanged 事件。即使您还没有完成输入文本
  • 好吧 Nacorid 是的,我做到了,我很抱歉,虽然 vba 和 vb.net 是同一回事 xD
  • 字体大小文本框的内容或值例如是“11”或“8”,或者您知道字体大小
  • 为什么不直接使用字体对话框? docs.microsoft.com/en-us/dotnet/framework/winforms/controls/…

标签: vb.net


【解决方案1】:

没有必要在tscFontFamily.Text 上调用ToString,因为TextBox 的Text 属性返回一个String;你本质上是说从这个字符串值返回一个字符串值。

Convert.ToInt32 是一种将字符串值转换为 Int32(也称为整数)值的快速而肮脏的方法。如果您依赖用户的输入,那么您几乎应该总是使用 Int32.TryParse 来代替。此方法根据输入的转换是否成功返回一个布尔值,然后传递的第二个参数是引用变量,因此如果方法的结果为 True,则第二个参数包含转换后的值。但是,看起来您想要一个 Single 值,在这种情况下您实际上会使用 Single.TryParse。

以下是将更改应用于您的代码的示例:

Private Sub tscFontSize_TextChanged(sender As Object, e As EventArgs) Handles tscFontSize.TextChanged
    Dim newSize As Single
    If Single.TryParse(tscFontSize.Text, newSize) Then
        rtbContent.SelectionFont = New Font(rtbContent.SelectionFont.FontFamily, newSize)
    End If
End Sub

【讨论】:

  • 好的,谢谢,但遗憾的是代码不起作用,在我将该代码添加到 tscFontSize Sub 之后,我仍然拥有整个 'rtbContent.SelectionFont = New Font(tscFontFamily.Text, tscFontSize.Text)' ,我是否必须将此 tryparse 代码添加到 FrontFamily 代码中?如果是这样我应该使用字符串吗?
  • @JamieEngel 是也不是。是的,将 .TryParse 代码添加到另一个 Sub 以获取字体大小。不,.Text 属性是字符串,不需要转换。
猜你喜欢
  • 2023-03-14
  • 2011-11-23
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多