如何用C#编写一个打字程序,用textbox与richtextbox做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C#编写一个打字程序,用textbox与richtextbox做相关的知识,希望对你有一定的参考价值。

textboxt.text的内容相同时,不发生变化。不相同时richtextbox.text显示红色字体说明
帮帮忙!赏分15分
在textboxt.textChange事件中写逻辑 ,那应该怎样写呢

之前load的一个VB的打字程序的一段, 思路和语言跟C#差不多,你借鉴一下吧

Private Sub txtType_Change()
Dim Start As Integer, i As Integer
On Error Resume Next
Start = txtType.SelStart
'If DelTF = True And Len(txtType.Text) = 1 Then txtType.Text = ""

Hang = Num \ 44 '打完一行,就开始打下一行(计算现在应该打第几行)
'If Hang = 8 Then Hang = 0
Hang = Hang Mod 8 'Hang始终都是0-7的顺序下去
No = Num Mod 44 '每一行的第几个
If Start = 0 Or DelTF = True Then Exit Sub '如果在KeyDown中按下删除键则退出Chang
'If Hang = 3 And No = (44 - 5) Then '到第4行倒数第6个,则第1行隐藏,第8行现身
' lblEgg(0).Caption = ""
' 'lblegg(0).Visible=False '可能不需要隐藏,因为是透明模式,没有文字效果与隐藏一样
' For i = 1 To 44 '卸掉现在行的前面第3行,中间隔着2行 例:(44*3+39)=171,终止:171-44*2-39,开始:171-44*3-39+1
' Unload lblOK(i) '卸掉第1行的标示对错的颜色标签,节约内存
' Next '实时错误'340',控件数组元素'1'不存在,卸过一次后又再卸
' lblEgg(7).Caption = Mid$(StrText, mNumber * 44 + 1, 44) '继续的文字内容(后面第4行,如果例现在是第6行,后面剩2行,后第4行就越过算到正数第2行
'End If
'If Hang >= 3 And No = (44 - 6) Then '(44 - 5),上面示例旧文本的消失与显示新文本
If lblEgg((Hang + 4) Mod 8).Caption = "" And No = (44 - 6) Then
'If lblEgg(Hang - 3).Caption <> "" Then '检测前面第3行是否已经空掉,因为怕重复,如打过第4行第40个,然后又删除,然后再打会重复,导致后面第4行的内容会变化
If lblEgg((Hang + 5) Mod 8).Caption <> "" Then
lblEgg((Hang + 5) Mod 8).Caption = "" ''lblEgg((Hang - 3) Mod 8).Caption = ""
For i = Num - 44 * 3 - 39 + 1 To Num - 44 * 2 - 39 + 1
Unload lblOK(i)
Next
lblEgg((Hang + 4) Mod 8).Caption = Mid$(StrText, mNumber * 44 + 1, 44) '(Hang + 4) Mod 7
mNumber = mNumber + 1
End If
End If
If Hang >= 6 And No = (44 - 6) Then TypeSPace = True '模拟打字区的旧文本消失,当打到第6行(倒数第2行),第0行开始消失,Hang-6(前第6行),Hang+2(后第2行)
If lblType((Hang + 2) Mod 8).Caption <> "" And TypeSPace Then
'TypeHang = Hang + 2
'if typehang=8 then typehang=0
'lblType(Hang - 6).Caption = ""
lblType((Hang + 2) Mod 8).Caption = ""
End If
lblType(Hang).Caption = lblType(Hang).Caption & Mid$(txtType.Text, Len(txtType.Text), 1) 'txtType.Text
'Debug.Print txtType.SelStart
'Debug.Print Num

Num = Num + 1
Load lblOK(Num)
If Mid$(lblType(Hang).Caption, Len(lblType(Hang).Caption), 1) = Mid$(lblEgg(Hang).Caption, Len(lblType(Hang).Caption), 1) Then
lblOK(Num).BackColor = vbGreen '正确就用绿色,65280
lblOK(Num).Tag = 1
mTrue = mTrue + 1 '正确的字数
lblTrue.Caption = "对:" & mTrue
Else
lblOK(Num).BackColor = vbRed '错误就用红色,255
lblOK(Num).Tag = 0
mFalse = mFalse + 1 '错误的字数
lblFalse.Caption = "错:" & mFalse
End If
'算出正确率
mTF = mTrue / (mTrue + mFalse) * 1000
lblTF.Caption = mTF

With lblOK(Num)
If Num Mod 44 = 1 Then
'Select Case Num
'Case 44 * 1 + 1
'Hang = Num \ 44 '打完一行,就开始打下一行
.Left = 50
Else
.Left = lblOK(Num - 1).Left + lblOK(Num - 1).Width '上一个之后
End If
If (Num - 1) \ 44 >= 1 Then '如果不是第一行,每行44个字
'.Top = 50 + (Num - 1) \ 30 * 180 'TextHeight(Mid$(txtType.Text, Len(lblType.Caption), 1))

'.Top = lblOK(Num - 30).Top + lblOK(Num - 30).Height ' 180 + 60
.Top = lblEgg(Hang).Top
Else
.Top = 0 '50
End If
.Caption = Mid$(lblEgg(Hang).Caption, Len(lblType(Hang).Caption), 1)
.AutoSize = True
.Visible = True
End With
Line1.X1 = lblOK(Num).Left + lblOK(Num).Width: Line1.X2 = lblOK(Num).Left + lblOK(Num).Width
Line1.Y1 = lblOK(Num).Top: Line1.Y2 = lblOK(Num).Top + 250
If Num Mod 44 = 0 And Num <> 0 Then 'Hang <> 0
Line1.X1 = lblType(Hang + 1).Left - 1: Line1.X2 = lblType(Hang + 1).Left - 1
Line1.Y1 = lblType(Hang + 1).Top: Line1.Y2 = lblType(Hang + 1).Top + 250
End If
End Sub
参考技术A 在textbox的TextChanged事件中
先将richtextbox清空
将源文本放到一个字符数组
再将textbox的text放到一个字符数组
然后用个for循环挨个字符对比
相同的字符用黑色字体插入到richtextbox
不同的字体用红色插入到richtextbox
一个字一个字插入
最后应该能达到你要的效果
参考技术B 在textboxt.textChange事件中写逻辑

如何用C#编写文本编辑器

这个问题比较大,其实看你写什么样的文本编辑器。
做法:
1.
简单记事本:用winform
或者
wpf
放一个
textbox
控件,实现一下多行,放置几个菜单,添加上保存等功能就可以了。
2.
富文本编辑器,用 richtextbox
控件,实现编辑、剪贴、撤销等操作。
3.
特定的编辑器,比如说实现一个
markdown
编辑器,你就需要对特定描述语言的解析了。
参考技术A 这个问题比较大,其实看你写什么样的文本编辑器。
做法:
简单记事本:用WinForm
或者
WPF
放一个
TextBox
控件,实现一下多行,放置几个菜单,添加上保存等功能就可以了。
富文本编辑器,用
RichTextBox
控件,实现编辑、剪贴、撤销等操作。
特定的编辑器,比如说实现一个
MarkDown
编辑器,你就需要对特定描述语言的解析了。

以上是关于如何用C#编写一个打字程序,用textbox与richtextbox做的主要内容,如果未能解决你的问题,请参考以下文章

C#中如何用数组操作Textbox?

如何用C#编写程序监测某个文件夹内是不是有文件进行了增,删,改的动作?

VB如何用WinIO打字?

如何用C#设计上位机(小白篇)

如何用C#编写九九乘法表??

请问在C#的Winform下如何用正则表达式限制用户只能在textBox中输入18位的身份证号码。