Страница: 1 |
Страница: 1 |
Вопрос: Добавление свойства BorderColor текстбоксу
Добавлено: 06.11.06 13:15
Автор вопроса: Vsevolod V | ICQ: 305416791
Хочу добавить текстбоксу свойство BorderColor для изменения цвета границы. Как доюавить свойство знаю, а что делать дальше? -)
Делаю так:
Public Class TextBoxE
Inherits System.Windows.Forms.TextBox
#Region "Объявление переменных"
Public BColor As System.Drawing.Color
#End Region
#Region "Объявление свойств"
Public Property BorderColor() As System.Drawing.Color
Get
Return BColor
End Get
Set(ByVal value As System.Drawing.Color)
BColor = value
Me.Invalidate()
End Set
End Property
#End Region
End Class
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
danser
ICQ: 299287824
Вопросов: 76
Ответов: 209
Профиль | | #1
Добавлено: 06.11.06 17:46
...
Что хочешь (что нужно) то и делай... например начинай юзать свой новий клас TextBoxE...
Номер ответа: 2
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #2
Добавлено: 06.11.06 18:47
Ну, отлавливай событие Paint и рисуй прямоугольник в hdc твоего TextBox
Номер ответа: 3
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #3
Добавлено: 06.11.06 19:27
Public Property BorderColor() As System.Drawing.Color
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 06.11.06 23:10
Тут не все так просто со свойством BorderColor
Во-первых тебе надо перегрузить его и выставить BorderStyle в None, потом заблокировать его и убрать из списка свойств вообще.В противном случае твой контрол будет отрисовывать стандартный Border. И только после этого заниматься отловом события Paint
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 07.11.06 05:28
Private нужно здесь делать а не Public
Поле лучше назвать _BorderColor, m_BorderColor или типа такого.
Во-первых тебе надо перегрузить его и выставить BorderStyle в None, потом заблокировать его и убрать из списка свойств вообще.В противном случае твой контрол будет отрисовывать стандартный Border. И только после этого заниматься отловом события Paint
Ничего такого не нужно - просто проверять, если BorderStyle установлен в нужный режим, то рисовать самому, в противном случае доверить это .NET или Windwos.
Номер ответа: 6
Автор ответа:
Vsevolod V
ICQ: 305416791
Вопросов: 2
Ответов: 2
Профиль | | #6
Добавлено: 07.11.06 11:08
Добавил вот это
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
 im rect As System.Drawing.Rectangle = e.ClipRectangle
e.Graphics.DrawRectangle(New Pen(BorderColor), rect)
End Sub
Но есть одна проблема. Если создавать проект Windows control library, то необходимо прописывать Inherits System.Windows.Forms.UserControl вместо TextBox. И в этом случае прорисовка границы работает хоть и кое-как - рисуется только верхняя и левая границы. А если создавать Class Library и использовать Inherits System.Windows.Forms.TextBox, то граница моего текстбокса не обводится. В этом случае не происходит даже обращения к моему OnPaint
Номер ответа: 7
Автор ответа:
Vsevolod V
ICQ: 305416791
Вопросов: 2
Ответов: 2
Профиль | | #7
Добавлено: 07.11.06 17:40
Почему не рисуется граница?
Public Class TextBoxE
Inherits System.Windows.Forms.TextBox
#Region "Объявление переменных"
Private BColor As System.Drawing.Color = System.Drawing.Color.Red
#End Region
#Region "Объявление свойств"
<Category("Appearance"> Public Property BorderColor() As System.Drawing.Color
Get
Return BColor
End Get
Set(ByVal value As System.Drawing.Color)
BColor = value
Me.Invalidate()
End Set
End Property
#End Region
#Region "Прорисовка"
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
 im rect As System.Drawing.Rectangle = e.ClipRectangle
e.Graphics.DrawRectangle(New System.Drawing.Pen(BorderColor), rect)
MyBase.OnPaint(e)
End Sub
#End Region
End Class
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 07.11.06 21:30
Потому что у TextBox нет события Paint, и по дефолту OnPaint никогда не срабатывает..
Чтобы его активировать надо в конструкторе установить бит стиля UserPaint, но после этого тебе придется заниматься отрисовкой контрола и выводом текста самостоятельно.. а это не так просто..
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 07.11.06 21:32
Как вариант .. можно попробовать через WndProc отлавливать нужные события(что то типа WM_PAINT) и там уже смотреть что из этого получится...