如何在矩形中正确定位 "X"?
How to correctly position a "X" in a rectangle?
我有下一个问题:我有 10 行 10 列的矩形。当我按下一个正方形时,我必须绘制 "X" 字母。好吧,当我按下正方形的右半部分或下半部分时,"X" 分别绘制在下一个右方块和下方方块中。当我在一个正方形上按任意位置时,我应该怎么做,"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);
}
}
我的矩形是这样的:
非常感谢!
问题似乎出在您使用 MidpointRounding.AwayFromZero
的地方
在我看来,如果你必须计算要绘制的位置的总和 'X' 给出结果 6.6,你希望它位于位置 6,而不是位置 7,所以实际上你想将该行替换为:
int newEx = Math.Floor((e.X / (double)20)) * 20;
...然后对 Y 计算也做同样的事情
这应该确保无论它给出什么结果,它都不应该跳到下一个框。
我有下一个问题:我有 10 行 10 列的矩形。当我按下一个正方形时,我必须绘制 "X" 字母。好吧,当我按下正方形的右半部分或下半部分时,"X" 分别绘制在下一个右方块和下方方块中。当我在一个正方形上按任意位置时,我应该怎么做,"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);
}
}
我的矩形是这样的:
非常感谢!
问题似乎出在您使用 MidpointRounding.AwayFromZero
在我看来,如果你必须计算要绘制的位置的总和 'X' 给出结果 6.6,你希望它位于位置 6,而不是位置 7,所以实际上你想将该行替换为:
int newEx = Math.Floor((e.X / (double)20)) * 20;
...然后对 Y 计算也做同样的事情
这应该确保无论它给出什么结果,它都不应该跳到下一个框。