Will von form3 das ergebnis nach form 2 senden

  • VB.NET

Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von frifri.

    @Dksksm: Eh … what? Klar funktioniert das. Das Teil nennt sich AutoProperty. Diese Kurzschreibweise reicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Dksksm:* getestet mit .NET-Framework 2.0, VS 2019 und VS 2022. Wohl eher eine Frage der Visual Studio-Version.

    explizite Anrede, weil ich noch eine Antwort des TE erwarte …
    Bilder
    • AutoProperty.png

      13,04 kB, 622×218, 52 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo VaporiZed, Dein programmiercode verursacht ein fehler wegen Using und End Using. Nach End Using kommt dann End Sub oder soll ich das weglassen ?

    VB.NET-Quellcode

    1. Using OBJ As New Form3
    2. OBJ.StringPass = ListBox1.Text
    3. OBJ.ShowDialog(Me)
    4. 'der folgende Code wird automatisch erst dann ausgeführt, sobald die Form3-Instanz namens OBJ geschlossen wurde
    5. MessageBox.Show(OBJ.ListBox1.Text)
    6. 'oder
    7. MessageBox.Show(OBJ.StringPass)
    8. 'oder wo auch immer beim Schließen von Form3 die gewünschten Daten drinstecken
    9. End Using


    Standardmäßig kann form2 mit form3 mit diesen code kommunizieren:

    VB.NET-Quellcode

    1. Dim OBJ As New Form3
    2. OBJ.StringPass = TextBox1.Text
    3. OBJ.Show()


    Es geht eigentlich drum, das Form3 zurückkommuniziert zu form2 hin mit dem bearbeiteten wert

    VB.NET-Quellcode

    1. Listbox2.Text
    war ja nur eine vorstellung von mir gedacht aber ob (ListBox2.Text) richtig ist das weiss ich nicht.

    Hallo RodFromGermany,

    bezug: Dialoge: Instanziierung von Forms und Aufruf von Dialogen

    verstehe ich leider nicht - nett wäre aber, wenn mir jemand ein programmiercode schreibt denen ich sofort einsetzen kann - wäre einfacher finde ich.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „VBUser77“ ()

    Das Schöne am Using ist ja gerade, dass das Objekt OBJ, welches du aus der Klasse Form3 baust, durch das End Using auch wieder zerstört und freigegeben wird (disposed).
    Innerhalb des Using-Blocks kannst du auf alle Eigenschaften vom OBJ (Instanz der Form-Klasse Form3) zugreifen, also kannst du nach dem du das Formular schliesst noch immer auf die Eigenschaften zugreifen und somit auch OBJ.StringPass noch verwenden, bis eben End Using erreicht wird.
    Du musst die Zuweisung nur halt machen und das sehe ich nicht, dass du es tust.

    Was ich nicht verstehe ist
    MessageBox.Show(OBJ.ListBox1.Text)
    Gibt es denn auf dem Form3 auch eine Listbox1?
    Ich war der Meinung, bei deinem Code, dass es die Listbox1 nur auf Form2 gibt.
    Daran kannst du schon sehen, dass es sehr viel mehr Sinn macht den Steuerelementen vernünftige, sprechende Namen zu geben.
    Hallo Vaporized, ja, richtig auf Form3 gibt es auch eine Listbox1 noch.

    Es geht eigentlich nur darum das form3 mit form2 kommuniziert und dabei soll bei Form3 in Listbox1 der aktualisierte Wert an Form2 zurückgesendet werden.

    Ich habe auch diesen Satz öfters hier in einigen Post mitgeteilt.
    Ich wiederhole mich auch gerne, du weist da nichts zu, mach es doch. Wie eine Zuweisung geht weißt du doch, denn du weist OBJ.StringPass den Value von ListBox1.Text zu. Umgekehrt bekommst du das nicht selbst hin? Deine Erwartungshaltung passt nicht, nicht zu den Forumsregeln und nicht zu deinem eigenen Wissenstand. Arbeite mal an dir selbst als nur an anderen zu mäkeln, sie würden deine Text nicht lesen oder nicht drauf reagieren.
    Hier ist Hilfe zur Selbsthilfe!
    Hallo Dksksm, ich bin leider kein fortgeschrittener User der alles hinkriegt wie du dir das vorstellst. Wie ich auf bestimmte Programmiercode hinkomme hat was zu tun das ich das nachmache was andere gelernt haben und auch zeigen, sei es durch video oder auch durch etwas im Netz googeln. Bin halt kein Experte und mein Nickname bedeutet nur, daß ich gerne nur mit visual basic beschäftige aber nicht viel Erfahrung habe ok?! Gut.

    Apropo News: Ich habe durch ein youtube video herausgefunden wie man die Werte der listbox nach form2 zurücksenden kann indem man diesen code:

    VB.NET-Quellcode

    1. Form2.ListBox2.Items.Add(Me.ListBox1.SelectedItem)
    in Form3 im button einfügt gedacht für das senden der Werte nach form2 listbox2 zu senden. Allerdings für das senden muss man auch in form3 listbox1 den wert markieren - und ein anderes video von youtube wird gezeigt wie man multiple werte in der listbox ohne viele programmierkenntnisse markieren kann und mit dem obigen code an form2 listbox2 zurücksendet. Und ich muss erlich sagen: fantastisch wie man schnell mit visual basic lernen und arbeiten kann. :thumbsup:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VBUser77“ ()

    @VBUser77 ...ich bin leider kein fortgeschrittener User der alles hinkriegt wie du dir das vorstellst​... Bin halt kein Experte...

    Das war ich vor drei Jahren auch nicht und werde es wohl auch nie sein ;( . Doch man kann sich eben auch verbessern indem man Dinge nachliest und lernt.

    Das Du @VaporiZed fragst, ob Du das End Sub weglassen kannst wegen End Using zeigt, das grundlegendes Wissen noch fehlt. Ich meine das in einer positiven Art (ich erinnere mich noch an unseren letzten Austausch).

    Ich knall hier auch noch Code rein, aber der ist leider in C# und das wird Dir bei CopyPaste auch nix bringen. Ich habe nicht genau gelesen was Du jetzt genau machen möchtest. Ich hab den Post jetzt aus eigenem Interesse als Anlass genommen INotifyPropertyChanged nochmal nach zu sehen/lesen.

    class mit event:
    Spoiler anzeigen

    C#-Quellcode

    1. using System.ComponentModel;
    2. using System.Runtime.CompilerServices;
    3. namespace WF_VBUser77
    4. {
    5. public class PassContent : INotifyPropertyChanged
    6. {
    7. //--property
    8. private string _myString = ""; //backingField
    9. public string MyString
    10. { get => _myString; set => SetValue(ref _myString, value); }
    11. //^^property
    12. //--event
    13. public event PropertyChangedEventHandler? PropertyChanged;
    14. protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
    15. {
    16. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    17. }
    18. protected T SetValue<T>(ref T backingFiled, T value, [CallerMemberName] string? propertyName = null)
    19. {
    20. if (EqualityComparer<T>.Default.Equals(backingFiled, value)) return value;
    21. backingFiled = value;
    22. OnPropertyChanged(propertyName);
    23. return value;
    24. }
    25. //^^event
    26. }
    27. }​


    frm1:
    Spoiler anzeigen

    C#-Quellcode

    1. using System.ComponentModel;
    2. namespace WF_VBUser77
    3. {
    4. public partial class Form1 : Form
    5. {
    6. readonly PassContent passContent = new ();
    7. public Form1()
    8. {
    9. InitializeComponent();
    10. CenterToParent();
    11. //subcribe to the event -> event happens somewhere in app -> call HandlePropertyChange methode
    12. passContent.PropertyChanged += HandlePropertyChange;
    13. }
    14. private void HandlePropertyChange(object? sender, PropertyChangedEventArgs e)
    15. {
    16. TxbxFrm1.Text = passContent.MyString;
    17. }
    18. private void BtnFrm1_Click(object sender, EventArgs e)
    19. {
    20. Form2 form2 = new (passContent);
    21. form2.Show();
    22. //open frm2 next to frm1
    23. form2.SetDesktopLocation(this.Location.X + this.Size.Width, this.Location.Y);
    24. }
    25. }
    26. }​


    frm2:

    Spoiler anzeigen

    C#-Quellcode

    1. namespace WF_VBUser77
    2. {
    3. public partial class Form2 : Form
    4. {
    5. private PassContent _passContentFromFrm1 = new();
    6. public Form2(PassContent passContent)
    7. {
    8. InitializeComponent();
    9. _passContentFromFrm1 = passContent;
    10. }
    11. private void BtnFrm2_Click(object sender, EventArgs e)
    12. {
    13. _passContentFromFrm1.MyString = TxbxFrm2.Text;
    14. }
    15. }
    16. }​





    Hier noch das gif. vom Quellcode das zeigt, das eine Form Daten aus einer anderen Form empfangen kann.
    Bilder
    • ezgif.com-gif-maker.gif

      404,18 kB, 600×154, 42 mal angesehen
    codewars.com Rank: 4 kyu

    VBUser77 schrieb:

    Apropo News: Ich habe durch ein youtube video herausgefunden wie man die Werte der listbox nach form2 zurücksenden kann […] Und ich muss erlich sagen: fantastisch wie man schnell mit visual basic lernen und arbeiten kann.


    Herzlichen Glückwunsch. Damit hast Du Dich endgültig (zumindest bei mir) disqualifiziert. Ich ziehe es in Erwägung, diesen und Deine anderen Threads als Warnung für andere User vor Dir zu verlinken.
    Warum:
    • Du verschwendest unsere Zeit, weil Du nicht gewillt bist, die Dir gestellten Fragen zu beantworten. Post#2, #6, #14, #20
    • Du bist nicht in der Lage, eine Fehlermeldung zu nennen, geschweige denn zu zitieren. Post#15, #17, #26
    • Du bist anscheinend noch nicht mal in der Lage herauszufinden, wie Du selber an diese Fehlermeldung kommst, die Dir Visual Studio mitteilen will.
    • Du bist nicht in der Lage, Codevorschläge zu verwenden, selbst wenn sie 1:1 passen würden, weil Du es schaffst, die selben Fehler wie ohne uns einzubauen. Post#15, #26
    • Du willst Code ohne relevante Informationen zu liefern.
    • Und die Tatsache, dass Deine supertollgefundene Lösung effektiv schon in Post#8 steht - UND ZWAR MIT EINER WARNUNG, DASS MAN ES NICHT SO MACHEN SOLLTE - selbst dazu bist Du nicht in der Lage.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VBUser77 schrieb:

    VB.NET-Quellcode

    1. Form2.ListBox2.Items.Add(Me.ListBox1.SelectedItem)
    Ich hatte Dich mehrfach auf diesen Theread hingewiesen: Dialoge: Instanziierung von Forms und Aufruf von Dialogen

    VBUser77 schrieb:

    fantastisch wie man schnell mit visual basic lernen und arbeiten kann.
    Beratungsresistenz
    Lernbefreiung
    Leseschwäche
    Das war es nun wirklich, @VaporiZed ich folge Dir.

    VB.NET-Quellcode

    1. IgnoredUser.Add(VBUser77)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    bei anklicken eines button öffnet sich Form2 = 2 Mal und hängt etwas!

    Hallo guten morgen zusammen, Ich habe gestern abend ein problem in Form2 festgestellt: ich hoffe ihr könnt mir hier helfen - habe auch im netz gegoogelt bezug dieses problem aber anscheinend überhaupt was gefunden.

    Problembeschreibung: Bei anklicken eines Button in form2, öffnet sich ein weiterer Form2 mit und bremst etwas - Normalerweise soll durch betätigen des Button eigentlich nur form3 öffnen, erreicht werden; - nun form3 öffnet sich damit, allerdings mit form2 dazwischen und es bremst als wenn es sich für 1 halbe sekunde lang hängt. Was könnte die ursache sonst sein ?

    Ich habe in form2 im button diesen code hinzugefügt:

    VB.NET-Quellcode

    1. Dim OBJ As New Form3
    2. OBJ.StringPass = TextBox1.Text
    3. OBJ.Show()


    Grund des Fehlers: Weil bei form3 code:

    VB.NET-Quellcode

    1. Private Sub Form3_Load(ByVal sender As System.Object, ByVal E As System.EventArgs) Handles MyBase.Load
    2. TextBox2.Text = StringPass ' -> dieser code hat nichts mit code: Form2.Show() zu tun.
    3. Form2.Show() ' -> dieser code ist neu hinzugefügt worden kann ich leider nicht weglassen!
    4. End Sub
    der code Form2.Show() hinzugekommen ist. Aber wenn ich ihn weglasse dann funktioniert es einwandfrei - ich kann aber leider diesen code nicht weglassen - den sonst funktioniert das senden der Werte bei form3 nicht.

    Ich habe auch im Button bei form2 diesen code:

    VB.NET-Quellcode

    1. Me.close
    dazwischen geschrieben mit dem Ergebnis das das doppelte form2 fenster geschlossen wird was auch funktioniert aber bei betätigen des buttons hängt trotzdem etwas halt aber dann öffnet sich form3.

    Ich bin für jede hilfe dankbar.


    *Topics zusammengeführt, da scheinbar dasselbe Thema*

    Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von „VBUser77“ ()

    mit Form2.Show machst du eine kopie von Form2 auf. nicht die selbe Form2 nochmal sondern eine kopierte Form2.

    ich hab mir jetzt den ganzen Thread durchgelesen und weis immernoch nicht was du willst.

    Soll form2, form3 öffnen. Daten übergeben, die in Form3 bearbeitet werden und dann wird Form3 geschlossen und die neuen/geänderten Daten stehen dann ich Form2?

    oder willst Du beide Formen offen haben und wenn du was in Form3 änderst, dass das gleichzeitig in Form2 angezeigt wird?
    @frifri Ich gehe mal davon aus, dass Du diesen Thread hier verinnerlicht hast:
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    frifri schrieb:

    NEW Form
    Warum gibst Du dann der Instanz den Namen der Klasse?
    Das behindert das Verständnis, und gerade hier bei VB-Anfängern.
    Besser ist es da, die Instanz dlg oder frmInput oder sonst wie zu benennen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    frifri schrieb:

    wie würdest Du das machen?
    Bei modalem Aufruf (.ShowDialog()) immer in einem Using-Block.
    Wie die Instanz heißt, ist da nebensächlich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!