C# 为什么它不能反方向画一个矩形呢?
所以我试图重新创建Windows附带的剪贴工具。 然而,我已经设法让它从左上角画出一个矩形,然后当我将光标移动到右下角时 但是,如果我尝试将光标从屏幕中间移动到左上角,它不会绘制矩形。 为什么会这样? 这里有一个GIF显示发生了什么C# 为什么它不能反方向画一个矩形呢?,c#,.net,graphics,bitmap,C#,.net,Graphics,Bitmap,所以我试图重新创建Windows附带的剪贴工具。 然而,我已经设法让它从左上角画出一个矩形,然后当我将光标移动到右下角时 但是,如果我尝试将光标从屏幕中间移动到左上角,它不会绘制矩形。 为什么会这样? 这里有一个GIF显示发生了什么 因此,最终得到的基本上是一个宽度和高度为负的矩形 您可能需要使用Math.Abs来确保在差值为负值的情况下获得适当的宽度和高度 这样,您可能还希望根据光标相对于选定点的位置从不同的位置进行绘制。差不多 selectWidth = e.X -
因此,最终得到的基本上是一个宽度和高度为负的矩形 您可能需要使用Math.Abs来确保在差值为负值的情况下获得适当的宽度和高度 这样,您可能还希望根据光标相对于选定点的位置从不同的位置进行绘制。差不多
selectWidth = e.X - selectX;
selectHeight = e.Y - selectY;
// If width is less than 0, draw from pointer, otherwise from select X
var drawFromX = selectWidth < 0 ? e.X : selectX;
// If height is less than 0, draw from pointer, otherwise from select Y
var drawFromY = selectHeight < 0 ? e.Y : selectY;
pictureBox1.Refresh();
pictureBox1.CreateGraphics().DrawRectangle(selectPen,
drawFromX,
drawFromY,
Math.Abs(selectWidth), // Make sure the rectangle width is positive
Math.Abs(selectHeight)); // Make sure the rectangle height is positive
因此,最终得到的基本上是一个宽度和高度为负的矩形 您可能需要使用Math.Abs来确保在差值为负值的情况下获得适当的宽度和高度 这样,您可能还希望根据光标相对于选定点的位置从不同的位置进行绘制。差不多
selectWidth = e.X - selectX;
selectHeight = e.Y - selectY;
// If width is less than 0, draw from pointer, otherwise from select X
var drawFromX = selectWidth < 0 ? e.X : selectX;
// If height is less than 0, draw from pointer, otherwise from select Y
var drawFromY = selectHeight < 0 ? e.Y : selectY;
pictureBox1.Refresh();
pictureBox1.CreateGraphics().DrawRectangle(selectPen,
drawFromX,
drawFromY,
Math.Abs(selectWidth), // Make sure the rectangle width is positive
Math.Abs(selectHeight)); // Make sure the rectangle height is positive
你不会以负宽度和负高度结束吗?比如,向下,x=5,然后移动,x<5,所以宽度是负数。这就是我想的,在DrawRectangle中四处玩耍并查看负值您需要跟踪它们的起始位置,并将其与鼠标移动时的位置进行比较,以确定起始点和当前点。您不会以负宽度和负高度结束吗?比如,向下,x=5,然后移动,x<5,所以宽度是负数。这就是我想的,在DrawRectangle中四处玩耍并查看负值您需要跟踪它们的起始位置,并将其与鼠标移动时的位置进行比较,以确定起始点和当前点。var drawFromX=Math.Mine.X,selectX;?听起来不错:在这样一个简单的案例中,这只是偏好的问题。保留评论,使用方法只会成为个人偏好。这是真的:-我忘了我必须跟踪起点并从那里开始计算。感谢所有的帮助!var drawFromX=Math.Mine.X,选择X;,怎么样;?听起来不错:在这样一个简单的案例中,这只是偏好的问题。保留评论,使用方法只会成为个人偏好。这是真的:-我忘了我必须跟踪起点并从那里开始计算。感谢所有的帮助!