C# 为什么它不能反方向画一个矩形呢?

C# 为什么它不能反方向画一个矩形呢?,c#,.net,graphics,bitmap,C#,.net,Graphics,Bitmap,所以我试图重新创建Windows附带的剪贴工具。 然而,我已经设法让它从左上角画出一个矩形,然后当我将光标移动到右下角时 但是,如果我尝试将光标从屏幕中间移动到左上角,它不会绘制矩形。 为什么会这样? 这里有一个GIF显示发生了什么 因此,最终得到的基本上是一个宽度和高度为负的矩形 您可能需要使用Math.Abs来确保在差值为负值的情况下获得适当的宽度和高度 这样,您可能还希望根据光标相对于选定点的位置从不同的位置进行绘制。差不多 selectWidth = e.X -

所以我试图重新创建Windows附带的剪贴工具。 然而,我已经设法让它从左上角画出一个矩形,然后当我将光标移动到右下角时

但是,如果我尝试将光标从屏幕中间移动到左上角,它不会绘制矩形。 为什么会这样? 这里有一个GIF显示发生了什么


因此,最终得到的基本上是一个宽度和高度为负的矩形

您可能需要使用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;,怎么样;?听起来不错:在这样一个简单的案例中,这只是偏好的问题。保留评论,使用方法只会成为个人偏好。这是真的:-我忘了我必须跟踪起点并从那里开始计算。感谢所有的帮助!