1. 解决一个吐血问题,在winform编程中修改控件的X,Y坐标值,并不能修改控件的位置
解:
问题描述,想实现一个控件排放顺序问题,也就是通过设置顺序的修改控件位置,一开始通过修改控件的X,Y值,怎么修改都不行,以为是对象交换时,实体没有赋值正确,通过打印输出,发现确实都正确了。已经将源控件和目标控件的坐标X,Y值呼唤了,还是不起作用,最后发现,修改控件坐标,只能通过location属性修改,重新给它赋值为Point数据。
代码如下:其中黄色代码为关键部分。
//父亲
NodeSubNodesopNode = Nodes[tnode.TreeNode.Index - 1];
inttgtnodeID;
intsrcnodeID;
intsrcDCPos;
inttgtDCPos;
intsrcY;
inttgtY;
NodeSubNodestempNodeSubNodes;
boolsuccess = false;
NodeSubNodestarget = Nodes[e.NewDisplayNO - 1];//opNode;//.SubNodes[e.NewDisplayNO- 1];
NodeSubNodessrc = opNode;
tgtnodeID =target.Node.NodeEntity.ID;
srcnodeID = src.Node.NodeEntity.ID;
success =itsCanvasBLL.SetNodeDisplayNO(tgtnodeID, srcnodeID);
//交换实体
if(success)
{//以下四个变量,不能通过交换获取,必须在交换前记住!!!
srcDCPos =tnode.TreeNode.Index - 1;
tgtDCPos = e.NewDisplayNO - 1;
srcY =Nodes[srcDCPos].Node.TreeNode.Y;
tgtY =Nodes[tgtDCPos].Node.TreeNode.Y;
Console.WriteLine("交换前:");
Console.WriteLine(Nodes[tgtDCPos].Node.NodeEntity.NAME+" "+
Nodes[tgtDCPos].Node.NodeEntity.DISPLAYNO+" "+
Nodes[tgtDCPos].Node.TreeNode.Text+" "+
Nodes[tgtDCPos].Node.TreeNode.Index+" "+
Nodes[tgtDCPos].Node.TreeNode.Y);
Console.WriteLine(Nodes[srcDCPos].Node.NodeEntity.NAME+ " " +
Nodes[srcDCPos].Node.NodeEntity.DISPLAYNO+ " " +
Nodes[srcDCPos].Node.TreeNode.Text + " " +
Nodes[srcDCPos].Node.TreeNode.Index + " " +
Nodes[srcDCPos].Node.TreeNode.Y);
tempNodeSubNodes = target;
Nodes[tgtDCPos] = src;
Nodes[srcDCPos] =tempNodeSubNodes;
Nodes[srcDCPos].Node.NodeEntity.DISPLAYNO = srcDCPos + 1;//tgtDCPos + 1;//Nodes[tgtDCPos].Node.NodeEntity.DISPLAYNO;
Nodes[srcDCPos].Node.TreeNode.Index = srcDCPos + 1;//tgtDCPos + 1;//Nodes[tgtDCPos].Node.TreeNode.Index;
Nodes[srcDCPos].Node.TreeNode.Y = srcY; //tgtY;// Nodes[tgtDCPos].Node.TreeNode.Y;
Nodes[srcDCPos].Node.TreeNode.Location =newPoint(Nodes[srcDCPos].Node.TreeNode.X,srcY);
Nodes[tgtDCPos].Node.NodeEntity.DISPLAYNO = tgtDCPos + 1;//srcDCPos + 1;//srcY;
Nodes[tgtDCPos].Node.TreeNode.Index =tgtDCPos + 1;//srcDCPos + 1;//srcY;
Nodes[tgtDCPos].Node.TreeNode.Y = tgtY;//srcY;
Nodes[tgtDCPos].Node.TreeNode.Location =newPoint(Nodes[tgtDCPos].Node.TreeNode.X,tgtY);
Console.WriteLine("交换后:");
Console.WriteLine(Nodes[tgtDCPos].Node.NodeEntity.NAME+ " " +
Nodes[tgtDCPos].Node.NodeEntity.DISPLAYNO + " " +
Nodes[tgtDCPos].Node.TreeNode.Text + " " +
Nodes[tgtDCPos].Node.TreeNode.Index + " " +
Nodes[tgtDCPos].Node.TreeNode.Y);
Console.WriteLine(Nodes[srcDCPos].Node.NodeEntity.NAME+ " " +
Nodes[srcDCPos].Node.NodeEntity.DISPLAYNO + " " +
Nodes[srcDCPos].Node.TreeNode.Text + " " +
Nodes[srcDCPos].Node.TreeNode.Index+ " " +
Nodes[srcDCPos].Node.TreeNode.Y);
//修改显示名称
//修改纵坐标
//刷新子节点父亲序号,
Nodes[tgtDCPos].RefreshChildrenParentIndex();
Nodes[tgtDCPos].RefreshChildrenY();
Nodes[srcDCPos].RefreshChildrenParentIndex();
Nodes[srcDCPos].RefreshChildrenY();
}