Benutzer mit den meisten Antworten
Werte aus einer Form in einer Checkbox(aus Liste) in eine andere Klasse/ Funktion übergeben

Frage
-
Hallo ihr,
ich bin Neu hier uns habe einfach mal eine Frage und würde mich freuen wenn ihr mir weiter helfen könnt.
Und zwar habe ich in einer Form eine Sub in der beim selectieren aus einer Liste der Faktor abgefragt wird.(die Werte ziehe ich über eine SQL Abfrage ab / discounts)
Diesen kann ich dort auch abgreifen.(MsgBox(faktor)) Nur würde ich diesen gerne denn selektierten Wert(hier davon der Faktor) in einer anderen Function (Klasse/ Sub)
abrufen.
---Form mit Checkbox----
Public Sub Cbx_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cbx.SelectedIndexChanged
Dim faktor As Double = discounts(Cbx_.SelectedIndex - 1).Faktor
MsgBox(faktor)
End Sub
---Andere Klasse---Die Form mit Checkbox ist geschlossen---
Private Sub WertausCbx()
--hier würde ich gern denn selektierten wert abrufen wollen
End Sub
Könnt ihr mir hierbei vielleicht helfen?
Liebe Grüße
Antworten
-
Hi,
wie Stefan geschrieben hat, benötigst Du einen Puffer für die Werte, auf die beide Forms zugreifen und damit Werte austauschen können. Eine Möglichkeit für die Realisierung solch eines gemeinsam genutzten Puffers kann ein Singleton-Objekt sein. Das kann entweder eine statische Klasse sein, die in VB als Modul realisiert wird, oder eine Klasse, die einen statischen Verweis auf immer die gleiche Instanz liefert. Nachfolgend ein Beispiel dazu:Imports System.ComponentModel Imports System.Runtime.CompilerServices Public Class Form29 Private cb As New CheckBox With {.Text = "CheckBox"} Private Sub Form29_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.Add(cb) cb.DataBindings.Add("Checked", Form29B.Instance, "Wert") Call (New Form29A).Show() End Sub End Class Public Class Form29A Inherits Form Private cb As New CheckBox With {.Text = "CheckBox"} Private Sub Form_load() Handles Me.Load Me.Controls.Add(cb) cb.DataBindings.Add("Checked", Form29B.Instance, "Wert", False, DataSourceUpdateMode.OnPropertyChanged) End Sub End Class Public Class Form29B Implements INotifyPropertyChanged Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Private Shared _instance As Form29B Public Shared Function Instance() As Form29B If _instance Is Nothing Then _instance = New Form29B Return _instance End Function Private _wert As Boolean Public Property Wert As Boolean Get Return _wert End Get Set(value As Boolean) _wert = value OnpropertyChanged() End Set End Property Friend Sub OnpropertyChanged(<CallerMemberName> Optional propName As String = "") RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(NameOf(Wert))) End Sub End Class
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Bearbeitet Peter Fleischer Donnerstag, 4. Januar 2018 15:49
- Als Antwort vorgeschlagen Peter Fleischer Donnerstag, 4. Januar 2018 15:52
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 16. Januar 2018 12:07
Alle Antworten
-
Hi,
Du wirst den Wert irgendwo zwischenspeichern müssen. Am ehesten kommt mir da die Instanz einer Klasse in den Sinn, auf die beide Elemente (Formular und deine andere Klasse) Zugriff haben.
Denn wenn die Form nicht mehr vorhanden ist, kannst Du logischerweise auch nicht mehr auf die selektierten Werte irgendwelcher Controls dieses Formulars zugreifen.
Wie genau Du das machen musst, hängt aber davon ab, wie deine Anwendung aufgebaut ist, um welchen Anwendungstyp es sich handelt (ich nehme an WinForms?) und wann Du wo und wie auf die Werte zugreifen willst.
Public Class Settings Public Property Faktor As Double End Class --- Public Sub Cbx_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cbx.SelectedIndexChanged Dim faktor As Double = discounts(Cbx_.SelectedIndex - 1).Faktor <InstanzVonSettings>.Faktor = faktor End Sub --- Private Sub WertausCbx() Dim faktor As Double faktor = <GleicheInstanzVonSettingsWieImFormular>.Faktor End Sub
Hier mal rein schematisch dargestellt, wie Du das machen könntest.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi,
wie Stefan geschrieben hat, benötigst Du einen Puffer für die Werte, auf die beide Forms zugreifen und damit Werte austauschen können. Eine Möglichkeit für die Realisierung solch eines gemeinsam genutzten Puffers kann ein Singleton-Objekt sein. Das kann entweder eine statische Klasse sein, die in VB als Modul realisiert wird, oder eine Klasse, die einen statischen Verweis auf immer die gleiche Instanz liefert. Nachfolgend ein Beispiel dazu:Imports System.ComponentModel Imports System.Runtime.CompilerServices Public Class Form29 Private cb As New CheckBox With {.Text = "CheckBox"} Private Sub Form29_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.Add(cb) cb.DataBindings.Add("Checked", Form29B.Instance, "Wert") Call (New Form29A).Show() End Sub End Class Public Class Form29A Inherits Form Private cb As New CheckBox With {.Text = "CheckBox"} Private Sub Form_load() Handles Me.Load Me.Controls.Add(cb) cb.DataBindings.Add("Checked", Form29B.Instance, "Wert", False, DataSourceUpdateMode.OnPropertyChanged) End Sub End Class Public Class Form29B Implements INotifyPropertyChanged Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Private Shared _instance As Form29B Public Shared Function Instance() As Form29B If _instance Is Nothing Then _instance = New Form29B Return _instance End Function Private _wert As Boolean Public Property Wert As Boolean Get Return _wert End Get Set(value As Boolean) _wert = value OnpropertyChanged() End Set End Property Friend Sub OnpropertyChanged(<CallerMemberName> Optional propName As String = "") RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(NameOf(Wert))) End Sub End Class
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Bearbeitet Peter Fleischer Donnerstag, 4. Januar 2018 15:49
- Als Antwort vorgeschlagen Peter Fleischer Donnerstag, 4. Januar 2018 15:52
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 16. Januar 2018 12:07