Ничего у тебя не получилось... фигню ты сделал.. кривую.. (сорри за прямоту)Ты так и не понял то, что я тебе пытался объяснить.. (( Зачем ты создаешь объект Graphics?? Он тебе нафик не нужен! Он есть в событии Paint!!
Создай новый проект и скопируй этот код.. и разберись как он работает.. Без понимания того, что ты делаешь даже браться за GDI не стоит..
Public Class Form1
Private _mouse As Point
Private _font As New Font("Tahoma", 8)
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'// Избавляемся от мерцания при перерисовках
Me.DoubleBuffered = True
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
'// Запоминаем положение мыши
_mouse = e.Location
'// Перерисовываемся
Me.Invalidate()
End Sub
Private Sub Form1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
'// Формируем текст
Dim _text As String = String.Format("X = {0}" & vbNewLine & "Y = {1}", _
_mouse.X, _
_mouse.Y)
'// Узнаем размеры прямоугольника, в который можно вписать текст
Dim layoutSize As SizeF = e.Graphics.MeasureString(_text, _font)
'// Создаем базовый прямоугольник
Dim layoutRect As New Rectangle(_mouse.X + 20, _
_mouse.Y, _
layoutSize.Width, _
layoutSize.Height)
'// Смещаем его(прямоугольник) на 5 пикселов для вывода тени
layoutRect.Offset(5, 5)
'// Заливаем тень
e.Graphics.FillRectangle(New SolidBrush(Color.FromArgb(30, Color.RoyalBlue)), _
layoutRect)
'// Возвращаем прямоугольник обратно
layoutRect.Offset(-5, -5)
'// Заливаем фон
e.Graphics.FillRectangle(Brushes.White, _
layoutRect)
'// Рисуем рамку
e.Graphics.DrawRectangle(Pens.RoyalBlue, _
layoutRect)
'// Рисуем текст
e.Graphics.DrawString(_text, _
_font, _
Brushes.Black, _
layoutRect)
End Sub
И работает и так и так без метода invalidate, кстати для чего он нужен?
Invalidate так же как и Refresh перерисовывают форму или контрол для которого он(метод) был вызван.. Другими словами эти методы запускают процедуру Paint..
я не понял, что здесь за размер
Это размер, который принимает контрол при добавлении его на форму.. (начальный размер) Не обращай на него внимания.. можешь эту часть вообще удалить, это не принципиально
строчку Inherits Control пришлось заменить на Inherits System.Windows.Forms.UserControl, т. к. комп. выдал ошибку
Зря ты это зделал, заменить надо было на System.Windows.Forms.Control
'// Перерисовываем родителя, а он перерисует наш контрол
If Parent IsNot Nothing Then Parent.Refresh()
тож не догнал...
Дело в том, у нас нет фона и если мы нарисуем линию с толщиной 7 пикс, а потом с толщиной 2 пикс, то визуально никаких изменений ты не увидишь, она так и останется толщиной в 7 пикс, потому что нам надо перерисовать то, что находится ПОД нашим контролом, а значит перерисовать надо родителя..
Тебе вообще какая линия нужны??? Вертикальная? Горизонтальная? или она может принимать любой угол наклона? Какие требования ты предъвляешь к этой линии?? И для чего вообще она тебе нужна, опиши задачи этого контрола..
Тебе вообще какая линия нужны??? Вертикальная? Горизонтальная? или она может принимать любой угол наклона? Какие требования ты предъвляешь к этой линии?? И для чего вообще она тебе нужна, опиши задачи этого контрола..
1)она должна принимать любой угол
2)обрабатывать события mouse-m/d
3)фон прозрачен (само собой)
4)положение ее координат будет зависеть от текущих координат мыши... (то есть она должна быть еще и маневренной в любую сторону). В вб6 была проблема, что топ и лефт не могут быть отрицательными, поэтому контрол приходится растягивать на все пространство рисования...
5)вроде все, см. пункт 1-4
6)на всякий случай, если я чего-то забыл...