Solved

ShowDialog form with MonthCalendar over the button that shows calendar

Posted on 2008-11-03
6
583 Views
Last Modified: 2011-10-19
I have various forms that contain date maskedtextboxes and a button to the right of each textbox inside either a tabcontrol, panel or both.  The button will showdialog this form that contains a MonthCalendar with only a Close option in top right.

I am attempting to pass the location of the button so that the top/left corner of Calendar form can be displayed just over the top/left corner of button.  Below is the code to kick off the calendar.

Dim frm As New Misc_CalendarDateSelect(104, "txtDueDate", txtDueDate.Text, Me.Panel1.Location + Me.cmdDueDateCalendar.Location)

The positioning, however is always high and too far to left.  Where am I going wrong???
0
Comment
Question by:TSFLLC
  • 3
  • 3
6 Comments
 
LVL 96

Expert Comment

by:Bob Learned
ID: 22875633
The form's position is based on screen coordinates, and the control's position is based on client coordinates.  You need to convert the client coordinates to screen coordinates, in order to position the form correctly.  The Form and Control class inherit the PointToClient and PointToScreen methods for that purpose.
0
 

Author Comment

by:TSFLLC
ID: 22876801
Below is the code I'm using where Label1 is a label and cmdCheckDateCalendar is the button I want to set the form in front of:

Dim frm As New Misc_CalendarDateSelect("txtCheckDate", FormatCurrentDate(), Me.PointToScreen(Me.Label1.Location + Me.cmdCheckDateCalendar.Location))
frm.ShowDialog()

Public Sub New(ByVal xTextBox As String, ByVal xDate As Date, ByVal xPoint As Point)
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()
        'Add any initialization after the InitializeComponent() call
        glDateField = xTextBox
        MonthCalendar1.SelectionStart = xDate
        MonthCalendar1.SelectionEnd = xDate
        Me.Location = Me.PointToClient(xPoint)
    End Sub


The only issue I have now is that the CalendarForm does not hide the calendar button with the top left corner of the form but it hides it with the top left corner of the Calendar itself.  I can live with that but I don't understand why it's doing that.
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 22876861
Can you attach a .png screen shot of what you mean by "hide"?
0
Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

 

Author Comment

by:TSFLLC
ID: 22877380
In the image I attached I have moved the Integra Calendar form away from the Calendar button so that you could see the button.  When you click the button initially, the Integra Calendar form displays over the button and the top left edge of the calendar matches up with the top left corner of the button.

What I don't understand is why the top/left corner of the Integra Calendar form (not the top/left corner of the Calendar control) doesn't match the top/left positioning of the calendar button???

Thanks.
Phil
MonthCalendar1.jpg
0
 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
ID: 22879910
Try something like this example.

You may not have set the form's StartPosition to Manual.

Dim form As New TestForm() 
 
form.StartPosition = FormStartPosition.Manual 
form.Location = New Point(Me.Left + Me.ShowFormButton.Right, Me.Top + Me.ShowFormButton.Bottom) 
 
form.Show() 

Open in new window

0
 

Author Comment

by:TSFLLC
ID: 22880242
The issue of not setting start position to manual was my #1 problem.  The code below works like a charm.

This was the conclusion to the code that worked accordingly:

From data entry form.....
Private Sub cmdInvoiceDateCalendar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInvoiceDateCalendar.Click
    If txtInvoiceDate.Text = "  /  /" Then
        Dim frm As New Misc_CalendarDateSelect(104, "txtInvoiceDate", FormatCurrentDate(), Me.PointToScreen(Me.gbInvoiceAssessment1.Location + Me.cmdInvoiceDateCalendar.Location))
        frm.ShowDialog()
    Else
        Dim frm As New Misc_CalendarDateSelect(104, "txtInvoiceDate", txtInvoiceDate.Text, Me.PointToScreen(Me.gbInvoiceAssessment1.Location + Me.cmdInvoiceDateCalendar.Location))
        frm.ShowDialog()
    End If
End Sub

From MonthCalendar form....
Public Sub New(ByVal xTextBox As String, ByVal xDate As Date, ByVal xPoint As Point)
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()
        'Add any initialization after the InitializeComponent() call
        glDateField = xTextBox
        MonthCalendar1.SelectionStart = xDate
        MonthCalendar1.SelectionEnd = xDate
        Me.StartPosition = FormStartPosition.Manual
        Me.Location = xPoint
    End Sub


Thanks!
Phil
0

Featured Post

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Well, all of us have seen the multiple EXCEL.EXE's in task manager that won't die even if you call the .close, .dispose methods. Try this method to kill any excels in memory. You can copy the kill function to create a check function and replace the …
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

813 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

12 Experts available now in Live!

Get 1:1 Help Now