Unable to write to mdiChild forms

EDN Admin

Well-known member
Joined
Aug 7, 2010
Messages
12,794
Location
In the Machine
I have a main form with a number (in this case 9) mdichild forms. Some are visible, some not, but they are all very basic. When I write to a textbox in any child form during Main_Load it updates, when I write to a textbox in any child form inside its
own _Load it updates. If I write to one from awhere else in code, including a sub in the forms own code, it fails to update.
All the child forms are identical but are distinctly separate forms created before compilation rather then NEW versions of a single form to avoid threading problems.
Curiously this code worked once only. No edits were made and when re-ran failed after stopping it if found all the controls in some of the forms were invisibe in developer mode, restarted VS but still not there. Run app and at runtime
there they were!!! Also all locked textboxes still accepting input.
PS. If I dont have the forms unlocked instead of child: exactly the same.
PPS. No compile error or warings.
I think I am missing something here ?-). Any ideas? PLEASE.
MAIN FORM CODE CAPTURED EXACTLY AS IS AT PRESENT (i.e. WITH EVERYTHING ELSE REMOVED TO SOLVE THIS BUG - THE MOST RECENT TEST VERSION)
Imports System.Timers
Public Class Main
Public WithEvents RefreshTimer As New Timers.Timer<br/>
<br/>
Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load<br/>
ScaleWin(1) = ScaleDisplay1 SCALEWIN IS DECLARED IN A SEPARTE MODULE - SEE BELOW<br/>
ScaleWin(2) = ScaleDisplay2 SCALE DISPLAYx ARE SEPARATELY COMPILED FORMS<br/>
ScaleWin(3) = ScaleDisplay3<br/>
ScaleWin(4) = ScaleDisplay4<br/>
ScaleWin(5) = ScaleDisplay5<br/>
ScaleWin(6) = ScaleDisplay6<br/>
ScaleWin(7) = ScaleDisplay7<br/>
ScaleWin(8) = ScaleDisplay8<br/>
ScaleWin(9) = ScaleDisplay9<br/>
For a = 1 To MaxScale<br/>
Scales(a).Enabled = True THIS IS DECLARED IN A SEPARATE MODULE - SEE BELOW<br/>
ActiveWin = a<br/>
ScaleWin(a).MdiParent = Me<br/>
If Scales(a).Enabled Then ScaleWin(a).Show() ALL FORMS ARE SHOWN OK<br/>
Next a<br/>
ScaleDisplay2.TextGross.Text = "HELLO1" THIS UPDATES TEXTBOX AS EXPECTED<br/>
Application.DoEvents()<br/>
ScaleDisplay3.TextGross.Text = "HELLO2" THIS UPDATES TEXTBOX AS EXPECTED<br/>
RefreshThread = New Thread(AddressOf RefreshScales) LEFT OVER FROM TRYING THREADING - DIDNT WORK EITHER!<br/>
RefreshThread.Start()<br/>
RefreshTimer.Interval = 200<br/>
RefreshTimer.Enabled = True<br/>
End Sub
Public Sub RefreshScales()<br/>
ScaleDisplay1.ScaleRefresh()<br/>
Application.DoEvents()<br/>
ScaleDisplay2.ScaleRefresh()<br/>
Application.DoEvents()<br/>
ScaleDisplay3.ScaleRefresh()<br/>
a = a DUMMY LINE FOR BREAKPOINT
<br/>
ScaleDisplay3.TextGross.Text = "TEST3" THIS LINE IS PROCESSED EVERY 200ms(and a bit ish) BUT TEXTBOX REMAINS THE SAME<br/>
a = a DUMMY LINE FOR BREAKPOINT
<br/>
Application.DoEvents()<br/>
ScaleDisplay4.ScaleRefresh()<br/>
Application.DoEvents()<br/>
ScaleDisplay5.ScaleRefresh()<br/>
Application.DoEvents()<br/>
ScaleDisplay6.ScaleRefresh()<br/>
Application.DoEvents()<br/>
ScaleDisplay7.ScaleRefresh()<br/>
Application.DoEvents()<br/>
ScaleDisplay8.ScaleRefresh()<br/>
Application.DoEvents()<br/>
ScaleDisplay9.ScaleRefresh()<br/>
End Sub
Public Sub RefreshTimerElapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles RefreshTimer.Elapsed<br/>
RefreshTimer.Enabled = False<br/>
RefreshScales()<br/>
RefreshTimer.Interval = 200<br/>
RefreshTimer.Enabled = True<br/>
End Sub
<br/>
End Class
____________________________________<br/>
OTHER RELEVANT DECALRATIONS ARE HERE
<br/>
Imports System.IO<br/>
Imports System.Timers<br/>
Imports System.Net
Module ScaleSet1
Public ActiveWin As Integer<br/>
Public ScaleWin(0 To 9) As Form<br/>
Public Const MaxScale As Integer = 9
Public Structure Scalectrl<br/>
User settings<br/>
Public Enabled As Boolean<br/>
Public Protocol As String<br/>
Public Name As String<br/>
Public IndicatorID As Byte<br/>
etc.......
Public Scales(0 To 10) As Scalectrl
etc.......
<br/>
______________________________________<br/>
Public Class ScaleDisplay3 CODE FOR OTHERS IS SAME
Private ID As Integer
Private Sub ScaleWindow_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br/>
ID = ActiveWin<br/>
Me.Text = Scales(ID).Name<br/>
TextDisplay.TextAlign = HorizontalAlignment.Right<br/>
TextGross.TextAlign = HorizontalAlignment.Right<br/>
TextNet.TextAlign = HorizontalAlignment.Right<br/>
TextTare.TextAlign = HorizontalAlignment.Right<br/>
WindowID.Text = ID EVERYTHING IN THIS SUB WORKS OK ME.ID = 3, WindowID = "3"<br/>
End Sub
Public Sub ScaleRefresh()
If Not Scales(me.ID).Enabled Then Exit Sub HERE ME.ID = 0 WHY<br/>
Me.TextGross.Text = Scales(Me.ID).GrossWeight.ToString & " kg" TAKE PREVIOUS LINE OUT AND REPLACE ME.ID WITH 3 AND TEXTBOX STILL WILL NOT UPDATE<br/>
etc.....


View the full article
 
Back
Top