问题如题。
我知道控件是通过判断usermode在设计时不响应事件的但问题是:是谁使控件在设计时能改变大小?调整位置?我的一种想法是,有一个设置可以控制当前是设计模式还是运行模式,如果是这样,如何进行设置,使我的程序在运行时具备设计时的状态?另外一个可能就是,msdn说判断设计模式是通过容器的环境属性提供的,但我制作了自己的容器,也建立了与msdn描述相同的属性,但还是不行,环境属性有另外的建立方法吗?或者有其它模拟这种效果的例子也行,我是想让用户能够通过拖动调整界面布局,像E语言一样,偶急用,谢谢各位大侠了

解决方案 »

  1.   

    刚才试了一下,用mouseMove事件可以实现,这里实现的是控制控件左边界位置,其他一样:Option Explicit
    Dim bLeftModi As BooleanPrivate Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 And X <= 1 Then
            bLeftModi = True
        End If
    End SubPrivate Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Debug.Print X, Y, Button
        If X <= 1 Then
            MousePointer = 5
        Else
            MousePointer = 0
        End If
        
        If bLeftModi = True Then
            Command1.Left = Command1.Left + X
            Command1.Width = Command1.Width - X
        End If
    End SubPrivate Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        bLeftModi = False
    End Sub
      

  2.   

    谢谢二位的回答,上面的实现步骤我已经试过了我专门做了一个“大小调整器”容器控件,可以将当前窗体的焦点控件置于其中,并改动大小,但总感觉不是很完美如果纯粹是改变特定控件的大小也还好了,我是需要在窗体上的任何控件都要具备这样一种状态,并且不能激活控件的事件——所以说是设计时状态啊有做usercontrol的高手来就好了
      

  3.   

    如果是自己写的控件,是可以用代码实现的。看MSDN的例程。回去查查。
      

  4.   

    to Ringfo(狂生A-9) 
    按你的想法,那就不是usercontrol能力所能及了.这样要牵涉到hook了,麻烦呢.
    等我高三毕业了,帮你研究:)
      

  5.   

    要实现这样的效果非常麻烦的。
    在控件的周围放上八个Label。给每个Label的拖动事件(就是MouseDown/Move/Up)写代码。注意,控件内部写的话,会发现没有Top/Left等属性的。这是需要一种技巧。
    在控件代码中写入:
    Public Referer As Object然后在代码里面(随便那里,越早越好)写:
    Set UserControl.Referer=Referer
    这样,就可以利用Referer提供的Top/Left/Width/Height了。
      

  6.   

    感谢诸位的回答,我想复述一下这个问题的症结------作为一个容器控件,如何提供像userMode这样的环境属性难道VB\易语言也都是自己实现的么?
      

  7.   

    很有可能。你可以看一下Delphi的设计界面,就与VB有着不同。
    UserMode很有可能只提供一个信号,通知控件处于设计状态,不要激发事件。对控件的外观调控应该是自己完成的。
      

  8.   

    在vb里是需要自己实现的。
    建议使用vb.net,
    就有如你所想的东东。
    呵呵。