c# - 如何在矩形中正确定位 "X"?

标签 c# position draw

我有下一个问题:我有 10 行和 10 列的矩形。当我按下一个正方形时,我必须画出“X”字母。好吧,当我按下正方形的右半部分或下半部分时,“X”分别绘制在下一个右方 block 和下方方 block 中。当我在一个正方形的任意位置按时,要在相应正方形上绘制“X”时,我应该怎么做?

我的代码是:

private void panel2_MouseClick(object sender, MouseEventArgs e)
{
    txtX.Text = Convert.ToString(e.X);
    txtY.Text = Convert.ToString(e.Y);

    var data = File.ReadAllLines(handleClinet.GetPath().Replace("Client","Server"));

    if (e.X >= 20 && e.Y >= 20 && e.X <= 220 && e.Y <= 220)
    {
            var graph = (sender as Panel).CreateGraphics();
            const int redInt = 255; //255 is example, give it what u know
            const int blueInt = 255; //255 is example, give it what u know
            const int greenInt = 255; //255 is example, give it what u know

            var p = new Pen(Color.FromArgb(redInt, blueInt, greenInt));
            var newEx = (int)Math.Round(
                (e.X / (double)20), MidpointRounding.AwayFromZero) * 20;

            var newEy = (int)Math.Round(
                (e.Y / (double)20), MidpointRounding.AwayFromZero) * 20;

            RectangleF rectF1 = new RectangleF(newEx, newEy, 20,20);
            graph.DrawString("X", new System.Drawing.Font("Arial", 16), Brushes.Blue, rectF1);
    }
}

我的矩形是这样的:

enter image description here

非常感谢!

最佳答案

问题似乎出在您使用 MidpointRounding.AwayFromZero

的地方

在我看来,如果你必须计算要绘制“X”的位置的总和给出结果 6.6,你希望它位于位置 6,而不是位置 7,所以实际上你想要替换那一行:

int newEx = Math.Floor((e.X / (double)20)) * 20;

...然后对 Y 计算也做同样的事情

这应该确保无论它给出什么结果,它都不应该跳到下一个框。

关于c# - 如何在矩形中正确定位 "X"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30934350/

相关文章:

WPF tabitem 定位

html - 多个元素向右和底部 float

c# - 如何绘制控件的圆形凸起和凹陷边缘?

python - 如何在 pygame 中在屏幕顶部显示分数?

android - 画线- Android

c# - 使用 XmlSerializer() 反序列化带有&符号的 XML

c# - 字符串到 Ansicode 表示

c# - 将不同的泛型存储在单个可枚举中

c# - 如何在 C# 中对事件进行 xml 序列化

css - 如何使这个元素垂直居中?