Hi,
ich habe hier ein Problem, dass ein wenig kniffelig ist. Ich hoffe, ihr seid wie immer geduldig !
Ich starte eine Form, nennen wir sie frmTllDisplay ... und von dieser Form aus möchte ich eine andere Form (nennen wir sie frmTllRaw) ansprechen. Dies geschieht mit der Prozedur "LocateStanza".
frmTllDisplay ---> LocateStanza --> frmTllRaw
frmTllRaw enthält eine DatagridView, nennen wir sie dgvTllRaw ... in dieser Form möchte ich eine bestimmte Zeile auswählen über den Parameter "Lno" (line number).
frmTllRaw --> dgvTllRaw.rows(Lno).Select = True
Das alles ist natürlich KEIN Problem. Aber ... es gibt eine wichtige Anforderung:
Die frmTllRaw muss nicht gestartet sein. Wenn dies nicht der Fall ist, dann soll sie beim ersten Aufruf der Prozedur "LocateStanza" gestarted werden.
frmTllDisplay ---> LocateStanza --> autostart "frmTllRawfrmTllRaw" --> dgvTllRaw.rows(Lno).Select = True
So habe ich die Prozedur "LocateStanza" programmiert:
Die StartProzedur der frmTllRaw lädt die DatagridView dgvTllRaw über eine BindingSource.
Das klappt auch alles ganz wunderbar .. aber nur, wenn die Form frmTllRaw VOR dem Aufruf der Prozedur "LocateStanza" geladen wurde.
Wenn die frmTllRaw aber über "Autoload frmTllRaw" gestarted wurde, dann kracht es ! Die dgvTllRaw ist noch nicht geladen ... wie der Debug.Print zeigt, ist die DGV noch leer ... und damit gibt es eine Exception beim ... .Select = True
Offensichtlich läuft "LocateStanze" nach dem FormTllRaw.Show weiter, obwohl die DGV dgvTllRaw noch nicht aufgebaut ist.
Ich habe versucht nach dem FormTllRaw.Show zu warten (Thread.Sleep(1000)) ... aber auch das hat leider nicht geholfen.
Ich bin mir sicher, dass die Experten wissen, was ich hier falsch mache und vor allem wie ich das beheben kann ...
LG
Peter
ich habe hier ein Problem, dass ein wenig kniffelig ist. Ich hoffe, ihr seid wie immer geduldig !
Ich starte eine Form, nennen wir sie frmTllDisplay ... und von dieser Form aus möchte ich eine andere Form (nennen wir sie frmTllRaw) ansprechen. Dies geschieht mit der Prozedur "LocateStanza".
frmTllDisplay ---> LocateStanza --> frmTllRaw
frmTllRaw enthält eine DatagridView, nennen wir sie dgvTllRaw ... in dieser Form möchte ich eine bestimmte Zeile auswählen über den Parameter "Lno" (line number).
frmTllRaw --> dgvTllRaw.rows(Lno).Select = True
Das alles ist natürlich KEIN Problem. Aber ... es gibt eine wichtige Anforderung:
Die frmTllRaw muss nicht gestartet sein. Wenn dies nicht der Fall ist, dann soll sie beim ersten Aufruf der Prozedur "LocateStanza" gestarted werden.
frmTllDisplay ---> LocateStanza --> autostart "frmTllRawfrmTllRaw" --> dgvTllRaw.rows(Lno).Select = True
So habe ich die Prozedur "LocateStanza" programmiert:
VB.NET-Quellcode
- If FormTllRaw Is Nothing OrElse FormTllRaw.IsDisposed Then
- 'Autoload frmTllRaw
- FormTllRaw = New frmTllRaw
- FormTllRaw.Show()
- End If
- 'Locate stanza
- FormTllRaw.dgvTllRaw.ClearSelection()
- Debug.Print("Count=" & FormTllRaw.dgvTllRaw.Rows.Count.ToString("n0"))
- FormTllRaw.dgvTllRaw.Rows(myLno).Selected = True '<-- hier kracht es!
- FormTllRaw.dgvTllRaw.FirstDisplayedScrollingRowIndex = myLno
- If FormTllRaw.WindowState = FormWindowState.Minimized Then _
- FormTllRaw.WindowState = FormWindowState.Normal
- FormTllRaw.BringToFront()
Die StartProzedur der frmTllRaw lädt die DatagridView dgvTllRaw über eine BindingSource.
VB.NET-Quellcode
- Private Sub frmTllRaw_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- lblMessage.Text = ""
- If blnDebug Then MenuStrip1.BackColor = DebugColor
- Me.Text = "TLL Raw - " & Path.GetFileName(EDITOBJECT)
- Dim mySize = New Size(CInt(maxWidth / 2), maxHeight)
- Dim myLocation = New Point(0, 0)
- Me.Location = myLocation
- Me.Size = mySize
- End Sub
- Private Sub frmTllRaw_Shown(sender As Object, e As EventArgs) Handles Me.Shown
- 'Display form ---------------------------------------------------------1
- BuildBindingSource(EditData)
- DisplaySearch()
- DisplayLocate()
- End Sub
Das klappt auch alles ganz wunderbar .. aber nur, wenn die Form frmTllRaw VOR dem Aufruf der Prozedur "LocateStanza" geladen wurde.
Wenn die frmTllRaw aber über "Autoload frmTllRaw" gestarted wurde, dann kracht es ! Die dgvTllRaw ist noch nicht geladen ... wie der Debug.Print zeigt, ist die DGV noch leer ... und damit gibt es eine Exception beim ... .Select = True
Offensichtlich läuft "LocateStanze" nach dem FormTllRaw.Show weiter, obwohl die DGV dgvTllRaw noch nicht aufgebaut ist.
Ich habe versucht nach dem FormTllRaw.Show zu warten (Thread.Sleep(1000)) ... aber auch das hat leider nicht geholfen.
Ich bin mir sicher, dass die Experten wissen, was ich hier falsch mache und vor allem wie ich das beheben kann ...
LG
Peter
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()