你可以将Enable属性设为False,然后在textbox上放置一个透明的label控件label的backstyle属性设为True.用label来响应用户事件.

解决方案 »

  1.   

    响应用户事件时,可以将Enable属性设为true嘛,响应后,再设回。
      

  2.   

    text1.locked=true 或text1.enable=false
      

  3.   

    同意tomjoule() 
    text1.locked=true 或text1.enable=false
      

  4.   

    对啦,将text1.locked设为TRUE就行了,看上去就像可以改变一样,很爽的
      

  5.   

    你可以设置TEXT1的getfocus 和 LOSTFOCUS 事件,将其中的内容设置成你想要的值就是了!
    别忘了加分哟!UP
      

  6.   

    text1.enable=falsetext1.locked=true
      

  7.   

    在keypress过程里加ascii=0就行了!!
      

  8.   

    将enable属性设置为false则,多行文本框的滚动条都不可用了,所以应该用locked=true ,另外用变量将textbox的值保留,再在textbox的change事件中再将值赋给textbox的text属性Private Sub Text1_Change()
        Text1.Text = preValue'前值
    End Sub
      

  9.   

    谢谢各位朋友!Wolfzhang(屁屁狗):我试了一下你方法,好像TextBox控件总在Label控件上面,Label控件无法响应用户事件,采用“移至顶层”、“移至底层”也没用,怎么解决?cdnicle(小羊羔)、delphin(牙疼)、allenair(allenair)你们的方法可以达到不让用户修改的目的,我没说清楚,我的要求是:TextBox控件内容默认不能修改,用户对TextBox控件采取一个事件(如双击)(至少形式上是对TextBox控件)后,TextBox控件内容就可以修改了,再采取同样的事件后TextBox控件内容又不能修改了。
      

  10.   

    Private Const GWL_WNDPROC = (-4)
    Private Const WM_RBUTTONDOWN = &H204Private 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 Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate prevWndProc As Long
    Private Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If Msg = WM_RBUTTONDOWN Then
        Else
            WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
        End If
    End Function'禁止TextBox的系统右键菜单
    Sub DisableRightClick(txtTarget As TextBox)
        
        prevWndProc = GetWindowLong(txtTarget.hwnd, GWL_WNDPROC)
        SetWindowLong txtTarget.hwnd, GWL_WNDPROC, AddressOf WndProc
    End Sub
    把以上代码放到模块中在Form中
    ===============================
    Text1.Locked=True
    DisableRightClick Text1这样就可以把右键菜单给禁止掉了
    ===============================
    不知道TextBox的Locked属性为True以后,还可以通过
    右键菜单来粘贴是MS故意留下的还是Bug至少我试过,在ComboBox的Text中粘贴是不可行的
      

  11.   

    locked=true 在 2000 下无效的,别人不能输入但是可以用右键菜单粘贴!
      

  12.   

    用SendMessage函数为TextBox(或RichTextBox)控件发送EM_SetReadOnly消息
    '设为只读
    sendmessage text1.hwnd,em_setreadonly,true,0
    '解除只读
    sendmessage text1.hwnd,em_setreadonly,false,0
      

  13.   

    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_SETREADONLY = &HCF
    Dim boReadOnly As Boolean'第一次双击只读,再次双击可编辑,再双击又只读...。设定boReadOnly的初值为True或False可改变第一次双击时的状态
    Private Sub Text1_DblClick()
      Dim retval As Long
      ReadOnly = Not ReadOnly
      retval = SendMessage(Text1.hwnd, EM_SETREADONLY, ReadOnly, ByVal 0&) '将文本框设为可编辑
    End Sub
      

  14.   

    笔误
    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_SETREADONLY = &HCF
    Dim boReadOnly As Boolean'第一次双击只读,再次双击可编辑,再双击又只读...。设定boReadOnly的初值为True或False可改变第一次双击时的状态
    Private Sub Text1_DblClick()
      Dim retval As Long
      boReadOnly = Not boReadOnly
      retval = SendMessage(Text1.hwnd, EM_SETREADONLY, boReadOnly, ByVal 0&) '将文本框设为可编辑
    End Sub
      

  15.   

    retval = SendMessage(Text1.hwnd, EM_SETREADONLY, boReadOnly, ByVal 0&) '在可编辑和只读间切换
      

  16.   

    footballboy(郑创斌)的方法应该可行,
    要么用api发送EM_SetReadOnly消息
    要么在事件响应中做文章
    要么屏蔽右键
      

  17.   

    其实这样就可以
    Dim boReadonly As BooleanPrivate Sub Text1_DblClick()
      boReadonly = Not boReadonly
      Text1.Locked = boReadonly
    End Sub
      

  18.   

    to footballboy:
    呵呵,Locked以后,用户可以依靠右键系统菜单来达到对TextBox的修改就算送EM_SETREADONLY效果也是一样的。
      

  19.   

    to gump2000(阿甘)
    谢谢!
      

  20.   

    谢谢各位朋友!Wolfzhang(屁屁狗):我试了一下你方法,好像TextBox控件总在Label控件上面,Label控件无法响应用户事件,采用“移至顶层”、“移至底层”也没用,怎么解决?回:
    你将text控件的Enable设为false
    虽然label控件在text下,但照样可以达到响应用户事件的目的
    ================
    我还有个方法
    你就用label控件模拟text控件,只要将其boderstyle设为1,同时在程序中通过改变label1.caption来显示或改变你要在显示的内容。
    如:label1.caption=“123”