日期:2014-05-18  浏览次数:21116 次

有点难,想要在两个控件(ListBox)之间画线!
ListBox1内有三项a,b,c
ListBox2内有三项1,2,3
从ListBox1中拖拽一项到ListBox2中去,比如拖拽b到3上,希望能实现在拖拽过程中生成一条直线连接b和3!以便形象的表示b和3联系起来了(类似与数据库中两个表建立关系)
一项可以和多项画线连接,多项对多项也可以连接,线条本身可选中删除;
需要记录每条线两端的信息,以便删除一条线的时候,可以在代码里处理取消两项的联系

------解决方案--------------------
class ItemRelation
{
ListBox list1;
ListBox list2;
Dictionary <int, int> relations = new Dictionary <int, int> ();
public ItemRelation(ListBox list1, ListBox list2) {
this.list1 = list1;
this.list2 = list2;
list1.FindForm().Paint += new PaintEventHandler(ItemRelation_Paint);
}

void ItemRelation_Paint(object sender, PaintEventArgs e)
{

}
public void AddRelations(int item_index_1, int item_index_2) {
relations.Add(item_index_1, item_index_2);
}
void GetPointByItemIndex(int index) {

}
}


还是太复杂了,帮不了你~~~
------解决方案--------------------
GDI+ 和鼠标坐标跟踪
------解决方案--------------------
做自定义控件
把线头画在图片框里,图片框透明,做处理事件~~
------解决方案--------------------
搜索了点资料,看看对LZ有没有帮助。
http://blog.csdn.net/wzuomin/archive/2007/08/23/1755743.aspx
http://blog.csdn.net/wzuomin/archive/2007/08/23/1755694.aspx
------解决方案--------------------
应该每画一条线,都要用一个动态数组把它们的坐标记录下来,然后在窗体的鼠标单击事件中,判断击点是否与动态数组中的某一条直线的坐交合,可以预留点空间,比如点到线的距离是小于十个像素就把它选中,至于选中你可以用另外一种颜色重画来表示,如果是选中状态,用户单了删除按钮,则将数组中相对应的那条记录删除。然后再将界面重画。