Проблема со свойствами в своем контроле

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Проблема со свойствами в своем контроле

Сообщение AnarCky » 03.05.2007 (Чт) 12:26

Делаю очередной контрол, но теперь без наследования.
Т.е. надо самому все отрисовать, прописать все свойства и создать события.
Суть контрола такова:
надо чтобы это была ячейка для таблицы Менделеева. Информацию пропишу потом DrawString`ом.
Застрял я еще раньше. Надо чтоб на заднем фоне был градиент с заданными цветами. Вот о них и свойства.
И вот этот код почему-то не работает.

Код: Выделить всё

Imports System.Drawing.Drawing2D

Public Class ChemElemCell
    Inherits System.Windows.Forms.UserControl

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

        'по умолчанию этот стиль отлючен (не происходит событие OnPaint)
        'включаем его
        Me.SetStyle(ControlStyles.UserPaint, True)

    End Sub

    Dim gr As Graphics = Me.CreateGraphics
    Private cv1, cv2 As Color
    Private t1 As New Point(0, 0), t2 As New Point(Me.Width, Me.Height)
    Private grad As New LinearGradientBrush(t1, t2, cv1, cv2)
    Private recGr As New Rectangle(0, 0, Me.Width, Me.Height)

    Public Property cvet1() As Color
        Get
            Return cv1
        End Get
        Set(ByVal Value As Color)
            cv1 = Value
        End Set
    End Property

    Public Property cvet2() As Color
        Get
            Return cv2
        End Get
        Set(ByVal Value As Color)
            cv2 = Value
        End Set
    End Property

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        gr.FillRectangle(grad, recGr)
    End Sub

End Class


Что здесь не так? Спасибо!
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 03.05.2007 (Чт) 13:28

Код: Выделить всё
    Public Property cvet1() As Color
        Get
            Return cv1
        End Get
        Set(ByVal Value As Color)
            cv1 = Value
            grad = New LinearGradientBrush(t1, t2, cv1, cv2)
        End Set
    End Property

    Public Property cvet2() As Color
        Get
            Return cv2
        End Get
        Set(ByVal Value As Color)
            cv2 = Value
            grad = New LinearGradientBrush(t1, t2, cv1, cv2)
        End Set
    End Property

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        e.Graphics.FillRectangle(grad, recGr)
    End Sub


А процедуру New() сотри, она в твоем случае не нужна.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 03.05.2007 (Чт) 18:06

New() полностью убрать? даже ту часть которая "по умолчанию"
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 03.05.2007 (Чт) 19:07

Для New() остваил часть по умолчанию. Цвет вырисовывает. Все работает, спасибо. Занялся строками прописал вот так

Код: Выделить всё

Imports System.Drawing.Drawing2D

Public Class ChemElemCell
    Inherits System.Windows.Forms.UserControl

    Dim gr As Graphics = Me.CreateGraphics
    Private cv1, cv2 As Color, _
            namElem, simElem, num1Elem, num2Elem, lneElem, nomElem As String
    Private t1 As New Point(0, 0), t2 As New Point(Me.Width, Me.Height), _
            ts1 As New Point(5, 5), ts2 As New Point(8, 31), ts3 As New Point(7, 21), _
            ts4 As New Point(65, 3), ts5 As New Point(53, 18), ts6 As New Point(65, 32)
    Private neFont As New Font("Comic Sans MS", 27, FontStyle.Regular), _
            seFont As New Font("Comic Sans MS", 32, FontStyle.Bold), _
            lneFont As New Font("Comic Sans MS", 25, FontStyle.Italic), _
            nomFont As New Font("Comic Sans MS", 22, FontStyle.Regular)
    Private grad As LinearGradientBrush
    Private textElem As SolidBrush
    Private recGr As New Rectangle(0, 0, Me.Width, Me.Height)

    Public Property GradientColor1() As Color
        Get
            Return cv1
        End Get
        Set(ByVal Value As Color)
            cv1 = Value
            grad = New LinearGradientBrush(t1, t2, cv1, cv2)
        End Set
    End Property
    Public Property GradientColor2() As Color
'аналогично с другими переменными

    Public Property ElementName() As String
        Get
            Return namElem
        End Get
        Set(ByVal Value As String)
            namElem = Value
            textElem = New SolidBrush(Color.Black)
        End Set
    End Property
    Public Property ElementSymbol() As String
    Public Property ElementNumber() As String
    Public Property ElementLatinName() As String
'аналогично с другими переменными

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        e.Graphics.FillRectangle(grad, recGr)
        e.Graphics.DrawString(namElem, neFont, textElem, 8, 31)
        e.Graphics.DrawString(simElem, seFont, textElem, 5, 5)
        e.Graphics.DrawString(nomElem, nomFont, textElem, 65, 3)
        e.Graphics.DrawString(lneElem, lneFont, textElem, 7, 21)
    End Sub

End Class


в резалте, когда создаю контрол вылетает вот такая фигня(см приложение). С какого это перепугу вдруг? Хелп плззз...
Вложения
tempIm.png
tempIm.png (18.13 Кб) Просмотров: 1576
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 03.05.2007 (Чт) 20:22

Эта фигня говорит о том, что в процедуре OnPaint не инициализирована переменная grad т.е. равна Nothing
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 04.05.2007 (Пт) 2:32

Ну пошагово пройди и посмотри где нулик передается.

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 04.05.2007 (Пт) 5:51

FaKk2
Дык как посмотреть то... Это ж приложение ControlLibrary

Прикол в том, что при запуске приложения элемент рисуется, строчки пишутся, все есть. Наверное баг какой-нибудь.

Я прописал еще полтора десятка свойств. Хочу настраивать шрифты, и местоположение строчек (DrawString`овых) вручную из главного приложения.
Но свойства нифига не отображаются. В чем может быть причина
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.05.2007 (Пт) 7:28

AnarCky, сделай тестовый проект, включи его в тот же солюшен, где находится библиотека с контролом и тестируй на здоровье. А ошибка вылезает от того, что у тебя нет начальной инициализации grad. Сия кисть инициализируется только если происходит присваивание одного из свойств GradientColor1 или GradientColor2.
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 04.05.2007 (Пт) 13:04

Сия кисть инициализируется только если происходит присваивание одного из свойств GradientColor1 или GradientColor2.


Т.е. ты хочешь сказать, что до того как будут присвоены какието цвета этим двум свойствам будет рисоваться исключение?

сделай тестовый проект, включи его в тот же солюшен, где находится библиотека с контролом и тестируй на здоровье


ТОчно! Сам не додумался :) Спасибо!
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.05.2007 (Пт) 14:18

AnarCky писал(а):Т.е. ты хочешь сказать, что до того как будут присвоены какието цвета этим двум свойствам будет рисоваться исключение?

Именно так, инициализируй кисть какими-нить начальными цветами в конструкторе класса/контрола.
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 04.05.2007 (Пт) 18:37

Хорошр, пропишу, там чего-нибудь. Спасибо!

А что делать с "потерявшимися" свойствами?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 04.05.2007 (Пт) 18:55

Бред сивой кобылы... Токо что еще раз обнови, все есть. :shock: :shock:
Скажите начкок я правильно все делаю:
обновляю код в контроле
жму Debug
копирую .dll в прогу тестер с полной заменой
del'ю там старый элемент
добавляю во вкладку элемент из новой .dll
рисую новый контрол
удивляюсь почему отсутствуют полтора десятка свойств :)
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList  
cron