好像不行把
---------------------〉
good good study

解决方案 »

  1.   

    可以做,不过比较复杂,我这里介绍你一本书去看看,清华大学出版社出的<<GDI+程序设计>>
      

  2.   

    编译后,在工具箱中添加相应的dll引用,就可以了
      

  3.   

    这个问题我知道,而且绝对能实现,不过要给分啊:)
    要实现这样的效果你需要为你的控件写一个Designer(我不知中文怎么说),从ControlDesigner类继承,这个类是用于扩展 Control 的设计模式行为的设计器基类,你要的效果肯定能实现,但是会有一些难度的。
      

  4.   

    在UserControl你可以设置属性,用于表现textBox1的位置属性
    想调整textBox1的位置,修改这个属性就可以了
      

  5.   

    这个问题我知道,而且绝对能实现,不过要给分啊:)
    要实现这样的效果你需要为你的控件写一个Designer(我不知中文怎么说),从ControlDesigner类继承,这个类是用于扩展 Control 的设计模式行为的设计器基类,你要的效果肯定能实现,但是会有一些难度的。您的分数是我的动力
      

  6.   

    以上说的都对,在设计状态下用鼠标直接拖动比较困难,我同意 xinshaw(清瘦卫郎) 的方法,基本上能解决问题,实现起来非常容易。
      public class UserControl1 : System.Windows.Forms.UserControl
      {
        private System.Windows.Forms.TextBox textBox1;
        /// <summary> 
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.Container components = null;    /// <summary>
        /// 获取和设置textBox1的X坐标
        /// </summary>
        /// 
        public int textBoxX
        {
          get
          {
            return textBox1.Left;
          }
          set
          {
            textBox1.Left = value;
          }
        }
        .
        .
        .
      }  在设计状态下,屏幕右边UserControl属性中多一个textBoxX属性,改变其值即可。
      测试通过。
      

  7.   

    myfei(兜里有糖)这种人怎么能抄我的答案呢,想分想疯了,要是这种人也能得分,你的问题我再也不回答了,本想有时间给你做个示例呢,CSND怎么会有这种人。
    设置属性是可以,但那不能通过鼠标来改变,那只是另外一种折中的办法,用鼠标操作叫设计时行为。在.net中我说的方法是最根本的解决方法。
      

  8.   

    1、自定义可拖动控件类
    2、自定义点击时出现的“手柄”类及其集合类(因为有8个嘛)
    3、再定义些辅助的类,如dragger,rubber(橡皮圈,就是鼠标划时出现的)等吧
    4、定义在容器类的mousedown,mousemove,mouseup代码一般就可以了当然也可以用控件定义的设计时支持的一些方法。
      

  9.   

    在UserControl中拖曳TextBox Control 的样例程序已经完成,样例工程已随邮件附上,以下是这个样例程序中所用到的关键技术的一些说明:
    &nbsp;
    1.&nbsp;&nbsp; 在设计时支持TextBox Control的拖曳,主要通过ControlDesigner支持完成,ControlDesigner是一个专门用于支持用户控件设计时的类,在归属在System.Windows.Forms.Design名字空间中,故在开发需要引入相关的Assembly和名字空间。2.&nbsp;&nbsp; 派生一个UserControl类,并命名为MyControl,同时为该类增加一个内部类,该内部类派生于ControlDesigner,命名为MyControlDesigner,最后通过Designer属性将MyControlDesigner附属于MyControl,这样MyControlDesigner就接管了MyControl的设计时支持:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Designer(typeof(MyControl.MyControlDesigner))] &nbsp;// (3)通过Designer属性将MyControlDesigner附属于MyControl
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class MyControl : System.Windows.Forms.UserControl &nbsp;// (1)派生一个UserControl类,并命名为MyControl
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; internal class MyControlDesigner : ControlDesigner &nbsp;//(2)增加一个内部类,该内部类派生于ControlDesigner,命名为MyControlDesigner
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int nOldX = 0;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int nOldY = 0;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private bool bIsDraging = false;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ……
      

  10.   

    3.   在MyControl中,增加2个属性TextBoxLeft和TextBoxTop分别用于指定MyControl中内嵌的TextBox的位置,同时覆盖基类的OnLoad方法,同时在OnLoad中用这两个位置信息来生成这个TextBox:
                                this.textBox1 = new System.Windows.Forms.TextBox();
                                this.SuspendLayout();
                                this.textBox1.Name = "textBox1";
                  this.textBox1.Left = TextBoxLeft;
                                this.textBox1.Top = TextBoxTop;
                                this.textBox1.Width = TextBoxWidth;
                                this.textBox1.Height = TextBoxHeight;
                                this.textBox1.TabIndex = 0;
                                this.textBox1.Text = "textBox1";
                                this.textBox1.Multiline = true;
                                this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;
                                this.Controls.Add(this.textBox1);
                                this.ResumeLayout(false);
                                base.OnLoad (e);
    4.   在MyControlDesigner中,覆盖基类的OnMouseDragBegin、OnMouseDragMove、OnMouseDragEnd方法这样就可以在设计时相应鼠标的拖曳事件,并根据相应的拖曳位置来重新定义MyControl中的TextBoxLeft和TextBoxTop属性,一旦属性改变,需要用RaiseComponentChanging(null);方法来通知MyControl控件:
                                 if(bIsDraging)
                                 {
                                           MyControl myControl = this.Control as MyControl;
                                           if(myControl!=null && myControl.textBox1!=null)
                                           {
                                                    myControl.textBox1.Left += x - nOldX;
                                                    myControl.textBox1.Top += y - nOldY;
                                                    myControl.TextBoxLeft = myControl.textBox1.Left;
                                                    myControl.TextBoxTop = myControl.textBox1.Top;
                                                    this.RaiseComponentChanging(null);
                                           }
             5.通过以上几个步骤,就完成了MyControl中TextBox控件的设计时拖曳,这样在运行时,UserControl创建过程中,它会通过TextBoxLeft和TextBoxTop来创建TextBox控件。
      

  11.   

    public class xxx : System.Windows.Forms.ScrollableControl,System.Windows.Forms.IContainerControl
      

  12.   

    To zjm107(可乐加冰):
    在UserControl中拖曳TextBox Control 的样例程序能否发给我
    Email: [email protected]
    谢谢!