2016-04-05 27 views
0

modülünden gelen birleşik giriş kutusuna öğeler ekleyerek System.Windows.Forms.Form üyesi değildir, this, this ve this'u gördüm, ancak sorumu yanıtlamıyorlar.Combobox,

VB6 programının VB.NET'e (2008) yükseltilmesi ve günümüzün sürümüne yükseltilmesi için bir projem var. Birçok form için çeşitli şeyler yapan bir modülüm var. Aktif formun adı bir global değişkende (Current_Active_Form) saklanır. Formdan forma aynı adı taşıyan birçok formda aynı denetimler vardır (örneğin, comboX). Şimdi ilgilendiğim, bir for döngüsü kullanan bir öğeler listesiyle bir combobox (comboX) yükleyen bir işlevdir. Bunu diğer birçok combobox ve datagridviews ile yapan birçok başka fonksiyon var, bu yüzden bu bana her yerde yardımcı olacak.

Örnek:

Public Function fillComboX(ByRef fncString As Object) As String 
    'Current_Active_Form is a global variable 
    Dim startPoint as Integer 'substring starting point 
    Dim items as Integer   'number of items in item string 
    Dim strItem as String  'string for individual item 
    dim strItems as String  'string for all items 

    ...'code that fills strItems based on fncString 
     '(don't ask me why it's an object) 
    ...'items is filled at the same time 

    startPoint = 1 
    With Current_Active_Form 
     .comboX.Items.Add("") 
     '^^ line gives error comboX is not a member of System.Windows.Forms.Form 
     For i = 1 to items 
      strItem = strItems.Substring(startPoint, 50) 
      .comboX.Items.Add(strItem) 
      '^^so does this line 
      startPoint = startPoint + 50 
     Next i 
    End With 
End Function 

Buranın kaç benzer bunu yapmanın bir yolu var mı? İhtiyacım olan her şeyi yapabilirim, ama bu yeterince büyük bir yükseltme. Teşekkürler!

+1

geri değiştirebilir benim test amacıyla alt dize uzunluğunu azaltılmış formX gerçek sınıf adıdır FormX' olarak şeklinde. Bu – Plutonix

+0

form sınıfındaki bir yöntem olarak daha iyi olabilir İkinci bağlantı başka bir çözüm sunuyor: CBO geçmek. Ancak bu sadece FormX.comboX için kullanıldığında, formun bir modülden ziyade kendi kontrollerini yönetmesi için bir yöntem haline getirin. – Plutonix

+0

@Plutonix Doğru, form "Public Current_Active_Form As System.Windows.Forms .Form'. "FillComboX" işlevini çağıran çeşitli biçimlerden biri olabilir. Devam edebilir ve bu kodu kopyalayıp her yere yapıştırabilirim, ancak mümkünse merkezi olarak saklamayı tercih ederim. – pixelmeow

cevap

0

Current_Active_Form'daki Denetimler koleksiyonuna başvurmanız ve değiştirmek istediğiniz kontrolün referansını almak için kontrol adını anahtar olarak kullanmanız gerekir. Ne demek istediğimi göstermek için aşağıdaki kodu sağladım. Kod, Form olarak tanımlanmış olan Current_Active_Form'a güvenir.

Public Current_Active_Form As Form 

Public Function fillComboX(ByRef fncString As Object) As String 
    'Current_Active_Form is a global variable 
    Dim startPoint As Integer 'substring starting point 
    Dim items As Integer   'number of items in item string 
    Dim strItem As String  'string for individual item 
    Dim strItems As String = CStr(fncString)  'string for all items 

    'code that fills strItems based on fncString 
    '(don't ask me why it's an object) 
    'items is filled at the same time 

    startPoint = 0 
    With Current_Active_Form 
     If .Controls.ContainsKey("comboX") Then 
      '^^ line gives error comboX is not a member of System.Windows.Forms.Form 
      For i = 0 To strItems.Length - 1 
       strItem = strItems.Substring(startPoint, 4) 
       DirectCast(.Controls("comboX"), ComboBox).Items.Add(strItem) 
       '^^so does this line 
       startPoint = startPoint + 4 
      Next i 
     End If 
    End With 
End Function 

Ayrıca kod Fonksiyonu olarak tanımlanır ancak bir değer dönen niyetinde sürece, bir Sub olarak tanımlanması gerektiğini, böylece bir değer döndürmez.

Ben de kolayca 50 O Current_Active_Form` yerine `den Form` olarak` tanımlanır `gibi geliyor

+0

Teşekkürler, bunu deneyeceğim. Bu kodda bir şey döndürmeyen birçok işlev vardır, bu yüzden değişime baktığımız şeylerden biri budur. – pixelmeow