Benutzer mit den meisten Antworten
VB6 to VB.NET Upgrade Tool

Frage
-
Hallo,
ich habe gerade gesehen das das Upgrade Tool folgenden Code erzeugt hat:
butOK_MouseClick(ByVal eventSender As Object, ByVal eventSender As EventArgs) Handles butOK.MouseClick
Werden die Argumente in VB.Net normalerweise nicht ByRef and den Handler übergeben?
P.S. ich nehme an in VB6 war es anders?
- Bearbeitet M_a_t_t_h_i_a_s Samstag, 7. Dezember 2019 15:15
Antworten
-
Hi Matthias,
in VB.NET ist das so. Wenn eine Form unsichtbar ist, sind auch alle Innereien unsichtbar. Im Moment, wo die Sichtbarkeit wieder hergestellt wird (Show) wird außerdem auch das Ereignis "VisibleChanged" ausgelöst. Hier mal eine kleine Demo:Public Class Form1 Private WithEvents btn1 As New Button With {.Text = "Show Form", .Dock = DockStyle.Top, .Margin = New Padding(5)} Private WithEvents btn2 As New Button With {.Text = "Switch Visibility", .Dock = DockStyle.Top, .Margin = New Padding(5)} Private lb1 As New ListBox With {.Dock = DockStyle.Fill, .Margin = New Padding(5)} Private Sub Form55_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.AddRange(New Control() {lb1, btn2, btn1}) End Sub Private frm As Form Private WithEvents frmLabel As Label Private col As New List(Of String) Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click If frm Is Nothing Then frm = New Form frmLabel = New Label With {.Text = "frm Label", .Dock = DockStyle.Top} frm.Controls.Add(frmLabel) ShowResult($"before Show: Visibility of frmLabel: {frmLabel.Visible}") lb1.DataSource = col End If frm.Show() ShowResult($"after Show: Visibility of frmLabel: {frmLabel.Visible}") End Sub Private Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click If frm Is Nothing Then Exit Sub frm.Visible = Not frm.Visible ShowResult($"after changing Visible of Form: Visibility of frmLabel: {frmLabel.Visible}") End Sub Private Sub frmLabel_VisibleChanged(sender As Object, e As EventArgs) Handles frmLabel.VisibleChanged ShowResult($"Event VisibleChanged: Visibility= {CType(sender, Label).Visible}") End Sub Private Sub ShowResult(msg As String) col.Insert(0, $"{Now:hh:mm:ss.fff} {msg}") lb1.DataSource = Nothing lb1.DataSource = col End Sub End Class
Unklar ist, warum Dich dieses Verhalten stört.--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort markiert M_a_t_t_h_i_a_s Donnerstag, 19. Dezember 2019 08:32
-
Hi,
doch, das funktioniert problemlos. Die Erklärung steckt in den beiden Links, die ich dir gepostet hatte. Bitte mal lesen, dann sollte klar sein, warum das geht.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort markiert M_a_t_t_h_i_a_s Dienstag, 17. Dezember 2019 11:57
-
nur dehalb weil ich meinen Code umschreiben muss :-)
Wieso?
Letztendlich werden die Controls zwar automatisch ebenfalls auf Visible = False gesetzt (was ich persönlich zwar auch für unnötig und schlechten Stil halte) aber nur die, die vorher auch Visible = True hatten, werden bei Show bzw. <Form>.Visible = True auch wieder zurückgesetzt.
Control1.Visible = False Control2.Visible = True Form.Visible = False => Control1.Visible = False => Control2.Visible = False Form.Visible = True => Control1.Visible = False => Control2.Visible = True
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort markiert M_a_t_t_h_i_a_s Donnerstag, 2. Januar 2020 10:29
-
Hi Matthias,
Du solltest sowieso ein Umschreiben des Codes in Betracht ziehen. Ich vermute mal, dass Du die Visible-Eigenschaft für die Programmsteuerung genutzt hast. Einen anderen Grund kann ich mir nicht vorstellen. Das wäre ein ganz schlechter Stil, der sowieso ausgemerzt werden sollte. Ansonsten reicht das Ereignis Control.VisibleChanged zur ggf. erforderlichen Aktualisierung von anzuzeigenden Daten. Und das wird auch beim Setzen des äußeren Comtainer auf Visible=True ausgelöst.--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort markiert M_a_t_t_h_i_a_s Donnerstag, 2. Januar 2020 10:28
Alle Antworten
-
Hallo Matthias,
Werden die Argumente in VB.Net normalerweise nicht ByRef and den Handler übergeben?
Nöp.
Bzgl. ByRef und ByVal evtl. auch das hier lesen:
Übergeben von Argumenten als Wert und als Verweis (Visual Basic)
Unterschiede zwischen dem Übergeben von Argumenten als Wert und als Verweis (Visual Basic)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 11. Dezember 2019 06:10
-
Hi,
doch, das funktioniert problemlos. Die Erklärung steckt in den beiden Links, die ich dir gepostet hatte. Bitte mal lesen, dann sollte klar sein, warum das geht.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort markiert M_a_t_t_h_i_a_s Dienstag, 17. Dezember 2019 11:57
-
Hallo,
ich habe gerade festgestellt das in VB.NET ein LABEL auf einem Windows FORM seine Eigenschaft VISIBLE von TRUE "automatisch" auf FALSE ändert wenn ich FORM.VISIBLE auf FALSE setze.
"Stimmt" das so?
In VB6 war das nicht so.
Kann ich das Verhalten so konfigurieren das es wieder dem in VB6 entspricht?
-
Hi Matthias,
in VB.NET ist das so. Wenn eine Form unsichtbar ist, sind auch alle Innereien unsichtbar. Im Moment, wo die Sichtbarkeit wieder hergestellt wird (Show) wird außerdem auch das Ereignis "VisibleChanged" ausgelöst. Hier mal eine kleine Demo:Public Class Form1 Private WithEvents btn1 As New Button With {.Text = "Show Form", .Dock = DockStyle.Top, .Margin = New Padding(5)} Private WithEvents btn2 As New Button With {.Text = "Switch Visibility", .Dock = DockStyle.Top, .Margin = New Padding(5)} Private lb1 As New ListBox With {.Dock = DockStyle.Fill, .Margin = New Padding(5)} Private Sub Form55_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.AddRange(New Control() {lb1, btn2, btn1}) End Sub Private frm As Form Private WithEvents frmLabel As Label Private col As New List(Of String) Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click If frm Is Nothing Then frm = New Form frmLabel = New Label With {.Text = "frm Label", .Dock = DockStyle.Top} frm.Controls.Add(frmLabel) ShowResult($"before Show: Visibility of frmLabel: {frmLabel.Visible}") lb1.DataSource = col End If frm.Show() ShowResult($"after Show: Visibility of frmLabel: {frmLabel.Visible}") End Sub Private Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click If frm Is Nothing Then Exit Sub frm.Visible = Not frm.Visible ShowResult($"after changing Visible of Form: Visibility of frmLabel: {frmLabel.Visible}") End Sub Private Sub frmLabel_VisibleChanged(sender As Object, e As EventArgs) Handles frmLabel.VisibleChanged ShowResult($"Event VisibleChanged: Visibility= {CType(sender, Label).Visible}") End Sub Private Sub ShowResult(msg As String) col.Insert(0, $"{Now:hh:mm:ss.fff} {msg}") lb1.DataSource = Nothing lb1.DataSource = col End Sub End Class
Unklar ist, warum Dich dieses Verhalten stört.--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort markiert M_a_t_t_h_i_a_s Donnerstag, 19. Dezember 2019 08:32
-
nur dehalb weil ich meinen Code umschreiben muss :-)
Wieso?
Letztendlich werden die Controls zwar automatisch ebenfalls auf Visible = False gesetzt (was ich persönlich zwar auch für unnötig und schlechten Stil halte) aber nur die, die vorher auch Visible = True hatten, werden bei Show bzw. <Form>.Visible = True auch wieder zurückgesetzt.
Control1.Visible = False Control2.Visible = True Form.Visible = False => Control1.Visible = False => Control2.Visible = False Form.Visible = True => Control1.Visible = False => Control2.Visible = True
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort markiert M_a_t_t_h_i_a_s Donnerstag, 2. Januar 2020 10:29
-
Hi Matthias,
Du solltest sowieso ein Umschreiben des Codes in Betracht ziehen. Ich vermute mal, dass Du die Visible-Eigenschaft für die Programmsteuerung genutzt hast. Einen anderen Grund kann ich mir nicht vorstellen. Das wäre ein ganz schlechter Stil, der sowieso ausgemerzt werden sollte. Ansonsten reicht das Ereignis Control.VisibleChanged zur ggf. erforderlichen Aktualisierung von anzuzeigenden Daten. Und das wird auch beim Setzen des äußeren Comtainer auf Visible=True ausgelöst.--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort markiert M_a_t_t_h_i_a_s Donnerstag, 2. Januar 2020 10:28