在编辑器中编辑好带有换行的文本,例如朝阳区
小王拷贝粘贴到VB6程序的Textbox中,换行符不显示出来,
但确实存在,并且可以选择(看起来像一个非常非常细小的空格)而拷贝到VB.Net程序的Textbox时,
如果Multiline属性为False,
会在第一个换行符处被截断,只有前面的内容(朝阳区)会被贴上去
如果Multiline属性为True,
可以全部粘贴上去,但换行符也会显示出来,
因为控件高度固定只有一行,
要看到全部内容必须按上下方向键现在我有个特殊的需求,
1,我希望在.Net里也能实现和VB6的Textbox一样的效果,
就是不让换行符显示出来。
2,在这里只考虑粘贴的情况,不考虑直接输入回车的情况。现在已知的是,如果在程序中用vbcrlf拼字符串给Textbox赋值,
并且Textbox的Multiline属性为False时,可以满足需求1,但是对粘贴就没办法了。我继承了Textbox做了一个类,重载wndproc,
捕捉到WM_PASTE事件之后把剪贴板中的数据整理成String数组,
然后用vbcrlf连起来,这样就有了可以往非Multiline的Textbox中粘贴的数据,
但是粘贴时还需要判断光标位置,以和当前Textbox的内容拼起来,
这个不知道怎么做了各位有什么好方法吗?
实现越容易越好

解决方案 »

  1.   

    本人刚才第一次使用vb.net,没发现换行符会被显示出来。
      

  2.   

    jennyvenus 谢谢提示,呵呵,这个思路应该能实现,我试试看是我说得不清楚,换行符本身不会显示出来,
    但是很明显很清楚地可以看到文本是换行的。
      

  3.   

    晕,模拟键盘输入是行不通的。
    因为Multiline是False所以换行符没能被输入进去。
    直接敲回车敲不进,模拟敲也是一样啊。
      

  4.   

    最简单的办法,我认为可以这样解决在VB6中创建一个Active.ocx的工程,然后放一个Text在Usercontrol上
    代码很简单Option ExplicitPublic Property Get Text() As String
       Text = Text1.Text
    End Property
    Public Property Let Text(ByVal Text As String)
       Text1.Text = Text
    End Property编译为Ocx后,在.Net中引用,.Net中的代码这样
        Public Class Form1    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            AxTextBox1.CtlText = "ddd" & vbCrLf & "aaa"
        End Sub    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            MsgBox(AxTextBox1.CtlText)'这里的用CtlText访问
        End Sub
    End Class不知这个方法,你是否可以接受
      

  5.   

    aohan 谢谢回复。
    你的意思是用VB6作控件放到.Net里来用吧。
    很遗憾这个行不通,事实上我现在用的也是从Textbox继承下来的类,但是是.Net的。这个换行的功能其实整个系统只有一个Textbox偶尔需要用到,其他的都不需要换行。
    现在测试已经快结束了,影响范围大的改动是不可能了。
    因为改后的测试要花很多精力,所以想要个尽可能简单的办法。
    实现得脏一点都没关系。
      

  6.   

    解决了。.Net2.0开始Textbox有了一个Paste(String)方法,可以把任意字符串贴进去,
    走得不是剪贴板机制,所以可以在WM_PASTE里面做。
      

  7.   

    钩住WM_PASTE消息,然后作一个替换
    基本上认为,那个小方块就不是vbCrLf
      

  8.   

    jjkk168 赫赫,就是这么做的。那个确实是vbcrlf啊。
    拷贝出来可以看到值是0D0A。