Рисование относительной линии в C # - PullRequest
3 голосов
/ 15 мая 2010

Ребята, я знаю, что это окажется простым ответом, но я не могу понять это. У меня есть приложение C # Winform, которое я пытаюсь построить. Я пытаюсь нарисовать белую линию на 60 пикселей выше нижней части формы. Я использую этот код:

private void MainForm_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawLine(Pens.White, 10, this.Height-60, 505, this.Height-60);
}

Достаточно просто, однако линия не рисуется. После некоторой отладки я понял, что она рисует линию, но она рисует ее вне моей формы. Если я изменю значение -60 на -175, то я смогу увидеть его внизу формы. Это решило бы мою проблему, за исключением того, что высота моей формы изменяется, линия становится все ближе и ближе к нижней части моей формы, пока, в конце концов, снова не исчезнет с формы. Что я делаю неправильно? Я использую неправильный графический блок? Или мне нужно сделать более сложный расчет, чтобы определить 60 пикселей в нижней части формы?

Ответы [ 2 ]

8 голосов
/ 15 мая 2010

Вам нужно использовать ClientSize.Height вместо Height.Свойство Height возвращает высоту всей формы (включая строку заголовка и другие части окна).Свойство ClientSize дает вам размер области, где вы можете рисовать.

Для получения дополнительной информации см. Свойство ClientSize в MSDN .

0 голосов
/ 18 мая 2010

Где этот код? Я заметил, что это обработчик событий и не обязательно член MainForm. Таким образом, когда вы ссылаетесь на this.Height, «this» может быть не MainForm (по крайней мере, мы не можем сказать по фрагменту кода, который вы включили). В общем, лучше переопределить OnPaint в вашей MainForm, а не подключать обработчик событий. Обязательно вызовите OnPaint базового класса, прежде чем приступать к рисованию.

Для получения дополнительной информации см. OnPaint в MSDN.

...