2013-11-26 3 views
0

Я изо всех сил пытаюсь обернуть голову вокруг концепции, и я уже 4-5 часов. Поэтому я надеюсь, что кто-то сможет мне это объяснить.Использование различных классов для проверки основных элементов управления формы

У меня есть несколько флажков внутри закладки с надписью «tabpage2» в основной форме «QoE», и у меня есть несколько классов, которые должны знать состояния проверки этих флажков.

Я первый пошел об этом с помощью:

dim f as new QoE 

в каждом классе, то вызов галочки, как это:

f.chkTcpRTT.checked 

, но результат всегда возвращающиеся «False», является ли окно проверено или нет, что я предполагаю, связано с тем, что я использую слово «новый».

Моя вторая мысль была использовать метод имущества

Public Shared Property getchecker(ByVal chk As CheckBox) As Boolean 
    Get 
     Return chk.Checked 
    End Get 
    Set(ByVal value As Boolean) 
     chk.Checked = value 
    End Set 
End Property 

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

Public Shared Property getchecker(ByVal txt As string) As Boolean 
    Get 
     For Each ctrl as Control in TabPage2.Controls 
      If ctrl.name = txt Then 
       Return ctrl.Checked 
      End If 
     Next 
    End Get 
    Set(ByVal value As Boolean) 
     txt.Checked = value 
    End Set 
End Property 

Но теперь я получаю сообщение об ошибке: «Не удается обратиться к члену экземпляра класса внутри общего метода или совместно инициализатору член без явного экземпляра класса.»

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

Спасибо Ребята

ответ

0

Для вызова элементов управления из других классов вам необходимо инициировать форму и все элементы управления.

Public Class Form1 
    Public Shared f as Form1 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     f = Me 
    End Sub 

End Class 

Тогда в других классах просто обратитесь к е обычно как

Form1.f.Textbox1.Text = "" 

или

Form1.f.CheckBox1.Checked = True 

Наслаждайтесь

Для некоторого дополнительного чтения:

http://www.vbforums.com/showthread.php?744677-RESOLVED-Struggling-with-trying-to-access-a-control-on-a-form-from-seperate-classes&p=4563273&highlight=#post4563273

+0

Не отличное решение. f является нулевым в вашем примере. Что произойдет, если у вас открыто два Form1? – LarsTech

+0

Как я уже сказал в последнем посте - Вы действительно должны попробовать сначала. В настоящее время я использую это в двух моих программах. – Nefariis

+0

Не троллинг, просто увидел, что вы опубликовали тот же ответ, поэтому я разместил тот же комментарий. :-) – LarsTech

0

Это звучит как TabPage2 является переменной экземпляра, но вы пытаетесь ссылаться TabPage2 из Shared метода, где TabPage2 не существует.

Вам необходимо удалить модификатор Shared по методу getchecker.


Ответ на комментарии.

попробовать что-то вроде этого:

Public Property getchecker(ByVal txt As string) As Boolean 
    For Each ctrl as Control in Me.TabPage2.Controls 
     If ctrl.name = txt Then 
       Return ctrl.Checked 
     End If 
    Next 
    Return False 
End Property 

Чтобы использовать это, вы бы передать ваши ссылки на f к другому классу, и было бы назвать это как так f.getchecker("foo").

+0

Tabpage2 - это контейнер, содержащий 6 флажков, его вкладку из объекта управления TAB .... Кроме того, без совместного использования, как я могу назвать свойство из другого класса? ... Плюс я должен был бы передать ему объект checkbox, как я могу связать флажок с другого класса в первую очередь? – Nefariis

+0

Вы можете установить модификатор доступа флажков в 'public', а затем вы также можете получить к ним доступ из своего главного окна (через переменную экземпляра' tabpage2'). – Styxxy

+0

Они были открыты для публики все это время, а также контейнер табуляции. Я все еще не могу получить к ним доступ в любом случае – Nefariis

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