从树视图拖到图片框并连接元素

本文关键字:连接 元素 视图 | 更新日期: 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事件冲突,所以将不得不删除它!