从树视图拖到图片框并连接元素
本文关键字:连接 元素 视图 | 更新日期: 2023-09-27 17:54:14
我被这个问题困住了。我在一个框架里有pictureBox和treeview。我想从treeview拖拽到图片框在那个图片框中我画了另一张图片(第一个图片框是地图在treeview中我有'Sings')
private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
Type testTip = new TreeNode().GetType();
TreeNode dragedNode;
_mouseDownSelectionWindow= Rectangle.Empty;
if (e.Data.GetDataPresent(testTip))
{
dragedNode = (TreeNode)e.Data.GetData(testTip);
PictureBox picOneFaceUpA = new PictureBox();
picOneFaceUpA.Parent = MapView;
picOneFaceUpA.Tag = dragedNode;
TreeNode tr = (TreeNode)picOneFaceUpA.Tag;
Sing vr = (Sing)tr.Tag;
picOneFaceUpA.Name = vr.idSing;
vr.onMap = true;
int xCord = e.X;
int yCord = e.Y;
picOneFaceUpA.Location = MapView.PointToClient(new Point (xCord - 20, yCord - 20));
picOneFaceUpA.BackgroundImage = vr.image;
vr.location = picOneFaceUpA.Location;
dictionary.Add(picOneFaceUpA.Location, vr);
picOneFaceUpA.Size = new Size(40, 40);
picOneFaceUpA.BackgroundImageLayout = ImageLayout.Stretch;
picOneFaceUpA.BringToFront();
picOneFaceUpA.Focus();
}
}
这是可行的,但是我怎么连接呢当我点击Sing on map时它会得到某种焦点(帧或其他)它会选择treview中的treenode我用来制作图片框的那个
当您将拖动的节点存储在PictureBox的Tag中时,您已经创建了一个连接。
要使其工作,您需要为创建的PictureBoxes
编写一些事件。
这是最小值
当点击我设置一个Border
时,选择你已经存储在Tag
中的Treenode
,并显式地将焦点设置在PictureBox
上。(点击PBs时通常不会获得焦点,所以我们需要在代码中进行,这样我们就可以捕获LostFocus
事件…)
picOneFaceUpA.Click += (ss,ee) => {
picOneFaceUpA.BorderStyle = BorderStyle.FixedSingle;
treeView1.SelectedNode = dragedNode;
picOneFaceUpA.Focus();
};
在LostFocus
中,我只是删除了Border
:
picOneFaceUpA.LostFocus += (ss, ee) =>
{
picOneFaceUpA.BorderStyle = BorderStyle.None;
};
不要忘记设置树形视图HideSelection = false;
,这样你就可以在焦点仍然在PB上时看到选择!
现在,根据您显示的图像,边框可能有点弱。为了获得更强的效果,你必须编写Paint
事件,在控件的顶部绘制一些更华丽的东西。:
picOneFaceUpA.Paint += (ss, ee) =>
{
if (picOneFaceUpA.BorderStyle == BorderStyle.FixedSingle)
ee.Graphics.DrawRectangle(Pens.Orange, 0, 0,
picOneFaceUpA.ClientSize.Width - 1,
picOneFaceUpA.ClientSize.Height - 1);
};
在代码中使用picOneFaceUpA.Focus();
调用。这似乎与设置LostFocus
事件冲突,所以将不得不删除它!