文本框部分文本属性是只读的?

feixuyue 2010-03-04 02:53:53
能不能把文本框里面的内容设置成一部分是只读的,另一部分是可操作的!
我想编个CMD控制台界面.
textboxbase类怎么继承啊.
...全文
1155 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixuyue 2010-03-06
  • 打赏
  • 举报
回复
算了,结贴了,用6L的方法了.
Alden 2010-03-06
  • 打赏
  • 举报
回复
根据自己的需求写个自定义控件看看
lzsh0622 2010-03-06
  • 打赏
  • 举报
回复
引用 4 楼 feixuyue 的回复:
其实我只要最后一行是可操作的,其他都是只读的!
我想创作一个窗口,最后一行来输入命令,其他已经输入的文字就只能只读了.


20楼的6行代码,已经实现了这个功能。尽管用的C#语法,看英语单词和后面汉字注释,应该能理解。
lzsh0622 2010-03-06
  • 打赏
  • 举报
回复

private void button1_Click(object sender, EventArgs e)
{
textBox1.Multiline = true;     //显示多行
textBox1.ReadOnly = true;     //上半部分只读
textBox1.BackColor = Color.White;     //只读部分与可读写部分颜色保持一致

textBox2.BorderStyle = BorderStyle.None; //可操作部分无边框
textBox1.Controls.Add(textBox2);
textBox2.Dock = DockStyle.Bottom;     //只读部分显示在最后一行.
}

这段代码如果使用多次还可以把 textBox1写成一个自定义控件
tjficcbw 2010-03-06
  • 打赏
  • 举报
回复
回答问题中成长,这个贴子记录了我从5角到1星的过度。
tjficcbw 2010-03-06
  • 打赏
  • 举报
回复
你费了这么大的事,也没完成,你要从别的地方找出路了,
VS这个大平台的方法属性全解决不了你的问题,可能有更简单的方法实现你的功能,只是你用你的脑子,想的办法完成你的功能,不如把你的功能说出来,让大家给你想办法这样比较好,你说这么个小问题,你用了,快30L了还没完成,.....
please_call_me_J 2010-03-06
  • 打赏
  • 举报
回复
某些时候用"笨方法"可以让东西更简单
feixuyue 2010-03-06
  • 打赏
  • 举报
回复
不会做啊,只有用笨办法了.
lzsh0622 2010-03-06
  • 打赏
  • 举报
回复
呵呵,不客气起说,楼主的设计思路就不对,一个小问题写了50行,还没实现目标。

开发效率、维护成本 ... ...
feixuyue 2010-03-06
  • 打赏
  • 举报
回复
7,8L 我没有考虑,但是按照我的代码,应该不会遇到那个问题的.
feixuyue 2010-03-06
  • 打赏
  • 举报
回复
写了一个半成品,
Public Class CmdTextBox
Inherits TextBox

Private backspace As Boolean

Public Sub New()
MyBase.New()
Me.BackColor = Color.White
End Sub
Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
Me.Refresh()
DrawLine(New PaintEventArgs(Me.CreateGraphics, Me.ClientRectangle))
End Sub

Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
If Not IsReadOnly() Then
If Not (e.KeyCode = Keys.Back And backspace = False) Then
MyBase.OnKeyDown(e)
End If
Else
Me.SelectionStart = Me.TextLength
End If
End Sub

Private Sub DrawLine(ByVal e As PaintEventArgs)
Dim lines As String() = Me.Lines
Dim h1, h2 As Single
Dim ah As Integer
h1 = Me.Font.FontFamily.GetLineSpacing(FontStyle.Regular) * Me.Font.Size / Me.Font.FontFamily.GetEmHeight(FontStyle.Regular)
h2 = Me.Font.GetHeight
ah = (h1 + h2) / 2 * lines.GetUpperBound(0)
If ah <> 0 Then
e.Graphics.DrawLine(Pens.Blue, 1, ah, Me.Width - 1, ah)
End If
End Sub
Private Function IsReadOnly() As Boolean
If Me.Lines.GetUpperBound(0) > 0 Then
If Me.SelectionStart < Me.GetFirstCharIndexFromLine(Me.Lines.GetUpperBound(0)) Then
[ReadOnly] = True
Return True
Else
If Me.SelectionStart = Me.GetFirstCharIndexFromLine(Me.Lines.GetUpperBound(0)) Then
backspace = False
End If
[ReadOnly] = False
Return False
End If
Else
Return False
End If
End Function
End Class
如果是在最后一行的开头,backspace键不起作用,
可是实际上没有效果.
帮忙看下.
feixuyue 2010-03-05
  • 打赏
  • 举报
回复
谁能不能给出一个继承抽象类textboxbase类的例子?
feixuyue 2010-03-05
  • 打赏
  • 举报
回复
可是我不能同时选择两个文本框的文本.
xray2005 2010-03-05
  • 打赏
  • 举报
回复
挨着放两个TEXTBOX,一个只读,一个可以操作
tjficcbw 2010-03-05
  • 打赏
  • 举报
回复
在一个文本框里比如
最后一行可以有50个字,
现在有48个字那么这48个字是可写的,你在中间插入一光标加四个字的一个词,这时加二个字后就只读了,光标移到下一行了,你如何办想过吗
tjficcbw 2010-03-05
  • 打赏
  • 举报
回复
在一个文本框里比如
最后一行可以有50个字,
现在有48个字那么这48个字是可写的,你在中间插入一光标加四个字的一个词,这时加二个字后就只读了,光标移到下一下了,你如何办想过吗
feixuyue 2010-03-05
  • 打赏
  • 举报
回复
行也行,但是我觉的没有在一个文本框里实现好.
tjficcbw 2010-03-05
  • 打赏
  • 举报
回复
你用一个大的groupbox装二个文本框,这二个文本框档带边挨在一起,这样就是一个文本框了,第二个文本框写完加入到第一个中,清空第二个,这样做非常灵活。
tjficcbw 2010-03-05
  • 打赏
  • 举报
回复
你不是离开第二个,文字就上去了吗,还选第二个做什么,全空了,
feixuyue 2010-03-04
  • 打赏
  • 举报
回复
试过9L的方法,可是判断不准啊
我的思想是当插入光标在最后一行时是,文本框可读,而不在最后一行是,文本框只读,
我只能这样模拟.
其他的不会啊
5L的意思是不是创建两个文本框,只是觉的不够自然!
加载更多回复(10)

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧