2014-11-04 2 views
1

Мне нужно прочитать содержимое текстового поля в форме1. До сих пор у меня не было какой-либо ошибочной проблемы, я создал функцию, которая действует отлично. Проблема в том, что эта функция стала слишком большой, чтобы сохранить ее в форме1, поэтому я создал класс, который я импортировал в form1. Этот класс содержит функцию, которая была ранее содержащейся в Form1, теперь компилятор дает мне это сообщение:Прочитать объект из формы1 в класс vb.net

«ENCE на неразделяемый член требует ссылок на объект»

вероятен потому, что он может Не читайте объект в форме1. Интересно, поэтому, как получить доступ к этому ресурсу, я пытался импортировать form1 класс вроде этого:

Imports App.Form1 

функции класса

public function Export() 
    oSheet.Cells(2, 2).value = Oggettivo_1_1.Value 'oggettivo_1_1_.value is an object of form1 
end function 

, но я получаю всегда ту же ошибку, есть кто может мне помочь?

+0

Почему вы пытаетесь импортировать форму? Разве ваша форма не должна ссылаться на класс? Вам нужно передать данные только «параметрами» или «свойством»! –

+0

показать код, где вы вызываете эту функцию, вам может потребоваться создать экземпляр объекта перед вызовом метода, предполагая, что метод не является 'Shared' – Ric

+0

Действительно, вы правы, но я хочу просто обратиться к текстовому полю, присутствующему в form1, что мне импортировать класс? –

ответ

1

Imports обычно используется для создания Types (например, классов) в пространстве имен. Он не предоставляет Ссылка на объект, которая является ключевой частью полученного сообщения об ошибке. Так как мы не знаем, как и где этот класс создан здесь общий способ пойти об этом:

Public CLass Form1 
    Private myClass As Class1  ' whatever you named it 

    Sub Form_Load.... 
     myClass = New Class1(me) 
     ... 
    End Sub 

Так что вы описали показывает, что класс является более или менее помощником для формы, потребность класса ссылка на эту форму и не имеет оснований для существования без нее. Таким образом, мы используем конструктор для обращения к форме:

Public Class1 
    Private myFrm As Form1 
    Public Sub New(frm As Form1) 
     myFrm = frm 
    End Sub 

    public function Export() 
     myFrm.oSheet.Cells(2, 2).value = ... 
end function 

Теперь ваш класс может ссылаться на форму, используя ссылку на местную форму. Поскольку мы не знаем, как ваше приложение построено, это позволяет форме ссылаться на методы в классе, а класс ссылается на вещи в форме.

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

+0

Так что я вынужден обратитесь к производителю, чтобы прочитать содержимое текстового поля в форме1? Невозможно импортировать что-то, не делая все это? –

+0

Как я описал вначале, Importing предоставляет доступ к * Types * (классы, пространства имен и т. Д.), А не к * объектным ссылкам *, что вам нужно получить во время выполнения, например текст текстового поля, данные сетки и т. Д. – Plutonix

Смежные вопросы