Страница: 1 |
Страница: 1 |
Вопрос: UserControl и VB.NET
Добавлено: 02.10.04 16:00
Автор вопроса: shareman
Столкнулся с такой проблемой - в VB.NET у UserControl нет свойства BorderStyle, то, что в VB 6 возможно еще на стадии его конструирования. Для того, что нарисовать ему Border я использовал нечто вроде:
[CODE]Private Sub DrawMe()
Dim grp As Graphics = Me.CreateGraphics
Dim rc As New Rectangle(0, 0, Width, Height)
grp.Clear(Color.FromKnownColor(KnownColor.Window))
ControlPaint.DrawBorder3D(grp, rc, Border3DStyle.Sunken)
grp.Dispose()
End Sub[/CODE]
и вызывал это в OnPaint и OnResize, но попробуйте в сам контрол добавить, скажем, PictureBox и сделать ему Dock = Top - нарислванные куски Border-а, естественно, закроются этим самым PictureBox.
Вопрос, конечно, чисто риторический - неужели Б.Г. не мог сохранить в VB.NET то хорошее, что было в VB 6?
Может кто-то делал что-то похожее?
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #1
Добавлено: 02.10.04 22:33
Лично я решил эту проблему добавив в UserControl 4 панели прилепил их по бокам и все, можно устанавливать что угодно. И в конце для PictureBox можно также прописать любой DOCK и все будут нормально.
Номер ответа: 2
Автор ответа:
Oleg K
Вопросов: 15
Ответов: 72
Профиль | | #2
Добавлено: 03.10.04 00:20
Может вот этого будет достаточно...?
Imports System.ComponentModel
1. У своего UserControl в объявлениях пропиши следующее:
Private m_BorderStyle As Border3DStyle = Border3DStyle.Etched
2. Добавь свойство:
<Category("Apperance", _
 efaultValue(GetType(Border3DStyle), "Etched"> _
Public Shadows Property BorderStyle() As Border3DStyle
Get
Return m_BorderStyle
End Get
Set(ByVal Value As Border3DStyle)
If m_BorderStyle <> Value Then
m_BorderStyle = Value
Me.Invalidate()
End If
End Set
End Property
3. В процедуре OnPaint пропиши
Me.OnDrawBorder(e.Graphics)
4. А вот и сам метод OnDrawBorder
Protected Overridable Sub OnDrawBorder(ByVal gr As Graphics)
ControlPaint.DrawBorder3D(gr, ClientRectangle, m_BorderStyle)
End Sub
У меня это работает с унаследованным Label
Номер ответа: 3
Автор ответа:
Oleg K
Вопросов: 15
Ответов: 72
Профиль | | #3
Добавлено: 03.10.04 00:46
Прошу прощения, не дочитал что при помещении в контрол с бордером, другого элемента вордер первого закрывается.
Я попробовал не на UserControl, а унаследовал Panel, нарисовал ей бордер, поместил в нее контрол.
Все нормально бордер панели на месте. Может можно обойтись не UserControl ???
Номер ответа: 4
Автор ответа:
shareman
Вопросов: 11
Ответов: 37
Профиль | | #4
Добавлено: 03.10.04 01:45
Дело в том, что мне нужен был контрол со скролбаром в котором (контроле), можно было бы рисовать. Ну, голь на выдумки хитра - я убрал PictureBox, рисую в самом контроле, рисую на нем бордер, а для скролла добавил ма-а-аленькую Label, которую опускаю, куда понадобится.
Номер ответа: 5
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #5
Добавлено: 04.10.04 11:05
> а для скролла добавил ма-а-аленькую Label, которую опускаю, куда
понадобится
а для чего? не проще у UserControla выставить
AutoScroll = true и
AutoScrollMinSize в нужный размер, тогда скролл появиться без всяких
контролов..
Номер ответа: 6
Автор ответа:
Oleg K
Вопросов: 15
Ответов: 72
Профиль | | #6
Добавлено: 05.10.04 01:27
И в Panel можно поставить AutoScroll = true - тот же эффект.