c#控件难题,求教高手

sld009 2010-06-03 07:46:13
请问各位,我想实现如下功能,可以么?(vs2008 c# 窗体应用程序)
先做一个容器控件A和一个控件B,A包含一个list<B>,B1、B2。。。继承于B,在设计器中,实现把B1拖到A中,在A的list中自动添加B1,并且让B1知道A,可行么?如何实现?
...全文
290 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
cja03 2010-06-06
  • 打赏
  • 举报
回复
不知道楼主的意思是不是在设计时,把控件拖进容器,VS自动生成Add的代码。
如果是的话,加上: [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
sld009 2010-06-06
  • 打赏
  • 举报
回复
自己顶下
Happyfeilin 2010-06-06
  • 打赏
  • 举报
回复
进来学习
傻_吖_头 2010-06-04
  • 打赏
  • 举报
回复
进来 学习的。。。。。
wxm3630478 2010-06-04
  • 打赏
  • 举报
回复
自己写个2个集合类........
llddyy123wq 2010-06-04
  • 打赏
  • 举报
回复
某些控件是可以的。但是不仅仅是拖。
如A是个容器控件,里面有个imagelist
B是个Image控件,就可以。
sld009 2010-06-04
  • 打赏
  • 举报
回复
我指的设计器 是vs自带的那个设计器 不是我自己写的设计器
denbes 2010-06-04
  • 打赏
  • 举报
回复
怎么加不上代码.

private void button1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{

button1.DoDragDrop(this.button1, DragDropEffects.Copy);

}


}

private void panel1_DragEnter(object sender, DragEventArgs e)
{
Button bt = e.Data.GetData(typeof(Button)) as Button;
bt.Location = new Point(0, 10);

this.panel1.Controls.Add(bt);
}
denbes 2010-06-04
  • 打赏
  • 举报
回复
如果b是一个button控件,a是一个Panel 可以这样实现:

private void button1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
button1.DoDragDrop(this.button1, DragDropEffects.Copy);
}


}

private void panel1_DragEnter(object sender, DragEventArgs e)
{
Button bt = e.Data.GetData(typeof(Button)) as Button;
bt.Location = new Point(0, 10);
this.panel1.Controls.Add(bt);
}

具体你看看,不难
战斗生活 2010-06-03
  • 打赏
  • 举报
回复
好久不用。net了 感觉好专业
只知道用控件
不会在。cs里面写代码啊 悲哀啊
sld009 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ly302 的回复:]

快速实现在Windows应用程序中支持拖拽的TreeView控件(C#)

概要

快速实现在Windows应用程序中支持拖拽的TreeView控件。

技术描述

TreeView已经提供了支持拖拽的事件:



ItemDrag: 用户拖拽TreeNode时触发。当它发生时,调用DoDragDrop方法初始化拖拽过程。


DragEnter: 在你初始化……
[/Quote]


。。。。我的意思是在设计器中,还在编程的时候,当我把B1拖到A中时,设计器代码自动生成将B1添加到A中的list中啊
sld009 2010-06-03
  • 打赏
  • 举报
回复
喔唷 c#这么高级 非常感谢大家
悔说话的哑巴 2010-06-03
  • 打赏
  • 举报
回复
现在好多都是引用
afeng124 2010-06-03
  • 打赏
  • 举报
回复
重写A的Controls.Add();方法就可以啦。把Control在方法里面强转一下,再调用list.add()加入list.至于B1,B2继承于B这个是自动的。设计器自动帮你完成了。
harker007 2010-06-03
  • 打赏
  • 举报
回复
学习了·~~~
皇城龙三 2010-06-03
  • 打赏
  • 举报
回复
快速实现在Windows应用程序中支持拖拽的TreeView控件(C#)

概要

快速实现在Windows应用程序中支持拖拽的TreeView控件。

技术描述

TreeView已经提供了支持拖拽的事件:


ItemDrag: 用户拖拽TreeNode时触发。当它发生时,调用DoDragDrop方法初始化拖拽过程。


DragEnter: 在你初始化拖拽操作后,你必须处理目标TreeView控件的DragEnter事件。 这个事件发生在用户拖拽TreeNode对象从TreeView控件到目标控件范围点内。DragEnter事件能够指定目标TreeView控件,无论拖拽操作对这个控件是否用。代码中仅仅是移动操作。


DragDrop: 最后是要处理目标TreeView的DragDrop事件。这个事件发生在用户推拽TreeNode对象并释放到目标控件中。处理这个事件, 返回TreeNode对象并添加到目标TreeView控件上。代码中用Data对象返回。


以下代码实现一个TreeView控件上拖拽任意节点到指定节点上,也可以自己扩展为多个TreeView控件间TreeNode相互拖拽的程序。Data对象的GetData方法返回被拖拽的TreeNode对象。GetNodeAt方法用来确定这个TreeNode对象拖拽到的目标控件(这里就是目标TreeNode对象)。在确定位置之后把源TreeNode对象添加到目标TreeNode对象下面,作为其子结点。因为是移动操作,因此最后会把源TreeNode对象删除掉。

通过以下几步创建实例程序:

1.
创建C# Windows应用程序

2.
界面增加一个TreeView控件

3.
设置TreeView的AllowDrop属性设置为True

4.
Page_Load方法中增加如下代码:



private void Form1_Load(object sender, System.EventArgs e)

{

// TreeView控件增加一些测试节点

TreeNode ParentNode1;

ParentNode1 = treeView1.Nodes.Add("tv1");

ParentNode1.Nodes.Add("tv1FirstChild");

ParentNode1.Nodes.Add("tv1SecondChild");

ParentNode1.Nodes.Add("tv1ThirdChild");

ParentNode1.Nodes.Add("tv1FourthChild");

ParentNode1.Expand();



// TreeView控件增加事件

this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);

this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);

this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);

}

5.
//treeView_ItemDrag 事件代码:

private void treeView_ItemDrag(object sender,

System.Windows.Forms.ItemDragEventArgs e)

{

DoDragDrop(e.Item, DragDropEffects.Move);

}

6.
// treeView_DragEnter事件代码:

private void treeView_DragEnter(object sender,

System.Windows.Forms.DragEventArgs e)

{

e.Effect = DragDropEffects.Move;

}

7.


// treeView_DragDrop事件代码:

private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)

{

TreeNode NewNode;



if(e.Data.GetDataPresent(typeof(TreeNode)))

{

Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));

TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);

NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

DestinationNode.Nodes.Add((TreeNode) NewNode.Clone());

DestinationNode.Expand();

//删除已经移动的节点

NewNode.Remove();

}

}
noway8881 2010-06-03
  • 打赏
  • 举报
回复
没看明白。是类似ListBox和ListView?
shashengduguzhe 2010-06-03
  • 打赏
  • 举报
回复
完全可行
wangan2008 2010-06-03
  • 打赏
  • 举报
回复
纯顶ls
mngzilin 2010-06-03
  • 打赏
  • 举报
回复
你慢慢体会吧
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
System.Diagnostics.StackFrame[] sfs= st.GetFrames();
Type t=sfs[0].GetMethod().ReflectedType;//获取类MessageBox.Show(t.ToString());

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧