修复了开发办公套件时 Visual Basic 中 FontSize 函数的错误

2024-01-04

在花了几个小时研究 FontSize 函数后,我被一段代码困住了。字体列表,每当我想定义每个字体具有相同的大小时,它会自动将其缩放到72。

我浏览了互联网以了解如何获取字体列表,这很有效,但是当我将 fontSize 添加到 sizecombo 组合框时,它变得疯狂。

Imports System.Drawing.Text

Public Class wordking
    Dim fontSize As Integer = 8
    Private Sub wordking_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim myFont As New InstalledFontCollection

        For Each FontName As FontFamily In myFont.Families
            fontcombo.Items.Add(FontName.Name)
        Next
        For fontSize = 8 To 72 Step 2
            sizecombo.Items.Add(fontSize)
        Next
    End Sub
    Private Sub fontcombo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles fontcombo.SelectedIndexChanged
        wordbox.SelectionFont = New Font(fontcombo.Text, fontSize, FontStyle.Regular)
    End Sub

    Private Sub sizecombo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles sizecombo.SelectedIndexChanged
        Dim currentfontSize As Single = Convert.ToSingle(sizecombo.Text)
        wordbox.SelectionFont = New Font(wordbox.SelectionFont.FontFamily, currentfontSize)
    End Sub

    Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click
        mainmenu.Show()
        Me.Close()
    End Sub
End Class

我期望该函数显示字体列表,它确实做到了,但它也将字体大小调整为我的最大值 72。这个错误让我很恼火。


以下几点可能会有所帮助:

  • 要填充组合框:
cmbFont.DataSource = New InstalledFontCollection().Families
cmbFont.DisplayMember = "Name"

For i As Integer = 8 To 72 Step 2
    cmbFontSize.Items.Add(i)
Next

'Assuming the target control is a TextBox:
cmbFont.SelectedIndex = cmbFont.Items.IndexOf(TextBox1.Font.FontFamily)
cmbFontSize.Text = TextBox1.Font.Size.ToString

  • 创建一个子项来更改将从组合框的引发事件中调用的字体:
Private Sub SetFont()
    If cmbFont.SelectedItem Is Nothing OrElse String.IsNullOrEmpty(cmbFontSize.Text) Then
        Return
    End If

    Dim fnt As FontFamily = DirectCast(cmbFont.SelectedItem, FontFamily)
    Dim fntSize As Single = Convert.ToSingle(cmbFontSize.Text)
    Dim fntStyle As FontStyle

    For Each fs As FontStyle In [Enum].GetValues(GetType(FontStyle))
        If fnt.IsStyleAvailable(fs) Then
            fntStyle = fs
            Exit For
        End If
    Next

    TextBox1.Font = New Font(fnt, fntSize, fntStyle)
End Sub

请注意,您还需要检查新选择的字体的 FontStyle 是否提供常规样式(我在代码中看到您更喜欢常规样式)是否可用。如果没有,将选择第一个可用的样式。

  • 处理字体 SelectedIndexChanged 事件:
Private Sub cmbFont_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbFont.SelectedIndexChanged
    SetFont()
End Sub
  • 我认为最好处理尺寸组合框的 TextChanged 事件,以便用户可以输入非列出的值,例如 11、13 等:
Private Sub cmbFontSize_TextChanged(sender As Object, e As EventArgs) Handles cmbFontSize.TextChanged
    SetFont()
End Sub

如果您还需要将组合框与文本编辑器链接起来,以便在选择更改时显示选择字体,那么您可以执行以下操作:

  • 添加一个类变量并为其命名;
Private IsSelectionChanged As Boolean = False

这将用于避免裁员。

  • 添加 sub 以从选择中获取字体:
Private Sub GetFont()
    IsSelectionChanged = True

    Dim fnt As Font = If(txtEditor.SelectionFont, txtEditor.Font)

    cmbFont.SelectedIndex = cmbFont.Items.IndexOf(fnt.FontFamily)
    cmbFontSize.Text = fnt.Size.ToString

    IsSelectionChanged = False
End Sub
  • 更改 SetFont 子项中的第一行,如下所示:
Private Sub SetFont()
    If IsSelectionChanged OrElse cmbFont.SelectedItem Is Nothing OrElse String.IsNullOrEmpty(cmbFontSize.Text) Then
        Return
    End If
'
'
'The rest as the above mentioned...
End Sub
  • 在编辑器的选择更改事件中:
Private Sub txtEditor_SelectionChanged(sender As Object, e As EventArgs) Handles txtEditor.SelectionChanged
    GetFont()
End Sub

就这样。只需调整它即可满足您的要求。

这是一个快速演示:

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修复了开发办公套件时 Visual Basic 中 FontSize 函数的错误 的相关文章

  • 如何在没有管理员权限的情况下在 VS Code(Windows) 中使用自定义字体来安装字体?

    我在我的工作电脑 Windows 7 上没有管理员权限 所以我无法将自定义字体 Fira Code 安装到我的系统中 有没有办法在 VS Code 中不安装就可以使用这种字体 为这个问题找到一个丑陋的解决方法 使用 webfont 打开菜单
  • 插入具有只读主键列的表

    我正在使用一个使用 sql server 数据库的应用程序 我试图在表中插入一行 如下所示 该表有一个主键 prodNum 这是自动生成的密钥 当我尝试向表中插入一行时 如下所示 在行中intResult oSglProdTableAdap
  • 将签名位图转换为签名字符串(很奇怪的一个)

    基本上我需要将位图图像转换为字符串 但这不是常见的 困境在于该字符串由两部分组成 1 积分 2 线路 我需要将图像转换为由 分隔的两个部分 我得到的一个例子是 221A 221A270A270A25032503200720071716171
  • 有没有更简单的方法来处理复选框?

    在 vb net 中 我有一个包含一组四个复选框的表单 每个复选框都表示 选中时 用户想要向其订单添加特殊指令 代码如下所示 If SpecialInstruction1CheckBox Checked Then AddSpecialIns
  • 选项卡索引不适用于面板中的控件?

    我有一个 vb net Windows 窗体 其中包含大约 15 个组合框和 15 个文本框 以及其他几个控件 所有这些TextBoxes and ComboBoxes位于面板中 原因是我需要根据用户选择 输入的内容来调整控件的可见属性 因
  • VB.NET 中的 TextChanged 事件

    我有两个基本文本框 比方说 A 和 B 我希望在一个文本框中输入内容以清除另一个文本框中的任何输入 例如 在 A 中键入 123 现在在 B 中键入 456 B 应包含 456 A 应为空 但是 我在 B 中收到 56 而 A 为空 似乎
  • 如何在VB函数中添加可选参数/默认值参数?

    如何在 Visual Basic 中创建一个包含可选参数的方法 Use the Optional关键字并提供默认值 可选参数必须是最后定义的参数 以避免创建不明确的函数签名 Sub MyMethod ByVal Param1 As Stri
  • 通过名称访问表单的控件

    不确定这篇文章的标题是否准确 我试图通过在循环中 组合 它们的名称来访问 Windows 窗体控件及其属性 但我似乎找不到相关文档 使用VB net 基本上 假设我有以下内容 Dim myDt As New DataTable Dim ro
  • Android 支持哪些字体文件类型?

    Android 支持哪些字体文件类型 例如与 Typeface createFromAsset 一起使用 我似乎找不到文档中列出 我可以看到一些教程中提到了 TTF 并且这里有人暗示现在也支持 OTF 但是是否有一个完整的列表显示不同 AP
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • vb.net - 多维数组列表

    我已经设法制作了一些单维数组列表 但我无法找出多维数组列表 这就是我想做的 我有一个包含 5 列的数据库 mdb 我希望每一行都位于数组列表中 在 PHP 中我通常会做的是 array field1 array field2 field3
  • 如何在 Angular 8 中使用本地字体系列?

    我的 assets font 文件夹中有一些自定义字体 假设它是 ITC Charter Com Black 我有四种文件 eot svg tff woff 以及如何在我的项目中使用这些字体 我累了 font family ITC Char
  • 在 vb.net 中添加记录并使用 elseif 检查记录是否存在

    我是 vb net 的新手 提前抱歉 谁能帮我看看我的 elseif 代码行有什么问题吗 Dim con As SqlConnection New SqlConnection Data Source PC11 PC kim Initial
  • System.Linq.Dynamic 不支持 OrderByDescending("someColumn")?

    好的 在我们的项目中 我使用 System Linq Dynamic 库 但我刚刚注意到我无法执行以下操作 myDataSource OrderByDescending someColumnName 因为我收到以下错误 重载解析失败 因为无
  • 如何使用 VB.NET 或 C#.NET 代码从 yahoo 邮件 ID 发送邮件

    我想从我的 yahoomail Id 发送邮件 如何使用 VB NET 或 C NET 代码从 yahoo mail Id 发送邮件 需要善意的帮助 提前谢谢 西瓦库马尔 以下是一些制作基本 html 电子邮件消息的示例 http help
  • windows XP中如何设置默认编码?

    我尝试使用 StreamReader 打开文件并设置编码 但我希望它采用默认 Windows 编码 我如何更改我的 Windows 编码 区域和语言选项控制面板项目 高级选项卡 影响整个计算机
  • Android TextView 中的等宽表格数字

    我有一个自定义字体 默认情况下具有可变宽度数字字形 并且我想在 Android 中使用该字体的等宽表格数字功能TextView使数字垂直对齐 也就是说 改变如下 像这样的事情 要选择字体的表格数字功能 请使用TextView s fontF
  • Graphics2D setfont() 严重减慢了 java 应用程序的启动速度

    我正在用java制作一个游戏 它每秒刷新60次 每次执行循环时 我都会使用 g2d 来绘制图像和字符串 如果我这样做的话一切都会很好g2d setFont new Font Arial Font PLAIN 8 和抽绳 这将是正常的 但如果
  • 使用 CoCreateInstance 从 C++ 调用 COMVisible VB.Net dll

    自从我上一个问题以来 在某种程度上取得了进展 我已经编译了以下项目 它是基于https stackoverflow com a 10949784 846550 https stackoverflow com a 10949784 84655
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My

随机推荐