Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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";), _
     ;DefaultValue(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 - тот же эффект.

Ответить

Страница: 1 |

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



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