WTF - ошибка компилирования на сравнение: ObjRef = nothing

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

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

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

WTF - ошибка компилирования на сравнение: ObjRef = nothing

Сообщение amokr » 04.05.2009 (Пн) 13:38

Что то я совсем голову заломал - нигде не могу найти прямого ответа - как в vb.net проверять Объектную ссылку на предмет инициализации? Вопрос возник при передаче объектной ссылки в функцию в качестве Optional параметра.
Соответственно необходимо реализовать два варианта логики - один для случаев, когда optional параметр есть, а другой когда его нет

Интуитивно понятный путь, это выражение вида:

if not ObjRef = Nothing then... ...else... и тд

Однако при написании такого выражения, среда выдает ошибку вида:
Error 1 Operator '=' is not defined for types 'WindowsApplication1.TPhase' and 'WindowsApplication1.TPhase'.

Единственным видимым мне путем обхода этой ошибки является создании отдельной функции, которая будет обращатся к какой нить функции объекта, по означенной ссылке, перехватывать ошибку, если таковая будет появляться и таким образом определять - инициализирована ссылка или нет. Но этот способ не очень правилен с точки зрения основ программирования.

Подскажите плз - где я не прав?:)

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: WTF - ошибка компилирования на сравнение: ObjRef = nothing

Сообщение Ronin » 04.05.2009 (Пн) 13:41

Много текста, времени мало. Если я понял суть, то тебе нужно проверить объект на Nothing?
Код: Выделить всё
If Obj Is Nothing Then
....

If IsNothing(Obj) Then
С уважением,
Игорь Шувалов aka Ronin

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: WTF - ошибка компилирования на сравнение: ObjRef = nothing

Сообщение amokr » 04.05.2009 (Пн) 13:44

сенькс:) все работает:) так я и знал что ларчик открывается просто:)


ПС сорь за многобукв, уже давно прочитал гайд по вопросам с citforum:) с тех пор стараюсь писать подробно:)

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: WTF - ошибка компилирования на сравнение: ObjRef = nothing

Сообщение amokr » 04.05.2009 (Пн) 13:48

Кстати раз уж такая оказия, что тут отвечают:)

Есть еще одна проблема, возникла при создании нестандартного эл. управления.

Для его создания я использовал стандартные рекомендации - наследовал от System.Windows.Forms.Control. Переопределил метод OnPaint, и дальше использовал ветку System.Drawing

На данном этапе, для тестирования, нарисовал закрашенный прямоугольник с границами.

Следующим этапом надо сделать так что бы в данном прямоугольнике отображался текст. И тут появилась проблема.

Сам текст отобразить не сложно, это делается инструкцией:

Dim grfGraphics As System.Drawing.Graphics
grfGraphics = e.Graphics << Где e - это объект класса System.Windows.Forms.PaintEventArgs, передаваемый в метод OnPaint, используется в моем коде потому что напрямую объект класса Graphics создать нельзя.>>

Dim xCoord As Single
Dim yCoord As Single
Dim bshBrush As System.Drawing.Brush
bshBrush = New System.Drawing.SolidBrush(System.Drawing.Color.Black)
xCoord = <<Какое то значение>>
yCoord = <<Какое то значение>>
grfGraphics.DrawString(Me.Text, Me.Font, bshBrush, xCoord, yCoord)



По ходу дела необходимо реализовать позиционирование текста внутри элемента управления (например MiddleCenter, или остальные восемь стандартных позиций)
Элемент управления может быть произвольных размеров и текст может быть произвольной длинны, однако xCoord и yCoord задают координаты левого, верхнего угла текстового поля.

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

Сами вычисления для прямоугольного элемента управления довольно просты (в примере вычисляем позицию MiddleCenter) - необходимо от половины ширины элемента управления, отнять половину ширины текстового поля, и это и будет xCoord.
Проведя такую же операцию с высотой получим yCoord.


Размеры элемента управления получить не сложно, они содержатся в
<<CntrName>>.Size.Width
<<CntrName>>.Size.Height

Так же не сложно получить высоту текстового поля, она зависит от размера шрифта и содержится в Me.Font.Height который мы использовали для создания строки

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

Подскажите плз - как получить ширину строки, или каким еще образом можно реализовать позиционирование текста в элементе управления?

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: WTF - ошибка компилирования на сравнение: ObjRef = nothing

Сообщение Ronin » 04.05.2009 (Пн) 13:55

Опять много букв.. Посмотри вот это:
Код: Выделить всё
        Dim G As New System.Drawing.Graphics

        G.MeasureString ....


P.S. А не проще наследовать Label или что там больше подходит?
С уважением,
Игорь Шувалов aka Ronin

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: WTF - ошибка компилирования на сравнение: ObjRef = nothing

Сообщение Williams » 04.05.2009 (Пн) 14:24

Кстати
Код: Выделить всё
If Not Object Is Nothing
можно заменить на более логичное
Код: Выделить всё
If Object IsNot Nothing
И вы думаете, что вас оставят в живых после прочтения этого поста?

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: WTF - ошибка компилирования на сравнение: ObjRef = nothing

Сообщение amokr » 04.05.2009 (Пн) 23:06

Ronin писал(а):Опять много букв.. Посмотри вот это:
Код: Выделить всё
        Dim G As New System.Drawing.Graphics

        G.MeasureString ....


P.S. А не проще наследовать Label или что там больше подходит?


да, действительно гениально... по идее решает все проблемы:)) надо только посмотреть что бы лейбл автоматически раздвигался вместе с ростом строки...

Кстати... можно заменить на более логичное


ну это просто вопрос привычки:) как то само собой получается писать именно так:))) но за совет все равно спасибо:)


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

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

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

    TopList  
cron