我想设计一个国际象棋棋盘,并拖动棋子(如pictureBox控件所示)主板(pictureBox1)的所有子级。我遇到的问题是透明度仅设置为父pictureBox1。这显示了以下效果:正方形显示.
private void CommonPiece_Mouse_Move(object sender, MouseEventArgs e)
{
if (Piece_Selected)
{
int MousePositionX = pictureBox1.PointToClient(Cursor.Position).X;
int MousePositionY = pictureBox1.PointToClient(Cursor.Position).Y;
(sender as PictureBox).Left = MousePositionX - 35;
(sender as PictureBox).Top = MousePositionY - 25;
}
}
什么是一个好的方法去做呢?
4条答案
按热度按时间mpbci0fu1#
这个问题有几种解决方案。下面的屏幕记录中的一种,是基于将png图像绘制为可移动的形状;它使用了我在How to drag and move shapes in C#中解释过的概念。基本上只有一个控件-绘图表面,所有其他的东西都是可移动的绘图。
当然,这是一个展示如何绘制可移动对象的快速例子,包括保持透明的png图像。你知道如何改进它:)
绘制和移动形状-棋子
要添加片段:
nkcskrwz2#
下面是一个使PictureBox非矩形化的例子。PB实际上将不存在于透明区域所在的位置:
运行示例:
jtjikinw3#
我做了类似的操作,但没有使用拖放事件
在MouseDown上,我假设拖动操作已经开始,我已经在拖放区域的顶部打开了一个半透明的无焦点窗口,并开始在该窗体上绘制拖动的图像。由于窗体是半透明的,它可以在所有内容的顶部显示透明的图像。我没有使用图像,而是在用户可以拖放的地方绘制了矩形。如果我没有记错的话,MouseMove事件将转发到拖动组件。在你的例子中,原始的棋子,或者打开但是没有聚焦的窗体,这样我就可以很容易地跟踪位置。
由于您可以在新的窗体上绘制图像,因此您可以向左或向右倾斜图像棋子图像,以获得良好的触感。
我使用这种技术开发了一个非常严格的窗体设计器应用程序。
sr4lhrrt4#
您可以使用面板而不是pictureBox,并在控件的背景中显示图像。请记住,您的图像必须是“png”,并且图像的周围必须完全透明。此外,面板控件的背景颜色由事件设置,以便在拖动过程中变为透明,并在拖放后恢复为单元格颜色。祝您好运。