Richtextbox vb.net

如何解决Richtextbox vb.net

我有一个富文本框,里面装满了 vb.net 上的 SqlServer 查询结果。结果将所有项目水平连接,当达到富文本框边距时,它将换行。

代码:

   'Function of loading data into Datagridview

   Private Sub entregue()
    dgv1.Rows.Clear()
    Cursor.Current = Cursors.WaitCursor
    Dim consultando As New frm_aguarde_consultando
    consultando.Show()
    ' Set cursor as hourglass
    Application.DoEvents()

    Dim ano,mes,dia As Integer
    Dim var1data,var2data As Date
    Dim dinicio,dfim As String

    var1data = DateTimePicker1.Value '.ToString.Substring(0,10)
    dia = var1data.Day
    mes = var1data.Month
    ano = var1data.Year
    dinicio = ano & "-" & mes & "-" & dia

    var2data = DateTimePicker2.Value
    dia = var2data.Day
    mes = var2data.Month
    ano = var2data.Year
    dfim = ano & "-" & mes & "-" & dia

    Using sqlcoon As SqlConnection = GetConnectionsql()
        Dim READER As SqlDataReader
        'ENTREGUE
        Try
            sqlcoon.Open()
            Dim Query As String
            Query = "select MOV_IDENTIFICACAO,MOV_PROTOCOLO,MOV_DATADOC,MOV_SITUACAO,MOV_DATAENTREGA,MOV_HORAENTREGA,MOV_SITEND_CODIGO
                    from movimento where MOV_DATADOC = '" & dinicio & "' 
                    AND MOV_CLI_CODIGO = '" & txtcod.Text & "' AND MOV_SITUACAO = '" & "E" & "'
                    AND CAST(MOV_DATAENTREGA AS DATE) = '" & dfim & "' "


            Dim COMMAND As SqlCommand = New SqlCommand(Query,sqlcoon)

            READER = COMMAND.ExecuteReader

            While READER.Read
                Dim MOV_IDENTIFICACAO = READER("MOV_IDENTIFICACAO")
                Dim MOV_DATADOC = READER("MOV_DATADOC")
                Dim MOV_DATAENTREGA = READER("MOV_DATAENTREGA")
                Dim MOV_PROTOCOLO = READER("MOV_PROTOCOLO")
                Dim MOV_SITUACAO = READER("MOV_SITUACAO")
                Dim MOV_SITEND_CODIGO = READER("MOV_SITEND_CODIGO")
                dgv1.Rows.Add(MOV_IDENTIFICACAO,MOV_SITEND_CODIGO)

            End While
            READER.Close()
            sqlcoon.Close()

            For Each linha In dgv1.Rows
                Dim altura As Integer = 17
                linha.height = altura

            Next

            If dgv1.Rows.Count >= 0 Then
                ' Set cursor as default arrow
                Cursor.Current = Cursors.Default

                ' Hide the please wait form
                consultando.Hide()

            End If
        Catch ex As SqlException
            MessageBox.Show(ex.Message)
        Finally
            ' sqlcoon.Dispose()


        End Try

        sqlcoon.Open()

        Try


            For r As Integer = 0 To dgv1.Rows.Count - 1
                Dim COMMAND3 As SqlCommand
                Dim READER3 As SqlDataReader
                Dim Query_3 As String

                Query_3 = "select IMOV_CODIGORECBTO from imovimento where IMOV_MOV_IDENTIFICACAO ='" & dgv1.Rows(r).Cells(0).Value.ToString & "'"

                COMMAND3 = New SqlCommand(Query_3,sqlcoon)
                READER3 = COMMAND3.ExecuteReader

                While READER3.Read
                    Dim IMOV_CODIGORECBTO = READER3("IMOV_CODIGORECBTO")
                    'DataGridView1.Columns(6).HeaderCell.Value = "ID"
                    dgv1.Rows(r).Cells(6).Value = IMOV_CODIGORECBTO
                End While
                READER3.Close()

            Next
            dgv1.Sort(dgv1.Columns(6),ListSortDirection.Ascending)
            sqlcoon.Close()
        Catch ex As SqlException
            MsgBox(ex.Message)
        End Try


    End Using

End Sub
 
'Function of loading data into Richtextbox

Private Sub preenchimento_rchrelatorio()
Dim entregue = "ENTREGUE"
rchrelatorio.Text += entregue & Environment.NewLine & Environment.NewLine

For r As Integer = 0 To dgv1.Rows.Count - 1
    'richtextbox
    rchrelatorio.Text += dgv1.Rows(r).Cells(0).Value & "   "

Next

Dim totalentregue = "TOTAL:  " & dgv1.Rows.Count

rchrelatorio.Text += Environment.NewLine & Environment.NewLine & totalentregue & Environment.NewLine & Environment.NewLine

end sub

结果:

enter image description here

如何增加这个富文本框的行间距,使其看起来像这样:

enter image description here

有没有办法在 vb.net 上实现结果?我在 C# 中看到了很多形式,但我无法转换。

解决方法

为了能够这样解决:

 Imports System.Runtime.InteropServices

 Public Class frm_relatorio_entregas

  Private Structure Paraformat2
    Dim cbSize As UInteger
    Dim dwMask As UInteger
    Dim wNumbering As UInt16
    Dim wEffects As UInt16
    Dim dxStartIndent As Integer
    Dim dxRightIndent As Integer
    Dim dxOffset As Integer
    Dim wAlignment As UInt16
    Dim cTabCount As Int16
    <MarshalAs(UnmanagedType.ByValArray,SizeConst:=32)>
    Public rgxTabs() As Integer
    Dim dySpaceBefore As Integer
    Dim dySpaceAfter As Integer
    Dim dyLineSpacing As Integer
    Dim sStyle As Int16
    Dim bLineSpacingRule As Byte
    Dim bOutlineLevel As Byte
    Dim wShadingWeight As UInt16
    Dim wShadingStyle As UInt16
    Dim wNumberingStart As UInt16
    Dim wNumberingStyle As UInt16
    Dim wNumberingTab As UInt16
    Dim wBorderSpace As UInt16
    Dim wBorderWidth As UInt16
    Dim wBorders As UInt16
End Structure


<DllImport("user32",CharSet:=CharSet.Auto)>
Private Shared Function SendMessage(ByVal hWnd As HandleRef,ByVal msg As Integer,ByVal wParam As Integer,ByRef lParam As Paraformat2) As Integer
End Function


Const EM_LINEFROMCHAR As Integer = &HC9
Const EM_LINEINDEX As Integer = &HBB

Const EM_SETPARAFORMAT As Integer = &H447
Const PFM_LINESPACING As Integer = &H100

 Public Sub SelLineSpacing(ByVal rtbTarget As RichTextBox,ByVal SpacingRule As Byte,Optional ByVal LineSpacing As Integer = 20)

    Dim Para As New Paraformat2

    With Para
        ReDim .rgxTabs(31)

        .cbSize = CUInt(Marshal.SizeOf(Para))
        .dwMask = PFM_LINESPACING
        .bLineSpacingRule = SpacingRule
        .dyLineSpacing = LineSpacing
    End With

    Dim result As Integer = SendMessage(New HandleRef(rtbTarget,rtbTarget.Handle),EM_SETPARAFORMAT,1,Para)

    If result = 0 Then
        MessageBox.Show("EM_SETPARAFORMAT Failed")
    End If
End Sub

   Private Sub Button3_Click(sender As Object,e As EventArgs) Handles Button3.Click
    ' some dummy text to test with
    rchrelatorio.AppendText("2323" & vbCrLf)
    rchrelatorio.AppendText("2323" & vbCrLf)
    rchrelatorio.AppendText("2323" & vbCrLf)
    rchrelatorio.AppendText("2323" & vbCrLf)

    ' optionally select existing text
    ' so as to apply changes to the existing text
    ' as well as future text
    rchrelatorio.SelectAll()

    Dim s As String
    s = InputBox("Insert a RULE number (0 to 5)")

    ' SpacingRule
    ' Type of line spacing. To use this member,set the PFM_SPACEAFTER flag in the dwMask member. This member can be one of the following values.
    ' 0 - Single spacing. The dyLineSpacing member is ignored.
    ' 1 - One-and-a-half spacing. The dyLineSpacing member is ignored.
    ' 2 - Double spacing. The dyLineSpacing member is ignored.
    ' 3 - The dyLineSpacing member specifies the spacingfrom one line to the next,in twips. However,if dyLineSpacing specifies a value that is less than single spacing,the control displays single-spaced text.
    ' 4 - The dyLineSpacing member specifies the spacing from one line to the next,in twips. The control uses the exact spacing specified,even if dyLineSpacing specifies a value that is less than single spacing.
    ' 5 - The value of dyLineSpacing / 20 is the spacing,in lines,from one line to the next. Thus,setting dyLineSpacing to 20 produces single-spaced text,40 is double spaced,60 is triple spaced,and so on.


    Dim ruleNum As Byte

    ' returns ruleNum as the number input by the user,' or 255 if user input is bad
    If Not Byte.TryParse(s,ruleNum) Then ruleNum = 255

    Select Case ruleNum
        Case 0 ' Single spacing.
            SelLineSpacing(rchrelatorio,ruleNum)

        Case 1 ' One-and-a-half spacing.
            SelLineSpacing(rchrelatorio,ruleNum)

        Case 2 ' Double spacing.
            SelLineSpacing(rchrelatorio,ruleNum)

        Case 3 ' Spacing in Twips (1440 twips = 1 inch) : ignores spacing less than Single Spacing
            SelLineSpacing(rchrelatorio,ruleNum,720)

        Case 4 ' Spacing in Twips (1440 twips = 1 inch) : allows spacing less than Single Spacing
            SelLineSpacing(rchrelatorio,72)

        Case 5 ' Spacing in 20ths of a line (40 = Double Spacing : 100 = 5 line Spacing)
            SelLineSpacing(rchrelatorio,100)

        Case Else
            MessageBox.Show("rule number must be between 0 amd 5")
    End Select

End Sub

 End Class

用上面的代码,在richtextbox(rchrelatorio)填满文本然后按下按钮的那一刻,它会生成一个对话框,询问0到5之间的间距大小,然后直接运行庆祝。

重要细节。

一个问题,如果您想打印格式化的内容,您将不得不使用不更改配置的富文本框格式的运输方式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-