Wertzuweisung via Form2

  • C#

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von TehBasic.

    Wertzuweisung via Form2

    Hallo!

    Ich versuche derzeit folgende Problemstellung zu lösen.
    In meinem Programm habe ich 2 Forms, eine Main Form sowie die zweite (eine selbstgebastelte Inputbox).
    Folgendes Problem, in der Main form habe ich eine gloable decimal variable welche "kurs" heißt und dieser möchte ich den Wert aus der Inputbox zuweisen.

    Ich gehe wie folgt vor:

    C#-Quellcode

    1. Form1 frm = new Form1();
    2. frm.Kurs = decimal.parse(tbxKurs.Text);


    Jedoch wird der Wert nicht übertragen aus welchem Grund auch immer. Verbesserungsvorschläge wie man dieses effizienter lösen kann sind immer wieder willkommen :)

    Mfg
    TehBasic
    Moin,

    was hat denn "Kurs" bei der Übergabe für einen Wert? Debugge mal mit Haltepunkten durch.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Moin,

    stimmt Du sprichst hier ja Form1 an. Das geht nat. nicht, Du erstellst ja eine neue Form.
    Du musst daher mit Events arbeiten und Dir ein eigenes definieren, was als Parameter dann die Eigenschaft mitgibt, sodass Du diese im Handler abfangen kannst.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    es fehlt im Code ganz und gar die selbstgebastelte InputBox.
    Oder sag jetzt bitte nicht, dass Form1 eine InputBox ist. ;(

    Ausserdem muss man einen Dialog mit .ShowDialog öffnen. Gugge Instanziierung von Forms und Aufruf von Dialogen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Definiere

    TehBasic schrieb:

    der Wert nicht übertragen
    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!
    Ok, daweil alles klar.
    Hätte ich mir eigentlich früher denken können T_T

    Im Programm geht es um eine ganz kleine Artikelverwaltung, in welche man einen Wechselkurs angeben kann.
    Beim Start des Programms, (um genauer zu sein im Load Event der Main Form) wird immer die Inputbox aufgerufen, welche einen Kurs verlangt.
    Soweit so gut, bin mal alles im Haltepunkt durchgegangen und mir ist aufgefallen, dass wenn die Inputbox geschloßen wird, geht dann auch der Wert flöten...

    Das ganze sieht bei mir wie folgt aus:

    Spoiler anzeigen

    C#-Quellcode

    1. ​namespace Artikelverwaltung
    2. {public partial class Form1 : Form
    3. {
    4. public decimal kurs = 0;
    5. public Form1()
    6. {InitializeComponent();}
    7. private void Form1_Load(object sender, EventArgs e)
    8. {
    9. InputBox ipb = new InputBox();
    10. ipb.ShowDialog();
    11. }


    C#-Quellcode

    1. ​namespace Artikelverwaltung
    2. {
    3. public partial class InputBox : Form
    4. {
    5. public InputBox()
    6. {
    7. InitializeComponent();
    8. }
    9. private void btn_OK_Click(object sender, EventArgs e)
    10. {
    11. if (String.IsNullOrEmpty(tbx_Kurs.Text))
    12. {
    13. MessageBox.Show("Kurs muss eingegeben werden!");
    14. return;
    15. }
    16. else if (tbx_Kurs.Text == "0")
    17. { MessageBox.Show("Kurs kann nicht null sein!"); return; }
    18. else
    19. {
    20. decimal krs;
    21. Form1 frm1 = new Form1();
    22. krs = Convert.ToDecimal(tbx_Kurs.Text);
    23. MessageBox.Show(Convert.ToString(krs));
    24. frm1.kurs = krs;
    25. }


    Habe den Fehler aber gefunden, werde mich wohl mit Events auseinandersetzen müssen :p

    Mfg
    TehBasic
    Bin ich, jedoch soll die Main Form nicht aufgerufen werden bevor ein Kurs eingegeben wird.

    D.h., die Inputbox wird im Load Event der Main form aufgerufen, um eben einen Kurs zu erhalten bevor die Main Form erscheint.
    Darum geht es mir eigentlich in dem Ding ^^

    Mfg
    TehBasic
    Erstell mal eine Form die du CustomInputBox nennst,
    auf ihr kommt ein Numericupdown mit decimalplaces auf 2 (für 2 nachkommastellen, kannst auch mehr oder weniger)
    ein Label (Beschriftung: Kurs)
    und zwei Buttons (Bestätigen und Abbrechen)
    und fügst den Code ein:

    CustomInputBox

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9. namespace KursProgramm
    10. {
    11. public partial class CustomInputBox : Form
    12. {
    13. public CustomInputBox()
    14. {
    15. InitializeComponent();
    16. }
    17. public decimal Value
    18. {
    19. get { return numKursWert.Value; }
    20. }
    21. private void btnBestaetigen_Click(object sender, EventArgs e)
    22. {
    23. this.DialogResult = System.Windows.Forms.DialogResult.OK;
    24. }
    25. private void btnAbbrechen_Click(object sender, EventArgs e)
    26. {
    27. this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
    28. }
    29. }
    30. }


    (Musst die btnAbbrechen_Click Methode etc abonnieren (einfach doppelklick auf die buttons im designer))

    Auf Form1 fügst du nur

    C#-Quellcode

    1. public decimal KursValue { private get; set; }


    ein

    und Program.cs änderst du so ab:

    Program

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Windows.Forms;
    5. namespace KursProgramm
    6. {
    7. static class Program
    8. {
    9. /// <summary>
    10. /// Der Haupteinstiegspunkt für die Anwendung.
    11. /// </summary>
    12. [STAThread]
    13. static void Main()
    14. {
    15. Application.EnableVisualStyles();
    16. Application.SetCompatibleTextRenderingDefault(false);
    17. var newKurs = new CustomInputBox();
    18. if (newKurs.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    19. {
    20. Form1 newForm = new Form1();
    21. newForm.KursValue = newKurs.Value;
    22. Application.Run(newForm);
    23. }
    24. }
    25. }
    26. }


    Kannst es aber auch wie in ErfinderDesRades Tutorial machen:

    Dazu gehst du auf den Designer für CustomToolBox, wählst die Form aus.
    Dann wählst du als AcceptButton btnBestaetigen
    und als CancelButton btnCancel.
    Anschliessend wählst du die Buttons und änderst beim btnBestaetigen die Eigenschaft DialogResult zu DialogResult.Ok
    und bei btnCancel zu DialogResult.Cancel

    Dann kannst du den Click Code entfernen (mit this.dialogresult = blabla)

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

    Also, was mir gefehlt hat, war lediglich nur ein Tritt in den Hintern.
    Natürlich funktionert jetzt alles wie es funktionieren soll.
    Ich sollte mir aneignen mich intensiver mit solchen Problemstellungen auseinanderzusetzen anstatt gleich im Forum zu flennen...

    Danke trotzdem für die kompetente Hilfe

    Mfg
    TehBasic