动态生成TextBox和RichTextbox控件的问题,但这两个控件无法设置一些属性?如TextBox 无法用代码修改MultiLine, 无法用代码修改RichTextBox的ScrollBars
有没有其他控件可以代替两个控件???

解决方案 »

  1.   

    先放置一个TextBox 和 一个RichTextBox 并设置好你想要的属性。并且visuable=false
    要用到时将其 visuable=true即可。如果要用到多个TextBox或多个RichTextBox,则可根据已有的textBox和RichTextBox动态创建控件数组。不过要事先设置其属性 index=0 如:        lstFunc(0).Left = tabRole.Left
            lstFunc(0).Top = tabRole.Top
            lstFunc(0).Height = 3210
            lstFunc(0).Width = 5055
            lstFunc(0).visuable=truefor i=1 to N
                Load lstFunc(i)
                lstFunc(i).Left = tabRole.Left
                lstFunc(i).Top = tabRole.Top
                lstFunc(i).Height = 3210
                lstFunc(i).Width = 5055
    next
    `           lstFunc(i).Visible = True
      

  2.   

    用楼上方法可以实现,
    楼主不想用load 
    而用controls.add ("vbText","s")的方法添加就无法实现了,前一段时间有个帖子问就是
    改变multiline属性的方法,楼主可以查找一下
      

  3.   

    无论是Edit(VB封装成TextBox)还是RichTextBox
    都不能在运行时修改滚动条
    只能在控件创建时设置滚动条
    所以VB的TextBox、RichTextBox控件的Scroll属性都是只读的,因为这个属性的修改涉及到控件的重新创建,而控件的重新创建会丢失原有文本数据,甚至会引起一般保护性错误
      

  4.   

    MultiLine也一样,是只能在控件创建时设置的属性
      

  5.   

    省资源的解决方案:
    去学SDK编程,用CreateWindowEx创建Edit(或RichText)窗口,发消息控制Edit(或RichText),拦截通知消息处理事件
      

  6.   

    我刚开始在csdn的vb论坛里看到这个帖子的时候,想了很久都没有找到解决方法。后来看zy910写到“由于Edit控件的设定(只能在创建窗口时设置风格,创建后不能修改)
    所以TextBox的MultiLine屬性实现原理是:先清除原有的Edit,再创建一个新的Edit
    这在设计时是可行的。但在运行时,会导致文本框相关数据的丢失,甚至会因不安全的代码导致非法操作,所以M$将TextBox的MultiLine屬性设置成运行时只读”,那么通过直接使用textbox控件是无法满足要求的了。
    其实我们可以找到一个替代的方法,微软给我们提供了一组无窗口控件库。所谓“无窗口控件”是见名知义,是没有无窗口,因而没有hwnd属性。这个库在主要语言的参考文档中没有提到,它必须手工从common\Tools\vb\Winless目录下安装。安装的方法是将这个目录复制到硬盘上,用regsvr32或vb中对它进行注册,然后双击Mswless.reg,它创建使activex控件对vb环境可用的注册关键字。注册完毕后,从按Ctrl+T从可用的Active控件列表中选取Microsoft Windowless Control 6来把函数库加载到IDE中。
    使用windowless函数库的好处是在运行时没有内部控件的限制,事实上所有的属性都可以在运行时改变。这个库中包括TextBox的无窗口版—MSWLess.WLText。也就说我们可以通过动态加载这个控件,来实现动态添加multiline属性的text控件。
    Dim WithEvents TxtEditor As MSWLess.WLText
    Private Sub Command1_Click()
        
        Set TxtEditor = Controls.Add("MSLess.WLText", "txtEdit")
        TxtEditor.MultiLine = True
        TxtEditor.ScrollBars = wlBoth
        TxtEditor.Move 0, 0, ScaleWidth, ScaleHeight
        TxtEditor.Visible = True
        
    End Sub
    注意:“工程属性”中“删除有关未使用的active控件的信息”的复选框不要选。