• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 153
  • Last Modified:

Accessing form controls (without 'sharing')

Let's say I have frmMain and a label on it that displays the date.
I want to be able to click the date, and have a second form frmDate display, which only contains the calendar control, and update the label on frmMain with the date selected.

Currently, I'm running into "Reference to a non-shared member requires an object reference" while trying to simply use frmMain.Label1.Text=Cal.SelectionStart
I sort of understand why that is, and have read that using the shared keyword may alleviate the problem, however, one twist that I have is that frmMain may not be frmMain 'all the time'.

Ideally, I'd love to be able to pass the Date clicked back to the form's parent (I'm displaying with showdialog), but that property appears to be empty anyway.

Any way to easily accomplish what I'm after here?  Please ask if anything needs clarifying.  Thanx
0
sirbounty
Asked:
sirbounty
  • 3
  • 2
1 Solution
 
PaulHewsCommented:
I would declare an event in frmDate:

Public Event DateSelected(ByVal SelDate As Date)

Raise it where you need it:

RaiseEvent DateSelected(Today)  'or whatever date

In frmMain, declare a handler and use it:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim frm As New frmDate
        AddHandler frm.DateSelected, AddressOf frm_DateSelected
        frm.ShowDialog()


    End Sub

    Private Sub frm_DateSelected(ByVal SelDate As Date)
        Label1.Text = SelDate.ToString("d")
    End Sub
0
 
sirbountyAuthor Commented:
Precisely what I needed.
Thanx! :^)
0
 
PaulHewsCommented:
If you can close the date form when you have selected a date, you can also create a property to read the date from:

Public Class frmDate
    Private mSelDate As Date
   

    Public Function SelDate() As Date
        Return mSelDate
       
    End Function

    Private Sub MonthCalendar1_DateSelected(ByVal sender As Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateSelected
        mSelDate = e.End
        Me.DialogResult = Windows.Forms.DialogResult.OK
        Me.Close()

    End Sub
End Class

Public Class Form1


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim frm As New frmDate

        If frm.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Label1.Text = frm.SelDate.ToString("d")
        End If


    End Sub

   
End Class
0
 
sirbountyAuthor Commented:
Hmm - yes, I will be closing it once the date is selected.
I'll try this out.  Thanx.
0
 
sirbountyAuthor Commented:
Works great!  Thanx again!! :^)
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now