请问如何制作一个在设计时可以拖动用户控件里面控件的控件???????? 好像不行把---------------------〉good good study 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以做,不过比较复杂,我这里介绍你一本书去看看,清华大学出版社出的<<GDI+程序设计>> 编译后,在工具箱中添加相应的dll引用,就可以了 这个问题我知道,而且绝对能实现,不过要给分啊:)要实现这样的效果你需要为你的控件写一个Designer(我不知中文怎么说),从ControlDesigner类继承,这个类是用于扩展 Control 的设计模式行为的设计器基类,你要的效果肯定能实现,但是会有一些难度的。 在UserControl你可以设置属性,用于表现textBox1的位置属性想调整textBox1的位置,修改这个属性就可以了 这个问题我知道,而且绝对能实现,不过要给分啊:)要实现这样的效果你需要为你的控件写一个Designer(我不知中文怎么说),从ControlDesigner类继承,这个类是用于扩展 Control 的设计模式行为的设计器基类,你要的效果肯定能实现,但是会有一些难度的。您的分数是我的动力 以上说的都对,在设计状态下用鼠标直接拖动比较困难,我同意 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属性,改变其值即可。 测试通过。 myfei(兜里有糖)这种人怎么能抄我的答案呢,想分想疯了,要是这种人也能得分,你的问题我再也不回答了,本想有时间给你做个示例呢,CSND怎么会有这种人。设置属性是可以,但那不能通过鼠标来改变,那只是另外一种折中的办法,用鼠标操作叫设计时行为。在.net中我说的方法是最根本的解决方法。 1、自定义可拖动控件类2、自定义点击时出现的“手柄”类及其集合类(因为有8个嘛)3、再定义些辅助的类,如dragger,rubber(橡皮圈,就是鼠标划时出现的)等吧4、定义在容器类的mousedown,mousemove,mouseup代码一般就可以了当然也可以用控件定义的设计时支持的一些方法。 在UserControl中拖曳TextBox Control 的样例程序已经完成,样例工程已随邮件附上,以下是这个样例程序中所用到的关键技术的一些说明: 1. 在设计时支持TextBox Control的拖曳,主要通过ControlDesigner支持完成,ControlDesigner是一个专门用于支持用户控件设计时的类,在归属在System.Windows.Forms.Design名字空间中,故在开发需要引入相关的Assembly和名字空间。2. 派生一个UserControl类,并命名为MyControl,同时为该类增加一个内部类,该内部类派生于ControlDesigner,命名为MyControlDesigner,最后通过Designer属性将MyControlDesigner附属于MyControl,这样MyControlDesigner就接管了MyControl的设计时支持: [Designer(typeof(MyControl.MyControlDesigner))] // (3)通过Designer属性将MyControlDesigner附属于MyControl public class MyControl : System.Windows.Forms.UserControl // (1)派生一个UserControl类,并命名为MyControl { internal class MyControlDesigner : ControlDesigner //(2)增加一个内部类,该内部类派生于ControlDesigner,命名为MyControlDesigner { private int nOldX = 0; private int nOldY = 0; private bool bIsDraging = false; …… 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控件。 public class xxx : System.Windows.Forms.ScrollableControl,System.Windows.Forms.IContainerControl To zjm107(可乐加冰):在UserControl中拖曳TextBox Control 的样例程序能否发给我Email: [email protected]谢谢! asp.net 加水印后不清晰 求解决办法 文件加密实现思路 C#替换字符串问题! 线程调用窗体,求助大侠. C#.net 关于登陆的代码 如何在finally里释放数据库链接????????? 如何用C#代码实现WORD的自动图文集的功能 请问怎么把xml倒入数据库中呢? 从数据库导出数据和图片到excel表详细代码和详细解析方法 asp.net 要导入excel的文件表头在第二行,然后我在读取数据时候总是提示找不到列名,望不啬赐教 怎样检测程序是否在运行? ====调用VB的dll,出问题了,求大家帮忙====
要实现这样的效果你需要为你的控件写一个Designer(我不知中文怎么说),从ControlDesigner类继承,这个类是用于扩展 Control 的设计模式行为的设计器基类,你要的效果肯定能实现,但是会有一些难度的。
想调整textBox1的位置,修改这个属性就可以了
要实现这样的效果你需要为你的控件写一个Designer(我不知中文怎么说),从ControlDesigner类继承,这个类是用于扩展 Control 的设计模式行为的设计器基类,你要的效果肯定能实现,但是会有一些难度的。您的分数是我的动力
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属性,改变其值即可。
测试通过。
设置属性是可以,但那不能通过鼠标来改变,那只是另外一种折中的办法,用鼠标操作叫设计时行为。在.net中我说的方法是最根本的解决方法。
2、自定义点击时出现的“手柄”类及其集合类(因为有8个嘛)
3、再定义些辅助的类,如dragger,rubber(橡皮圈,就是鼠标划时出现的)等吧
4、定义在容器类的mousedown,mousemove,mouseup代码一般就可以了当然也可以用控件定义的设计时支持的一些方法。
1. 在设计时支持TextBox Control的拖曳,主要通过ControlDesigner支持完成,ControlDesigner是一个专门用于支持用户控件设计时的类,在归属在System.Windows.Forms.Design名字空间中,故在开发需要引入相关的Assembly和名字空间。2. 派生一个UserControl类,并命名为MyControl,同时为该类增加一个内部类,该内部类派生于ControlDesigner,命名为MyControlDesigner,最后通过Designer属性将MyControlDesigner附属于MyControl,这样MyControlDesigner就接管了MyControl的设计时支持:
[Designer(typeof(MyControl.MyControlDesigner))] // (3)通过Designer属性将MyControlDesigner附属于MyControl
public class MyControl : System.Windows.Forms.UserControl // (1)派生一个UserControl类,并命名为MyControl
{
internal class MyControlDesigner : ControlDesigner //(2)增加一个内部类,该内部类派生于ControlDesigner,命名为MyControlDesigner
{
private int nOldX = 0;
private int nOldY = 0;
private bool bIsDraging = false;
……
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控件。
在UserControl中拖曳TextBox Control 的样例程序能否发给我
Email: [email protected]
谢谢!