在RichTextBox控件中编辑文本时,按一次Tab键会缩进8个字符,我想把它修改为:每按一次Tab键缩进4个字符,应该怎么做?请各位帮忙,这里先行谢过。

解决方案 »

  1.   

    看看这个网址是否有帮助。
    http://www.dbo.cn/Resource/msdn/cpref/frlrfsystemwindowsformsrichtextboxclassbulletindenttopic.htm如果还不行的话就找暴风雨老大吧。
      

  2.   

    首先感谢二位!
    To Vansoft Workroom:
        我没有找到设置的地方,能否详细一点说明。但是,这样做存在一个问题,我不能要求我的用户都去修改系统设置呀,因为用户操作电脑的水平未知呀。塞北雪貂兄:
        你说的是项目符号的缩进量,不是我要的Tab键的缩进量。另外,那是.Net下的例子希望有更多兄弟给我帮助,尤其是暴风雨老大,祈上帝让暴风雨老大早点看见这个帖子吧,阿门。
      

  3.   

    应该是用sendmessage发送EM_SETTABSTOPS消息,我现在用的vb没打补丁,测试的结果是没有执行成功,你如果打了sp6补丁的话,可以测试一下:Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const EM_SETTABSTOPS = &HCB
    Const LB_SETTABSTOPS = &H192Private Sub Form_Load()
    SetTabsStops Me, RichTextBox1, 16'缩进16个字符
    End SubPrivate Sub SetTabsStops(frm As Form, x As Control, NumCharsBetweenStops As Long)
        Dim rv As Long, TabStops As Long
        ' Set tabs at every NumCharsBetweenStops average characters.
        TabStops = NumCharsBetweenStops * 4
        If TypeOf x Is ListBox Then
            rv = SendMessage(x.hwnd, LB_SETTABSTOPS, 1&, TabStops)
        ElseIf (TypeOf x Is TextBox) Or (TypeOf x Is RichTextBox) Then
            rv = SendMessage(x.hwnd, EM_SETTABSTOPS, 1&, TabStops)
        End If
        x.Refresh
    End Sub
      

  4.   

    感谢暴风雨大哥的指点,用TextBox测试获得成功,但是用RichTextBox不行。我已补了sp6再次请教暴风雨大哥:用子类如何实现?
      

  5.   

    用子类这样:
    先拦截键盘输入的有关消息,一旦发现用户按下了tab,就调用自己的方法处理(用n个空格代替一个vbtab)
      

  6.   

    谢谢暴风雨大哥!
    子类编程好像有点难度,我目前还不太熟悉,如果大哥有空的话,能否给出一段代码?另外,产生了两个新的问题:
    1、为什么TextBox能成功,而RichTextBox不行?是什么原因造成的?
    2、RichTextBox能接受哪些消息?从哪里可以找到关于RichTextBox的API常数的定义和说明?
      

  7.   

    http://www.cnpopsoft.com/blog/article.asp?id=3