2015-06-19 3 views
2

У меня есть следующая проблема: у меня есть прямоугольник с 10 строками и 10 столбцами. Когда я нажимаю на квадрат, я должен нарисовать букву «X». Ну, когда я нажимаю на правую половину или на нижнюю половину квадрата, «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); 
    } 
} 

И мой прямоугольник как:

enter image description here

Большое спасибо заранее!

+0

Возможно, проблема заключается в том, где вы используете «MidpointRounding.AwayFromZero». Мне кажется, что если вы на полпути через квадрат, когда будете нажимать, это приведет к переходу на следующий квадрат. –

+0

Я думал, что это может быть источником моей проблемы. Но что мне делать, чтобы это исправить? – Ionut

+0

См. Мое предложение в ответе –

ответ

1

Похоже, что вопрос, где вы используете ваш MidpointRounding.AwayFromZero

Мне кажется, что если сумма, которую Вы должны вычислить позицию, которую вы хотите сделать «X» дает результат 6.6, вы хотите иметь его в положении 6, а не положение 7, так что реально вы хотели бы заменить эту строку с:

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

... А потом сделать то же самое для вычисления Y слишком

Это должно гарантировать, что все результат, который он дает, он не должен прыгать в следующем окне.

+0

Большое спасибо. Оно работает. – Ionut

+0

@ionut проблем нет. Рад, что смог помочь. –

Смежные вопросы