VB.net - Issues with reading radio buttons between forms - vb.net

I have a basic math test program, and 2 forms to allow the user to choose which function to test on.
The first form has a list of radio buttons with the 4 basic math functions and a button to load the next form.
The second form contains this code on Load...
'Change function sign to reflect chosen option
If frmOptions.rdoAdd.Checked Then
lblFunc.Text = "+"
ElseIf frmOptions.rdoSub.Checked Then
lblFunc.Text = "-"
ElseIf frmOptions.rdoMult.Checked Then
lblFunc.Text = "x"
ElseIf frmOptions.rdoDiv.Checked Then
lblFunc.Text = "÷"
End If
If I change the Checked field in the properties in form 1, it passes to form 2.
However if I use the radio buttons to choose a different option, form 2 sticks with the default choice from form 1.
EDIT
Changed a few lines based from input, but still having this issue.
I'll run through it again.
frmOptions has 4 radio buttons, addition is default chosen.
After selecting one, the user clicks a button to open frmTest.
The above code runs upon first load to change a label to reflect what was chosen on frmOption above.
On step 3, the label on frmTest that is supposed to be changed based on the Checked radio button from frmOption never changes. It doesn't even change on the first load of the form, so I think something is wrong with the Checked property of the radio buttons.
Hopefully this clears things up a bit.

It seems like there's not enough information here to know for sure.
It sounds like your first form is loading the second form with values the first time, but then on subsequent calls it doesn't load the second form because it's already loaded. Does that sound correct?
If so, then that you are probably setting values on the first form which get passed to the second form. Instead, create properties on the second form and load it first. Then have the first form manipulate those properties.

Try firing an event when the radio button changes instead of when form2 loads.

Try using the Form2.Shown event instead of Form2.Load.
A form is loaded only once, but it can be shown numerous times.

Have you tried
If My.Forms.Form1.Radiobutton_Name.Checked = True Then
lblFunc.Text = "+"
ElseIf My.Forms.Form1.Radiobutton_Name.Checked = True Then
lblFunc.Text = "-"
ElseIf My.Forms.Form1.Radiobutton_Name.Checked = True Then
lblFunc.Text = "x"
ElseIf My.Forms.Form1.Radiobutton_Name.Checked = True Then
lblFunc.Text = "÷"
End If

Related

Button to check for missing values in a MainForm and Subforms in MS Access

New to Access (still), have only basic VBA skills.
I've got 3 subforms (subfrm_PackingSteps1 , subfrm_MetalDetection and subfrm_Weights - the first 2 are continuous and the other one is single form) within a main form (frm_daily_packing_record) that users go through and input data. The user should be able to input data in no particular order, and only at the end there would be a button to confirm that the user is ready to save this form.
I'd like to have this button on the main form that checks each control (in main form and subforms) for empty values. I found and adjusted a code to check the recordset of one of the continuous forms (see below), but I can't figure out:
how to include a code that checks each control instead of manually adding all of them (I've used a function before that utilises the Tag property, but can't add it to this)
how to keep the button in the main form while checking the controls/recordsets in the other subforms.
Thanks in advance.
Private Sub ConfirmBtn_Click()
Dim blnSuccess As Boolean
blnSuccess = True
Me.Recordset.MoveFirst
Do While Not Me.Recordset.EOF
If IsNull(Me.pc) Or IsNull(Me.InnerP) Then
blnSuccess = False
Exit Do
End If
Me.Recordset.MoveNext
Loop
If blnSuccess = True Then
MsgBox "You may proceed to save this record"
Else
MsgBox "You still have some empty fields to fill in!", vbCritical + vbOKOnly, "Empty Fields!"
End If
End Sub
I personally don't like this because it is too code-heavy and can easily break when the form is modified.
Instead may I suggest doing it slightly different, for each field have vba code .ondirty or .onupdate and do the validation checking right as the user is actually on that field.
This has 2 benefits, it is creating the validation when you are creating each form field and it STOPS the user right when their first mistake or bad data is entered. The last thing I want is to enter 50 fields, scroll to the bottom, submit fails then scroll back and try to find where the mistake was. If validation is done while the user it doing the actual data entry, when you get to the bottom you should have valid data and the submit should succeed without further testing.
Less code to debug and timely messages to the user if an error is caught!

Conditional visibility on MS Access Form - how to write in VBA or Macro

I have some very (very) basic MS Access knowledge. I'm trying to expand a bit into either VBA or macros as I'd like to put in some conditional visibility for my form. Basically, I have a checkbox. If it's checked, I want three or four more fields to pop up. Someone was able to point me to a basic VBA formula of if (this checkbox) = true then, (fieldx).visible = true, else, (fieldx).visibility = false, end if.
But I'm so new to this that I need more help and explanation. I tried putting it in but couldn't get it to work (no error message, just nothing changed at all).
Specific questions:
-Does this formula seem right?
-If I want multiple fields to be visible, can I combine them into one formula or should I create a new "if" statement for all?
-Where do I enter this code? I'm running the Office 365 version. For all I know, I'm not even putting it in the right place.
-How do I determine the field names to replace the (this checkbox) and (fieldx) in the formula? I tried entering the name I title the fields as, but with the spaces in the name I got an error message, and without the spaces nothing happened. Is there a specific naming convention to turn the field names into formula-appropriate titles? Is the name listed somewhere?
-Once I get the formula entered, is there something I have to do to get it to run/take effect? I tried saving, closing and reopening with no changes.
-Is this the best way to go about this?
If there's anything else you think I should know, I would love to hear it - but please keep in mind I'm very new to this so if you could keep it at "dummy" or ELI5 levels of explanation, I'd appreciate it!
after creating a form with 4 textboxes and a checkbox put the form in design mode (lower right corner has design mode selected, select a textbox and hit property sheet on the ribbon (or f4).
On the property sheet note the visible property. set the visible property to false. Now the textbox will be invisible when the form starts.
Tip you can select all the textboxes at the same time and set their properties all at once.
Every control on the form and even the various parts of the form have properties you can set and play with. For instance you can give any name you want to any control. On the property sheet go to the other tab and set the name property.
Tip: choose a name you you will remember without having to look it up and describes the controls function.
Next select the checkbox (not the checkbox's label). On the property sheet go to the event tab and select the on click event. hit the ellipsis and choose code builder. Access is Event Driven. We want the textboxes to appear when the checkbox is selected so we put that code in the checkbox click event.
after choosing code builder we get the code window where we can browse among all the events for all our forms. for now all you should see is something like:
Private Sub mycheckbox_Click()
End Sub
So insert some code to handle the checkboxes like:
Private Sub mycheckbox_Click()
If mycheckbox = True Then
txtbox1.Visible = True
txtbox2.Visible = True
txtbox3.Visible = True
txtbox4.Visible = True
Else
txtbox1.Visible = False
txtbox2.Visible = False
txtbox3.Visible = False
txtbox4.Visible = False
End If
End Sub
now when the checkbox is not checked no textboxes are visible.
but when the checkbox is checked they appear

Getting MS-Access form to save invisible combo boxes as a null or 0 value in query and table

I don't know that how I have built my form is necessarily the best way that I can do it, but it was the way that I could get it to work, at least partially. I have built a form in ms-access 2007 that uses vba to either hide or make available certain combo boxes. The first choice and the one on which the rest of the form is based is a yes/no option, being that either the customer requires outside services for their job or not. Once that is selected the user can then choose from the outside service options(Which are the combo boxes, either visible or no based on the first choice). So this is where the problem comes in, I have code written so that if the user chooses no in the very first box the rest of the boxes are made invisible. However if the user chooses yes they must then choose values, again yes or no to either retain or remove other options for the remainder of the form.
What I am looking to do is to make it so that when the user returns to the form what choices they made are still there. So if they chose no then the form would basically be blank and if they had said yes initially than that answer along with only the other choices they made would be available.
What I am currently using is a simple if-then statement to make the boxes either visible or not.
Private Sub Combo36_AfterUpdate()
If Combo36.Value = "No" Then Me.Combo18.Visible = False
If Combo36.Value = "Yes" Then Me.Combo18.Visible = True
If Combo36.Value = "No" Then Me.Combo20.Visible = False
If Combo36.Value = "Yes" Then Me.Combo20.Visible = True
End Sub
Obviously I am not experienced with access and have stumbling my way through it. I am sorry if any of what I have said above is confusing. If clarity is needed please let me know.
Well for a start, "Flase" should be updated to "False".
Instead of storing and then repopulating the selected values it might be easier to turn the visibility of the whole form true/false based on selection which would keep the last values the user selected.
For showing visibility of the controls try:
Private Sub Combo36_Change()
If Me.Combo36.Value = "No" Then
Me.Combo18.Visible = False
Me.Combo20.Visible = False
ElseIf Me.Combo36.Value = "Yes" Then
Me.Combo18.Visible = True
Me.Combo20.Visible = True
End If
End Sub
Your initial code is okay, to be able to have the form retain the choices then copy the code you have under the Combo36_AfterUpdate() event into the Private Sub Form_Current() event. This will do it.

option button in selected mode in vba access 2010

I have a check box in a access form and i want when this check box selected , a option button in my form becomes selected.
Sorry, I know this is a amateur question but i need an answer. I used this but it doesn't work :
If (Me.Check86 = True) Then
Option107.OptionValue = 1
Else
Option110.OptionValue = 0
End If
Use the value property instead.
OptionValue is used when several option buttons are grouped together. It allows you to determine which of the option buttons has been selected.
Example
Private Sub Check86_Click()
' Update option buttons based on value of checkbox.
Option107.Value = Me.Check86.Value ' Sync check box and option.
Option110.Value = Not Option107.Value ' Ensures only one option button is selected at a time.
End Sub
This event is fired each time the check box is checked/unchecked. It checks/unchecks Option107 to match. It then sets Option110 to the reverse setting. I'm assuming you only want one option button checked at a time.
I've used the not operator to ensure Option110 and Check86 hold different values. When Check86 is true Option110 is not true, ie false.

VB.Net I want to disable all textboxes as default in form

I am learning to use vb.net to show legacy data I loaded into an Access database. I need to display the data in the textboxes on my form but, under normal circumstances, I don't want the user to be able to modify or even enter the textbox fields by tabbing or a mouse click. In some circumstances I want to turn on those textbox fields so authorized users can update the information. I have been searching for an answer and trying lots of properties both in design and at run time. Any thoughts on how I can do this? I suppose I can make two identical forms, one with labels and one with textboxes and switch as necessary. Any thoughts on the best way to do this?
Here I assume that every Textbox in your form can be edited. Add this to the event in which you check for user authorization.
If IsUserAuthorized = True Then
For Each myTxtBox As TextBox In Me.Controls.OfType(Of TextBox)()
myTxtBox.ReadOnly = False 'or myTxtBox.Enabled = True
Next
Else
For Each myTxtBox As TextBox In Me.Controls.OfType(Of TextBox)()
myTxtBox.ReadOnly = True 'or myTxtBox.Enabled = False
Next
End If