MS Word. Changing the text color depending on checked/unchecked checkbox - checkbox

I'm using MS Word 2016.
Is it possible to implement changing the text color from black to red depending on checked/unchecked checkbox?

The following macro assumes you're using a Checkbox Content Control titled 'Checkbox1' and, for the text to be re-formatted, a Rich Text Content Control titled 'ColorText':
Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean)
Dim Clr As Long
With CCtrl
Select Case .Title
Case "Checkbox1"
Select Case .Checked
Case True: Clr = wdRed
Case Else: Clr = wdAuto
End Select
ActiveDocument.SelectContentControlsByTitle("ColorText")(1).Range.Font.ColorIndex = Clr
End Select
End With
End Sub
The code goes in the 'ThisDocument' code module of the document or its template.

Related

VB.NET Change visibility of multiple labels on runtime

im trying to get to change the visibility of different labels during runtime after a button click
Dim labelsEmpty As New ArrayList
Dim allTxt As New List(Of Control)
For Each txt As TextBox In FindControlRecursive(allTxt, Me, GetType(TextBox))
If txt.Text = "" Then
If txt.Name = "TextBox1" Then
Else
'Dim textBoxName = txt.Name.ToString.Remove("txt").ToLower
labelsEmpty.Add(txt.Name.ToString.Replace("txt", "lblMsg"))
End If
End If
Next
For Each label In labelsEmpty
Dim Label1 As New Label
Label1.Name = label
Label1.Text = "Insert a value"
Label1.Visible = True
Next
This is what i have, each textbox in my form has a label used to tell the user that there was some kind of error, in this case i need to get which textbox is left empty and set the visibility of its label to true (already hidden from form start), so what i do is i go through every textbox in my form to see which one the user left empty and then take their name (ex: txtAge) and replace txt with "lblMsg" and then insert them into an array.
Doing so i get an array with all the label names that should be set to visible = true
Now i need to set their visibility and text value, so what i did is i created a for each loop and getting every label in the array, but the code i used is not working, i already checked if there are items in the array and they are there, any help? Thanks.
My Form: https://i.stack.imgur.com/qrawz.png
In your final loop, you are creating new labels and never adding them to your form. If you already have existing labels on your form, you want to reference those:
For Each label In labelsEmpty
With Controls(label)
.Text = "Insert a value"
.Visible = True
End With
Next
Setting the Text property may be unnecessary if your labels already have the necessary text.
If you want to create new labels and then add them to your form, you need to add the control to the form after you have created it:
For Each label In labelsEmpty
Dim Label1 As New Label
With Label1
.Name = label
.Text = "Insert a value"
'.Top = 100
'.Left = 100
.Visible = True
End With
Controls.Add(Label1)
Next
If you do it this way, you will need some way to set the Top and Left properties so that the labels align correctly with your existing text boxes. There are several ways to do that but I'll leave that to you as I'm fairly sure that my first solution answers your question.

WPF application page doesn't update when I update the content of the labels

I'm writing a VB.Net WPF application which uses a frame on the MainWindow to show a page that contains multiple labels. I dynamically update those labels in my logic from the page but once those labels are updated, this doesn't reflect in the frame which shows the page.
This is the sub that updates the labels in Page2.xaml.vb:
Public Sub UpdateLabels(Name As String, microphonefinal As List(Of String))
Dim labelList As New List(Of Label)
For i As Integer = 0 To microphonefinal.Count - 1
For Each Label As Label In Page1Grid.Children
If Label.Name.Contains(Name) Then
Label.Content = microphonefinal(i)
Exit For
End If
Next
Next
End Sub
I call the above sub from MainWindow.xaml.vb using the following:
Dim form = New Page2
If microphonefinal.Count > 0 Then
form.UpdateLabels("Microphones", microphonefinal)
End If
I'm not sure if the issue is because I'm creating a new instance of Page2. But if I don't include this then I get the error: "Reference to a non-shared member requires an object reference".
I tried using frame.Refresh() to see if this would update the page with the new values in the labels but it doesn't. I've also used MsgBox to display the contents of the labels to make sure they've changed.
Am I doing something wrong? Or is there anything I'm missing? Please let me know if there's anymore information you need to help. Thank you!
I managed to access the sub UpdateLabels() of class Page2 by using the frame as you said. So to call the sub I coded it like this:
frame.Content.UpdateLabels("Microphones", microphonefinal)

How to Populate Label with String Array on ComboBox Item Selection in VB.Net

I have an application in VB.Net where I'm trying to fill a label with some string data that I have in an array. I have a ComboBox which holds some states as the index collection/values. When I select a particular value in the combobox, I want to pull string data from the assigned array, and populate the label with it as a "clickable link a browser window. I'm lost on this, yet here is what I have in my code stub:
Private Sub cboSelectState_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSelectState.SelectedIndexChanged
'Create a string array
Dim AlabamaCities() As String = {"http://www.rolltide.com/", "http://www.crimsontidehoops.com/", "http://centralalabamapride.org/"}
Dim strAlabama As String
'Populate label with the array data, on a particular value selection in combo box.
If cboSelectState.SelectedValue("Georgia") Then
strAlabama = CStr(AlabamaCities(3))
lblLinkOutput.Text = strAlabama
End If
End Sub
So when I pick Alabama in my combo box, I want the label to show:
http://www.rolltide.com
http://www.crimsontidehoops.com
http://centralalabamapride.org
The links will be clickable from the label and populate in the same tab whenever clicked. I haven't tried the clickable link part yet, and I will try once I get this down.
I know it's probably bad starting form out the gate. But I'm trying to get the form down to gain the knowledge and plan out a bigger project, and accomplish something better when I think of it. I appreciate your knowledge and assistance.
Firstly, it would make sense to use a Dictionary to store the data. The state names will be the keys and the values would be the arrays of URLs. You would then display the keys in the ComboBox and, when a selection is made, use the selected key to get the corresponding value from the Dictionary.
At that point, you won't be using a Label if you want clickable links. You should use a TableLayoutPanel as a container and then add one LinkLabel to the table for each URL in the array. You can then use a single handler for all the LinkClicked events.

Enter text from text box into combo box vb.net

I have two form, A and B.
On FORM A user will select a country code from combobox and it will then be saved to DB.
On FORM B a textbox shows the country code that was saved to the database earlier.
I want to change the country code in FORM B when edit is selected.
How to change:
1. the textbox will first be hidden
2. a combobox with all the country codes will be shown with selected value equals to the hidden textbox value.
I have tried putting the info into the combobox like the textboxes straight from the database when it is blank, e.g:
cbCountryCode.Text = CStr(dataTable.Rows(0).Item(2))
but this does not work. I also need to keep the country codes in the combobox as the user will need to change the country code if it's wrong. Is there a way of doing this? I have a work around where I don't let the user update the info if the combobox is blank, but I want the country code to be already there so that the user does not have to select a country code again if it is not wrong. Any help with this problem would be greatly appreciated.
EDIT:
datatable.Rows(0).Item(2)
holds a country code, for example, Ireland (+353), United Kingdom (+44) or U.S.A. (1).
This is the code I have for calling the information from the database:
sqlVisitorDetails = "SELECT * FROM visitorDetails WHERE idNumber=#idNumber"
sqlCon.Open()
sqlCmd = New SqlCommand(sqlVisitorDetails, sqlCon)
sqlCmd.Parameters.AddWithValue("#idNumber", txtIdNumber.Text)
dtVisitorDetails = loadDtVisitorDetails()
txtFirstName.Text = CStr(dtVisitorDetails.Rows(0).Item(1))
txtLastName.Text = CStr(dtVisitorDetails.Rows(0).Item(2))
txtContactNumber.Text = CStr(dtVisitorDetails.Rows(0).Item(3))
txtCountryCode.Text = CStr(dtVisitorDetails.Rows(0).Item(4))
txtAddress.Text = CStr(dtVisitorDetails.Rows(0).Item(5))
The country code (e.g. 'Ireland (+353)') is stored in dtVisitorDetails.Rows(0).Item(4) and this is put into the text box txtCountryCode.
When edit is clicked on the form, the text box txtCountryCode is hidden and the combobox cbCountryCode is visible (before edit is clicked txtCountryCode is shown and cbCountryCode is hidden). I then want the country code (in this case 'Ireland (+353)') to be shown in the cbCountryCode combo box. At the moment when the combobox is shown it is blank and the user has to choose a country code again, even if it's right. I hope this makes things clearer.
From the best i can understand from your question.
cbCountryCode.Text = CStr(dataTable.Rows(0).Item(2))
will not work if the DropDownStyle in the properties is set to DropDownList, change it to DropDown instead(if its not).
And to this:
I also need to keep the country codes in the combobox as the user will need to change the country code if it's wrong.
you have to bind the data to the ComboBox to make it work.
EDIT:
If possible, use ColumnName instead of Index for getting a data from datatable. Since you're selecting all record from your database, your may not know when then index would change(when a column is added or deleted from DB)
cbCountryCode.Text = CStr(dataTable.Rows(0).Item("CountryCodeColumn"))
How about that?
cbCountryCode.ClearSelection()
cbCountryCode.SelectedIndex = cbCountryCode.Items.IndexOf(cbCountryCode.Items.FindByText(datatable.Rows(0).Item(2).ToString))
Try this;
cbCountryCode.SelectedItem = CStr(dataTable.Rows(0).Item(2))
The .Text property is the currently selected text in the combo, not the currently selected item.
EDIT: (version 3!)
This definitely works! Create a new project, with a new WinForms project and Form1, etc. Add a button (btnTest) and a combobox (cboTest) and paste this code in;
Private Sub Form1_Load() Handles MyBase.Load
' Add some items
cboTest.Items.Add("U.S.A (+1)")
cboTest.Items.Add("Ireland (+353)")
cboTest.Items.Add("U.K. (+44)")
' Select the first item
cboTest.SelectedIndex = 0
End Sub
Private Sub btnTest_Click() Handles btnTest.Click
' Select the UK entry
cboTest.SelectedIndex = cboTest.FindString("U.K.")
End Sub
And I hate to have to say it, but it works like a charm! I've tested it with the combobox set to DropDown AND to DropDownList and the result is the same. Please check you have the right data going into and out of your routines from the dataTable/Row/Item you are using!!
Try simple:
comboBox.Items.Add("Item 1");

MS ACCESS 2007 restrict editing to form fields until combobox selection is made

How do i restrict the editing of form fields until a combobox selection is made? I am using MS Access 2007.
Thanks for your help.
On the form, you can start off with all the fields being locked (cannot edit) and disabled (cannot click on them) (you can find those in the property sheet of the form). Then on the On Change event of the combo box, in VBA, cycle through all the fields and enable them again.
This answer provides code for how to loop through controls on a form. In this example, you would set ctl.Enabled = True and ctl.Locked = False (where ctl is the control you are referencing)
A note, to make sure that the combo box is always changed, I usually put "Choose One..." as the first item of the list. And check it on form submission to make sure it's not still selected. That way, it forces the On Change event to fire where it wouldn't if someone used the first option of the list.
Hope that was at least enough to get you started...
EDIT: Additional info
In the table design, I put default value of "Choose 1" on the Combo Box and made it the first option. So when the form comes up, that's what you see.
You can set the Locked property of your memo and date fields to Yes (found in the property sheet under data or you can use the .Locked = True in VBA.
Then, in the on change event of the combo box, click the ... and use the code builder and put something like this:
Dim ctl As Control
If Me.Combo77.Value <> "Choose 1" Then
'Loop through all controls on form
For Each ctl In Me.Controls
'Only text boxes, not labels, or combo box ect.
If ctl.ControlType = acTextBox Then
'Unlock the field and allow editing
ctl.Locked = False
End If
Next
End If
I tried it out and it works on my little test database.
Here is the MSDN article on the control types: MSDN Control Types
To do it this way, I would recommend what I said above and put the first item of the Combo Box something they're not going to choose.

Resources