CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Mar 2001
    Posts
    9

    Passing control arrays to a function / subroutine

    Hi all,

    Curently, I am trying to use a subroutine in a module to create a control array, passing in the 0th member of the array as the parameter.

    Here is the code in part which does this:

    Sub CreateArray(ByRef frm As Form, ltblname As Control, lfldname() As Control, tflddata() As Control)

    On Error GoTo CreateArrayError:

    Dim varField As Variant
    i = 0

    ' Setup dynamic array for controls that display data
    For Each varField In gQuerySet.Fields
    If i = 0 Then
    ' sets 0th label caption
    lfldname(i).Caption = varField.name & ":"
    nFieldType = varField.Type
    ' set size of 0th textbox
    tflddata(i).width = GetFieldWidth(nFieldType)
    If nFieldType = dbText Then
    tflddata(i).MaxLength = varField.Size
    tflddata(i).TabIndex = 0
    End If
    ' bind textbox to datacontrol
    tflddata(i).DataField = varField.name
    i = i + 1
    Else
    ' load ith label
    Load lfldname(i)
    lfldname(i).top = (i * gnCTLARRAYHEIGHT) + tflddata(0).top
    lfldname(i).Visible = True
    ' load ith textbox
    Load tflddata(i)
    tflddata(i).top = lfldname(i).top
    tflddata(i).Visible = True
    ' set ith label caption
    lfldname(i).Caption = varField.name & ":"
    nFieldType = varField.Type
    ' set textbox width
    tflddata(i).width = GetFieldWidth(nFieldType)
    If nFieldType = dbText Then
    tflddata(i).MaxLength = varField.Size
    tflddata(i).TabIndex = i
    End If
    ' bind ith textbox to data control
    tflddata(i).DataField = varField.name
    i = i + 1
    End If
    Next

    intFields = i

    Exit Sub

    CreateArrayError:

    MsgBox Error(Err), vbOKOnly, "CreateArray"
    Resume

    End Sub


    I am using the following code to call this function:

    CreateArray frmEditor, lblTableName, lblfieldname, txtFieldData

    but it don't work.

    I have tried passing in the lblfieldname and txtfielddata controls as lblfieldname(i) and txtfielddata(i) and also setting the passed in control to lfldname(i) and tflddata().

    Any ideas if this is even possible, or do I have to create the array first and then pass in the whole array to a function which can then so the sizing and placement etc.???

    cheers

    Paul


  2. #2
    Join Date
    Jul 2000
    Location
    Milano, Italy
    Posts
    7,726

    Re: Passing control arrays to a function / subroutine

    easiest way:
    declare variant tipe variables
    fill it with your controls array
    (ie: dim Mylfldname As Variant, Mytflddata As Variant
    Mylfldname = lfldname)
    change your function to receive these variant
    (ie: public sub myfunction(x as ..., Mylfldname as Variant,...)
    and then, in your function
    test for:
    if typeof Mylfldname(0) is yourControlType then
    or
    if typeof Mylfldname(0) is Object
    Hope this help



    Special thanks to Lothar "the Great" Haensler. Come back soon, you Guru.
    ...at present time, using mainly Net 4.0, Vs 2010



    Special thanks to Lothar "the Great" Haensler, Chris Eastwood , dr_Michael, ClearCode, Iouri and
    all the other wonderful people who made and make Codeguru a great place.
    Come back soon, you Gurus.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured