Solved

VB : 'System.Windows.Forms.Panel' cannot be indexed because it has no default property

Posted on 2009-04-15
8
442 Views
Last Modified: 2012-05-06
Hi,

When Im trying to add something to a runtime created panel I get this error :
'System.Windows.Forms.Panel' cannot be indexed because it has no default property

This only happens if I try to add something outside of the ROUTINE it was created.
I declare the panel in a routine :  Dim days_panel As New List(Of Panel)

Im assuming because its declared in a routine other routines cant see it?
But if I Declare it in the global variables I get the same error occurs for any reference of the panel..

Do I need to declare the default property? Cant seem to find out how!

Thanks for your time.
Barry
0
Comment
Question by:jellydeal
  • 4
  • 3
8 Comments
 
LVL 25

Expert Comment

by:Luis Pérez
ID: 24146548
Mmm... can you post your complete code, please? At least the code in where you declare the panel, and the code in where you try to add anything to that panel.
0
 

Author Comment

by:jellydeal
ID: 24146751
PANEL CREATION:

Private Sub Create_panel()
      Dim month_panel As New List(Of Panel)

        Do Until month_count > 12
            'BUILD MONTH PANEL
            month_panel.Add(New Panel)
            With month_panel(month_count - 1)
                .BorderStyle = BorderStyle.FixedSingle
                .BackColor = Color.Yellow
                .Width = 600
                .Height = 50
                .Location = New Point(10, (month_count * 49))
            End With
            Me.Controls.Add(month_panel(month_count - 1))

            monthx = Month(DateAdd("m", month_count - 1, start_date))
            yearx = Year(DateAdd("m", month_count - 1, start_date))
            pass_date = "01/" & monthx & "/" & yearx
            offset = Get_offset_from_date(pass_date) ' This is the offset to display the information on the grid  -from the left                  
            display_dates()
            display_pattern()
            display_roster()
            month_count = month_count + 1
        Loop
end sub


SUB ROUTINE THAT CAUSES ERROR
'Private Sub display_dates()


        'Month_title.Text = UCase(MonthName(monthx, True))
        'blank_offsets()

        'Remaining Divs with the DATE, should be aligned with the correct Day, thanks to OFFSET DIVS
        'cnt = 1
        'Do Until cnt = grid_length - offset
        ' output = cnt
        ' work_date = DateAdd("d", cnt - 1, pass_date)
        ' If Month(work_date) <> monthx Then output = " "
        ' check_weekend(cnt + offset)
        '=output PANEL FOR DATES
        'cnt = cnt + 1
        'Loop

        Dim day_count As Integer
        day_count = 1
        Do Until cnt = grid_length

            If cnt > offset And Month(work_date) = monthx Then
                day_count = day_count + 1
                work_date = DateAdd("d", cnt - 1, pass_date)
                check_weekend(cnt + offset)
                output = day_count.ToString
            Else
                output = ""
            End If

            'DISPLAY THE CELL
            panel_day(cnt) = New Panel
            lab_day(cnt) = New Label
            panel_day(cnt).BorderStyle = BorderStyle.FixedSingle
            panel_day(cnt).BackColor = Color.Pink
            panel_day(cnt).Width = 23
            panel_day(cnt).Height = 23
            panel_day(cnt).Location = New Point((cnt - 1) * 22, 0)

            month_panel(month_count).Controls.Add(panel_day(cnt)) 'ERROR LINE
'ERROR :'System.Windows.Forms.Panel' cannot be indexed because it has no default property

            lab_day(cnt).Location = New Point(-1, -2)
            lab_day(cnt).MinimumSize = New Size(24, 24)
            lab_day(cnt).Size = New Size(24, 24)
            lab_day(cnt).TextAlign = ContentAlignment.MiddleCenter
            If weekend(cnt) = 0 Then
                lab_day(cnt).BackColor = Color.White
            Else
                lab_day(cnt).BackColor = Color.LightGreen
            End If

            lab_day(cnt).Text = output
            panel_day(cnt).Controls.Add(lab_day(cnt))
            '/ CELL

            cnt = cnt + 1
        Loop

    End Sub
0
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 24146941
You need to declare the Panel List at class level, ie, outside of any routines.
0
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 24146956
BTW, where are the rest of your variables declared (month_count, monthx, yearx, etc)?
0
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 

Author Comment

by:jellydeal
ID: 24147135
Hi there.

Yes the other variables are declared outside any routine.
But if I move this declaration :
Dim month_panel As New List(Of Panel)

out of the routine then I get the error many errors , firstly :
Error 1 'month_panel' is already declared as 'Friend WithEvents month_panel As System.Windows.Forms.Panel' in this class.
secondly all references to it in the routine now give the error:
Error 3 Class 'System.Windows.Forms.Panel' cannot be indexed because it has no default property.

Im very confused!      
0
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 24147160
That's easily fixed - rename the Panel List variable.
0
 
LVL 47

Accepted Solution

by:
Wayne Taylor (webtubbs) earned 500 total points
ID: 24147164
...along with all other references to the list object.
0
 

Author Closing Comment

by:jellydeal
ID: 31570356
Hi Webtubbs..

Thanks for your help..
I actually just found a reference in the .vb file to a panel that no longer exists in design time.
    Friend WithEvents month_panel As System.Windows.Forms.Panel
I deleted this and now it works.
I have also moved the declarations to the class area!

Thanks for your time,
regards
barry
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now