• 0

[VB.NET] How to reference object from Panel


Question

I have too panels in my program, one of them has a list on it, and I want to reference the list from the other panel. To be more specific, my list is printersList in panel goPanel, and I want panel goPanel to reference it. I get the the error: "Reference to a non-shared member requires an object reference." I've done a lot of research on this error, for about the past hour, but have not been able to make sense out of it, can anyone point me in the right direction?

Thanks

25 answers to this question

Recommended Posts

  • 0

Not sure how I could show it in a screenshot, but basically:

- I have 2 user control forms, startPanel and goPanel

- I have a check list box (printersList) on startPanel, that I want to reference on goPanel, so I can list the things checked in the check box.

- When I try to do startPanel.printersList.CheckedItems, it says "Reference to a non-shared member requires an object reference."

  • 0

I think you have to loop through the controls in the panel, finding one of the right type (cast it as the type of control you're looking for) and then reference it that way.

That or provide a public accessor in the form that returns the control.

  • 0

Winston, it is a user control that is reference by a panel, so the short answer would be that it's a user control.

John, how would I go about doing that? That is what MSDN has said, but I can't get it working.

This is what MSDN says for the error I am getting:

  Quote
You have referenced a non-shared member within your code and failed to supply an object reference. You cannot use the class name itself to qualify a member that is not shared. The instance must first be declared as an object variable and then referenced by the variable name.

Error ID: BC30469

To correct this error

Declare the instance as an object variable.

Reference the instance by the variable name.

I'm not sure how to do this, can someone describe generally how I would set this up?

  • 0

you have to declare the list as public or friend, if u just dragged and dropped it on the form is going to be declared private and not accessible by by any other object than the one that instanciated it. Thats why you get a bad reference. John proposed an even better idea (and the correct OO way) of providing a public property or method to access the control while still keeping the control private.

  • 0

yea, that's what MSDN said to do (John's way), not sure how to go about that though. The checkedlistbox's name is printersList in user control startPanel, so when I try Dim printersList2 As CheckedListBox, and set printersList2 = startPanel.printersList, that doesn't work. Am I going about this wrong?

Edited by JK1150
  • 0

ok scratch what I said up there, new objects are declared as friends. If these are all panels on the same form you should be able to loop through. Can you give a more specific example of that you are trying to do? do you want to show the same list twice? or are you using the values from printerslist to modify another list on the form? also is this winform or webform? aslo can you post a screenie of what you are trying to do (just disable the reference line of code). Visuals help demonstrate your desired behavior

  • 0

i'm not sure what i could take a screenshot of, but I have a mainFrame (Windows App) with a panel in it. The program starts by loading a user control into the Panel, which includes printersList, a list of printers on a network that can be installed. The user will click start, which will change the panel to the user control goPanel with a progress bar, cancel button, etc., which will use what was checked on the checked list in startPanel to install the selected printers. This is a winform. Is there a specific part of this you want to see?

  • 0

It sounds to me like you need to have your user control expose the checked list box as a public property. That way other user controls have access to it.

In your code for your goPanel control, you'd have something like this (this is C#, hopefully you can translate it if you need to)

class MyGoPanelControl : UserControl

{

// Next line probably added by your designer automatically

private CheckedListBox printersList;

public CheckedListBox PrintersList

{

get { return printersList; }

}

}

then, anything that can access an instance of MyGoPanelControl, can access the printersList control inside of it via the property.

Is that what you were looking for?

  • 0

I would be very surprised if you could not returna checkedlistbox in visual basic .net. Its just a class like anything else. It just happens to also have a visual representation.

I ran my code through a converter to get it to VB.NET:

Class MyGoPanelControl

Inherits UserControl

' Next line probably added by your designer automatically

Private printersList As CheckedListBox

Public ReadOnly Property PrintersList() As CheckedListBox

Get

Return printersList

End Get

End Property

End Class

  • 0

Ok, i added a new user control, added a panel into the user control, dropped a checkedlistbox into the panel.

Now i added the new user control to my form, and added a button which adds new items to the checkedlistbox.

Check out the attachment to see if that's what you're after.

  • 0

If you put that button on another user control rather than in the main frame, that is basically what I need to know how to do.

(I have the users select printers from a list, click go, and then a progress screen will come up where the "goPanel" class will need to know which printers the user selected in the "startPanel" class)

Thanks for all your help so far, VB.NET certainly is an interesting learning experience.

Edited by JK1150
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Sales don’t mean anything at all??? How many copies of FH5 did Microsoft sell on pS5? The number PS5’s impact those sales. What cheating is there on PS? A small amount of users spending money on KVM setups? PC gaming cheating is 1000x worse than any console gaming cheats. Joe user can easily buy full on cheats for PC games with full on easy to use gui’s for the cheats. Those websites brag about how many days they have not been caught. There is nothing like that for console gaming. Apparently you know nothing about nothing.
    • Console game sales still make more money than PC game sales. Both behind mobile game sales. Both Microsoft and Sony are making big money off of the games Microsoft is porting to PS. Those 75 million PS5’s are making an impact. There is a big market for console gaming and only Xbox console sales have suffered. The PS5 is on track to out sell the PS4. Yes Sony is porting their games to PC 18 months on average after they hit the PS5. Most console gamers want nothing to do with PC gaming especially Windows 11.
    • Oooh so that’s why. I was about to say there’s zero financial incentive to stop releasing songs for an EXISTING platform, but now I understand. Pathetic. I was planning on buying this game for VR2, but I guess I’ll just stick with Synth Riders then.
    • WD SSDs still block Windows 11 24H2 download and installs, Microsoft may be guilty too by Sayan Sen Microsoft has been slowly lifting several upgrade blocks for Windows 11 version 24H2, the 2024 feature update for Windows 11. For example, the most recent one was related to browser compatibility, and it was removed last month. This safeguard hold was lifted about a week after the company released the update such that it was available for download to everyone. However, there are still plenty of other compatibility blocks that are still in place. These include ones for Dirac Audio, sprotect SYS driver conflict, among others. Meanwhile, it looks like there is also an upgrade block on certain Western Digital SSDs that prevents them from getting the feature update. While Microsoft, or at least Windows 11, seems to be blocking the upgrade, the issue is not documented on the tech giant's health dashboard website alongside the other entries. The typical "What needs your attention" message box pops up indicating that the WD NMVe SSD in the user's system is the issue. It says: Thus, Windows thinks the WD drive in question is not compatible with the Windows 11 2024 update. As it turns out, the problem, one related to Host Memory Buffer (HMB), has seemingly already been fixed back in October 2024 with a new firmware update. However, Windows does not seem to deliver the correct link to download the update, which means users may still be unable to download Windows 11 24H2 on their PCs. A Reddit user found out that they were able to bypass the block by manually downloading the firmware from the SanDisk official support page for the corresponding drive model. They write: Thus, in case you happen to own such a disk, make sure to head over to the SanDisk Dashboard website here. It provides support for the following models: WD Green, Blue, Red, WD_BLACK, SanDisk SSD PLUS M.2, Extreme M.2, Extreme Pro M.2, Ultra 3D. You can find the instructions for updating firmware at this link. Source: Microsoft forum (link1, link2), Reddit
  • Recent Achievements

    • Week One Done
      Higante88 earned a badge
      Week One Done
    • Conversation Starter
      CarloDuplessis earned a badge
      Conversation Starter
    • First Post
      hhgygy earned a badge
      First Post
    • Collaborator
      WiltshireHam went up a rank
      Collaborator
    • One Month Later
      abhishek123323 earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      719
    2. 2
      ATLien_0
      278
    3. 3
      Michael Scrip
      205
    4. 4
      +FloatingFatMan
      193
    5. 5
      Steven P.
      129
  • Tell a friend

    Love Neowin? Tell a friend!