Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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
Хочу добавить текстбоксу свойство BorderColor...

...
Как доюавить свойство знаю, а что делать дальше? ..


Что хочешь (что нужно) то и делай... например начинай юзать свой новий клас TextBoxE... ;)

Ответить

Номер ответа: 2
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #2 Добавлено: 06.11.06 18:47
Хочу добавить текстбоксу свойство BorderColor...

Ну, отлавливай событие Paint и рисуй прямоугольник в hdc твоего TextBox

Ответить

Номер ответа: 3
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #3 Добавлено: 06.11.06 19:27
Public BColor As System.Drawing.Color
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
Public BColor As System.Drawing.Color

Private нужно здесь делать а не Public
Поле лучше назвать _BorderColor, m_BorderColor или типа такого.

Тут не все так просто со свойством 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)
        ;Dim 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)
        ;Dim 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) и там уже смотреть что из этого получится...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам