Laden...
D
Delfis myCSharp.de - Member
Versicherungsmakler Niedersachsen Dabei seit 06.08.2017 24 Beiträge
Benutzerbeschreibung

Forenbeiträge von Delfis Ingesamt 24 Beiträge

20.08.2017 - 18:37 Uhr

Hallo Timm,

ich habe einiges getestet, bevor ich die Frage wieder eingestellt habe, wahrscheinlich stand ich auf dem Schlauch. Dein Google-Hinweis war nun hilfreich.

Danke!

Thomas

20.08.2017 - 16:57 Uhr

Hallo chilic,

in dem DataGrid soll eine nn-Matrix spaltenweise zusammengesetzt werden. Insofern benötige ich nach der ersten Initialisierungszeile den entsprechenden Befehl, um weitere Spalten mit jeweils n Elementen ergänzen zu können, bis die nn-Matrix vollständig ist.

Danke!

20.08.2017 - 11:03 Uhr

Hallo Timm,

es hakt noch immer. Ich kann keine neuen Spalten einfügen, weil mit dem zweiten Befehl "new" die bereits angezeigten Spalten gelöscht und durch die neuen ersetzt werden:


            koeff_dgv.DataSource = x_i.Where(x => x > 0).Select((x, index) =>
            new { Koeffizienten = "a("+(index+1) +", "+j+")", Überschrift = x }).ToList();

            koeff_dgv.DataSource = x_i.Where(x => x > 0).Select((x, index) =>
            new { Überschrift = x }).ToList();


Hier soll einfach nur eine weitere Spalte hinzugefügt werden. Ein Ersatz von "new" durch "add" führt zu einer Fehlermeldung. Wie muss es richtig heißen?

Und statt "Überschrift" in der ersten sowie folgenden Spalten hätte ich gerne die Darstellung x_i(i, j) mit i und j als aktuellem Zeilen- und Spaltenzähler so wie es in den Zeilen nun richtig dargestellt wird. Eine entsprechende Zusammensetzung wie bei "Koeffizienten" wird mit Fehlermeldungen quittiert. Auch hier die Frage: Wie muss es richtig heißen?

Danke!

19.08.2017 - 16:37 Uhr

Hallo Timm,

das ist interessant. Für mich ist das eine Freizeitbeschäftigung. Ich würde gerne in der Softwareentwicklung tätig sein.

Gruß
Thomas

19.08.2017 - 16:24 Uhr

Hallo emuuu,

Danke, das werde ich ausprobieren.

Wie gesagt, soll das ein Testprogramm für numerische Verfahren werden. Das lässt sich dann ja feststellen, wie sich welches Verfahren verhält.

Gruß
Thomas

19.08.2017 - 15:52 Uhr

Hallo emuuu,

Ok, das macht Sinn. Wie sieht denn dann der Programmcode aus, um ein zweidimensionales Feld in einem DataGrid darzustellen? Ich brauche ja nur in der ersten Zeile und Spalte eine Art "Überschrift z. B. a(i, j)" für die nachfolgenden Koeffizienten.

Die Householder-Transformation ist z. B. ein sehr gutes Verfahren zur Lösung linearer Gleichungssysteme.

Danke!

19.08.2017 - 15:26 Uhr

Hallo emuuu,

zu dem Hintergrund des Programms: Ich möchte zunächst zufällige lineare Gleichungssysteme erzeugen, um im nächsten Schritt die Genauigkeit von numerischen Verfahren zur Lösung dieser Gleichungssysteme zu testen. Die Koeffizientenmatrix setze ich derzeit zeilenweise zusammen, prinzipiell ist das genauso auch spaltenweise möglich. Zur Kontrolle sollen die Matrixelemente im DataGrid angezeigt werden.
Wegen der Zweidimensionalität hatte ich in meinem ersten Beitrag auch danach gefragt, wie man zweidimensionale Felder in ein DataGrid einfügen kann. Vielleicht hätte ich das gleich vorausschicken sollen.
Was empfiehlst Du mir nun:
Soll ich zunächst spaltenweise die Matrix und das DataGrid füllen oder macht es mehr Sinn, zunächst die Matrix zu füllen und damit anschließend das DataGrid? Wie sähe der Code dann in letzterem Fall aus?

So weit war ich übrigens in dem openbook noch nicht gekommen.

Danke!

19.08.2017 - 14:28 Uhr

Hallo emuuu!

Wie kommt man auf so eine Programmzeile? Kann ich das in dem "openbook:Visual C#" irgendwo nachlesen?
Danke erst einmal für Deine Antwort, aber sie liefert leider nicht das gewünschte Ergebnis. Die Sortierung habe ich wieder herausgenommen, weil ich sie nicht brauche.
Am Ende des DataGrids werden zwei neue Spalten ergänzt, "RecNo" und "ColumnName", darunter die laufende Nummer und die Werte aus dem Feld.
Es sollte aber eine neue Zeile gefüllt werden, in der ersten Zelle eine noch festzulegende laufende Nummer, danach die array-Elemente. Wie muss das dann aussehen?

Danke!

19.08.2017 - 12:55 Uhr

Hallo C#-Nutzer,

ich versuche, die Werte aus einem eindimensionalen array (x_i) in ein DataGridView (koeff_dgv) zu übertragen. Folgendes habe ich probiert:


               koeff_dgv.Rows.Add(x_i);

In der ersten Zelle wird nur "System.Double[]" eingetragen


for (uint i=0; i<dimension; i++)
 {
         koeff_dgv.Rows.Add(x_i[i]);
 }

Es wird erwartungsgemäß die erste Spalte untereinander und nicht wie gewünscht die Zeile mit den array-Werten gefüllt.


for (uint i=0; i<dimension; i++)
 {
         koeff_dgv.Columns.Add(x_i[i]);
 }               

Erzeugt eine Fehlermeldung, dass "double nicht in System.Windows.Forms.DataGridViewColumn" umgewandelt werden kann.

Eine Suche bei den vorhandenen Forenthemen über "DataGridView array" blieb ohne entsprechendes Ergebnis. Daher meine Fragen:

Wie muss es richtig programmiert werden? Und wie müsste ich vorgehen, um ein zweidimensionales array entsprechend eintragen zu wollen?

Danke!

10.08.2017 - 15:10 Uhr

Hallo LaTino und hyperserf,

mit dem Attribut "public" hatte ich über das Ziel hinausgeschossen, das ist mir klar, denn "private" gilt an dieser Stelle klassenweit, ist geändert. Ansonsten stehe ich wie gesagt noch am Anfang und lerne, indem ich mithilfe des Visual C# 2013-Buches, Internet und diesem Forum beginne, ein erstes Programm zu schreiben. Das bitte ich bei der Beantwortung meiner Fragen zu berücksichtigen.

Danke!

Gruß
Thomas

10.08.2017 - 08:06 Uhr

Hallo liebe C#-Nutzer,

eine Lösung habe ich gefunden und würde nun gerne wissen, ob diese üblich ist oder welche sinnvoller wäre?
Zunächst einmal fiel mir auf, dass die Variablen f2.X_min und f2.X_max mit 0 belegt waren. Offensichtlich scheint es nicht dasselbe zu sein, wenn das Programm nach der Rückkehr zur aufrufenden Form in zwei privaten Programmteilen die neue Form identisch aufruft, um sich Variablenwerte zu holen:


        private void AchsenkalibrierungToolStripMenuItem_Click(object sender, EventArgs e)
        {

            Form2 f2 = new Form2();
            DialogResult result = f2.ShowDialog();
            ...
  
        private void funktionDarstellenMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
           ...
 

Also habe ich zwei public-Variablen zu Beginn definiert und sie nach der Rückkehr aus Form2 mit den Werten belegt, die dann beim Aufbau der Grafik in der eigenen Routine die gewünschten Werte enthalten:


    public partial class Form1 : Form
    {
        public double X_min, X_max;
        public Form1()
        {
            InitializeComponent();
            
        }
...
        private void AchsenkalibrierungToolStripMenuItem_Click(object sender, EventArgs e)
        {

            Form2 f2 = new Form2();
            DialogResult result = f2.ShowDialog();

            if (result == DialogResult.OK)
            {
                funktionDarstellenMenuItem.Enabled = true; 
                X_min = Convert.ToDouble(f2.X_min);
                X_max = Convert.ToDouble(f2.X_max);
            }
            
        }
        private void funktionDarstellenMenuItem_Click(object sender, EventArgs e)
        {
            chart1.Series.Add(new Series("Funktionsgraph"));
            chart1.Series[0].Points.AddXY(X_min, 0);
            chart1.Series[0].Points.AddXY(X_max, 10);
            chart1.Series[0].Color = Color.Black;
            chart1.Series[0].BorderWidth = 3;
            chart1.Series[0].ChartType = SeriesChartType.Line;
            chart1.Legends[0].Position = new ElementPosition(25, 10, 40, 20);
            chart1.Legends[0].BackColor = Color.LightGray;
            chart1.Legends[0].BorderWidth = 1;
            chart1.Legends[0].BorderColor = Color.Black;
            chart1.ChartAreas[0].AxisX.Minimum = X_min;
            chart1.ChartAreas[0].AxisX.Maximum = X_max;
            chart1.ChartAreas[0].AxisX.Title = "x-Achse";
            chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Near;
            chart1.ChartAreas[0].AxisX.LabelStyle.Font = new Font("Arial", 8);
            chart1.ChartAreas[0].AxisY.Maximum = 11;
            chart1.ChartAreas[0].AxisY.Title = "y-Achse";
            chart1.ChartAreas[0].AxisY.TitleAlignment = StringAlignment.Far;
            chart1.ChartAreas[0].AxisY.LabelStyle.Font = new Font("Arial", 8);
            chart1.BackColor = Color.LightGray;
            chart1.ChartAreas[0].BackColor = Color.LightBlue;
        }

Danke!

09.08.2017 - 16:36 Uhr

Hallo liebe C#-Nutzer,

ich möchte in einem Chart eine Funktion grafisch darstellen. Leider will die Beschriftung der x-Achse nicht so, wie ich das will. Zum einen wird bei der Definition von Mimimum- und Maximum-Wert die Fehlermeldung ausgeworfen:

Fehlermeldung:
Fehler CS0266 Der Typ "decimal" kann nicht implizit in "double" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden (möglicherweise fehlt eine Umwandlung).

Ergänze ich die Zeilen um ein Convert.ToDouble, so wird die x-Achse weder mit dem angegebenen Intervall, z. B. X_min=1 und X_max=2 beschriftet noch der Graph dargestellt. Schreibe ich hier direkt 1 und 2, wird der Graph richtig dargestellt, d. h. bei ...Points.AddXY(f2.X_min) und ...PointsAddXY(f2.X_max) werden die Typdeklarationen ohne Fehlermeldung akzeptiert.
Was muss ich ändern?


       private void funktionDarstellenMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            chart1.Series.Clear();
            chart1.Series.Add(new Series("Funktionsgraph"));
            chart1.Series[0].Points.AddXY(f2.X_min, 0);               //Hier wird die Variable akzeptiert
            chart1.Series[0].Points.AddXY(f2.X_max, 10);            //Hier wird sie auch akzeptiert
            chart1.Series[0].Color = Color.Black;
            chart1.Series[0].BorderWidth = 3;
            chart1.Series[0].ChartType = SeriesChartType.Line;
            chart1.Legends[0].Position = new ElementPosition(25, 10, 40, 20);
            chart1.Legends[0].BackColor = Color.LightGray;
            chart1.Legends[0].BorderWidth = 1;
            chart1.Legends[0].BorderColor = Color.Black;
            chart1.ChartAreas[0].AxisX.Minimum = f2.X_min;         // HIER WIRD GEMECKERT
            chart1.ChartAreas[0].AxisX.Maximum = f2.X_max;        //HIER WIRD AUCH GEMECKERT
            chart1.ChartAreas[0].AxisX.Title = "x-Achse";
            chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Near;
            chart1.ChartAreas[0].AxisX.LabelStyle.Font = new Font("Arial", 8);
            chart1.ChartAreas[0].AxisY.Maximum = 11;
            chart1.ChartAreas[0].AxisY.Title = "y-Achse";
            chart1.ChartAreas[0].AxisY.TitleAlignment = StringAlignment.Far;
            chart1.ChartAreas[0].AxisY.LabelStyle.Font = new Font("Arial", 8);
            chart1.BackColor = Color.LightGray;
            chart1.ChartAreas[0].BackColor = Color.LightBlue;

        } 

Danke!

08.08.2017 - 19:45 Uhr

Hallo Taipi88,

dieses Forum ist eine große Hilfe für mich, seit gestern habe ich eine Menge dazu gelernt, vor allem, dass in C# mehrere Baustellen gleichzeitig im Auge behalten werden müssen. Bei Arduino C gab es nur die direkten Korrekturen im Programm, hier ist es eine weitere Datei.

Die entsprechenden Zeilen im Form2-Designer sind gelöscht und die Fehler verschwunden, auch ohne die zusätzliche Programmzeile erfolgt nun die richtige Zuordnung zur Variablen Kal.

Danke nochmals, mal schauen, wie ich nun weiterkomme.

Thomas

08.08.2017 - 14:26 Uhr

Hallo Taipi88,

eine Frag ist noch ungeklärt: Wieso wird die Voreinstellung des ersten Radiobuttons nicht korrekt an Kal übergeben sondern erst, nachdem zwischenzeitlich ein anderer Radiobutton ausgewählt worden ist. Wie kann ich das ändern?

In der Form1 habe ich natürlich den uint Kal in einen String umgewandelt, um ihn in der Textbox richtig ausgeben zu können. Ansonsten hoffe ich, dass nun alles passt:

  
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        public uint Kal
        {
            get
            {
                if (Xy_l.Checked)
                    return 1;
                if (Xl_ylog.Checked)
                    return 2;
                if (Xlog_yl.Checked)
                    return 3;
                return 4;
            }
        }
        public decimal X_min {get; set;}
        public decimal X_max { get; set; }

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            X_min = Convert.ToDecimal(Xmin_box.Text);
            X_max= Convert.ToDecimal(Xmax_box.Text);
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
    }
}


Übrigens wirft der Debugger nun vier Fehlermeldungen aus, weil keine ..._CheckedChange Methoden gefunden werden. Da das Programm ansonsten läuft, spielt das wohl keine Rolle, oder?

08.08.2017 - 14:07 Uhr

Hallo Taipi88,

das sieht natürlich noch besser aus. Wie gesagt, bin ich dabei, mich auf objektorientierte Programmierung umzustellen und stehe noch am Anfang.

Stimmt, statt die Zahlen als String zu verwenden, könnte ich sie besser so belassen. Das werde ich ändern genauso wie die x-Werte. Das Beispiel ist anhand eines Progammbeispieles aus "Einstieg in Visual C# 2013" übernommen.

Gruß
Thomas

08.08.2017 - 12:38 Uhr

Hallo Taipi88 und hyperserf,

nachdem, was ich bislang über Klassen gelesen habe, ist es also der logisch bessere Weg, Daten quasi indirekt auszutauschen und die Routinen als eigenständig bestehen zu lassen. Diese Programmierweise ist nach meinen Erfahrungen mit dem Arduino allerdings noch gewöhnungsbedürftig.

@Taipi88: Ich habe versucht, Dein Beispiel umzusetzen, meintest Du das -mithilfe meines Handbuches- in etwa so:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        private string kal;
        public string Kal
        {
            get
            {
                return kal;
            }
            private set
            {
                if (Xy_l.Checked)
                {
                    kal = "1";
                }
                else if (Xl_ylog.Checked)
                {
                    kal = "2";
                }
                else if (Xlog_yl.Checked)
                {
                    kal = "3";
                }
                else 
                {
                    kal = "4";
                }
            }
        }
        private decimal xmin;
        public decimal X_min
        {
            get => xmin; set => xmin = value;
        }
        private decimal xmax;
        public decimal X_max
        {
            get => xmax; set => xmax = value;
        }
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            X_min = Convert.ToDecimal(Xmin_box.Text);
            X_max= Convert.ToDecimal(Xmax_box.Text);
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
    }
}


Das funktioniert prima und sieht erheblich eleganter aus, ein super Tipp bis auf eine Kleinigkeit: der erste Radiobutton ist automatisch im Entwurfsmodus und beim Aufruf der Form2 aktiviert. Der korrekte Wert "1" für kal wird aber erst dann richtig zugeordnet, nachdem ich zwischenzeitlich einen anderen Radiobutton aktiviert hatte, ansonsten bleibt die Rückgabe leer. Wie kann ich das noch vervollständigen?

Danke!

08.08.2017 - 10:38 Uhr

Ich habe den Fehler gefunden! Beim Starten des Programms wunderte ich mich, warum das Toolstripmenu doppelt dargestellt wurde. Nachdem ich nun das zweite "InitialiseComponent" auskommentiert habe, tritt das nicht mehr auf und die Textboxen werden mit den Werten gefüllt. Vorher funktionierte das genauso wenig mit Labeln. Wie die zweite Initialisierung dorthin gekommen ist, kann ich nicht mehr nachvollziehen.

Danke dennoch für Eure Hilfe. Manchmal reicht es schon, wenn kompetente Ansprechpartner in Reichweite sind!
In diesem Zusammenhang ergibt sich eine zweite Frage. Statt wie in diesem Falle mit einer Variablen "Kal" zu arbeiten, müsste es doch wie bei dem DialogResult auch möglich sein, das Ergebnis der Radiobutton-Auswahl direkt in die Form1 übertragen zu können. Wie müsste das dann aussehen?
Hier nochmals der vollständige Code.:

Code Form1:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
[/B]      InitializeComponent();
        }

        private void BeendenStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void AchsenkalibrierungToolStripMenuItem_Click(object sender, EventArgs e)
        {

            Form2 f2 = new Form2();
            DialogResult result = f2.ShowDialog();

            if (result == DialogResult.OK)
            {
                textBox1.Text = f2.Kal;
                textBox2.Text = Convert.ToString(f2.X_min);
                textBox3.Text = Convert.ToString(f2.X_max);
                MessageBox.Show(f2.Kal + " " + Convert.ToString(f2.X_min) + " " + Convert.ToString(f2.X_max));
            }
        }
    }
}

Code Form2:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        private string kal;
        public string Kal
        {
            get => kal; set => kal = value;
        }
        private decimal xmin;
        public decimal X_min
        {
            get => xmin; set => xmin = value;
        }
        private decimal xmax;
        public decimal X_max
        {
            get => xmax; set => xmax = value;
        }
        public Form2()
        {
            InitializeComponent();
        }

        private void Xy_l_CheckedChanged(object sender, EventArgs e)
        {
            if (Xy_l.Checked)
            {
                Kal = "1";            }
        }

        private void Xl_ylog_CheckedChanged(object sender, EventArgs e)
        {
            if (Xl_ylog.Checked)
            {
                Kal = "2";
            }
        }

        private void Xlog_yl_CheckedChanged(object sender, EventArgs e)
        {
            if (Xlog_yl.Checked)
            {
                Kal = "3";
            }
        }

        private void Xlog_ylog_CheckedChanged(object sender, EventArgs e)
        {
            if (Xlog_ylog.Checked)
            {
                Kal = "4";
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            X_min = Convert.ToDecimal(Xmin_box.Text);
            X_max= Convert.ToDecimal(Xmax_box.Text);
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
    }
}


08.08.2017 - 07:50 Uhr

Hallo Benjamin,

folgende Werte habe ich eingegeben: k=2, xmin=1,31 und xmax=4,25. Wie gesagt werden diese Werte in der Messagebox richtig angezeigt, die Textfelder bleiben leer selbst wenn ich z. B. textBox1.Text="test" eingebe.
Hier noch die Konstruktoren für die Werteübergabe aus Form2:


        private string kal;
        public string Kal
        {
            get => kal; set => kal = value;
        }
        private decimal xmin;
        public decimal X_min
        {
            get => xmin; set => xmin = value;
        }
        private decimal xmax;
        public decimal X_max
        {
            get => xmax; set => xmax = value;
        }

Danke!

07.08.2017 - 22:24 Uhr

Nächster Versuch: Ich habe die Textboxeinträge in die Messagebox kopiert und darin werden alle Variablenwerte aus der Form2 korrekt angezeigt. Es bleibt die Frage, warum das nicht in den Textfeldern möglich ist :

 
      private void AchsenkalibrierungToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            DialogResult result = f2.ShowDialog();

            if (result == DialogResult.OK)
            {
                //textBox1.Text = "Test";
                //textBox1.Text = f2.Kal;
                MessageBox.Show(f2.Kal + " " + Convert.ToString(f2.X_min) + " " + Convert.ToString(f2.X_max));
                //textBox2.Text = Convert.ToString(f2.X_min);
                //textBox3.Text = Convert.ToString(f2.X_max);

            }
     

}

Danke!

07.08.2017 - 22:06 Uhr

Hallo hypersurf,

Danke für den Tipp, ich habe die Änderungen vorgenommen, nun wird tatsächlich auch "OK" übertragen. Die vorher programmierte Version hatte ich in einem youtube-video gefunden, bei dem ein Text aus einer zweiten in die aufrufende Form übertragen wurde.
Trotz allem werden die Textfelder nicht gefüllt. Beim Debuggen werden mir die richtigen Textfeldeinträge gezeigt, kommen aber nicht zur Darstellung. Woran liegt das? Hier nochmals der nun geänderte Code:



        private void AchsenkalibrierungToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            DialogResult result = f2.ShowDialog();

            if (result == DialogResult.OK)
            {
                textBox1.Text = f2.Kal;

                textBox2.Text = Convert.ToString(f2.X_min);
                textBox3.Text = Convert.ToString(f2.X_max);
            }

            MessageBox.Show(result.ToString());
        }
    }

Danke!

07.08.2017 - 20:22 Uhr

Hallo Abt,

der DialogResult wird doch dadurch auf "OK" gesetzt, dass ich die Form2 mit dem Drücken des Buttons verlasse, so zeigt es auch der Debugger an. Oder wie muss ich hier den DialogResult noch extra setzen?

07.08.2017 - 20:13 Uhr

Hallo liebe C#-Nutzer!

Und schon kommt die nächste Frage:

Bei der Rückkehr von einer aufgerufenen Form werden die Variablenwerte zwar korrekt übergeben, nicht aber das Ergebnis des DialogResults. In der Form2 ist er als "OK" definiert und mit diesem Wert wird die Form2 auch verlassen. In der aufrufenden Form1 erscheint der Wert aber als "NONE", deshalb werden die Variablenwerte nicht in die Textboxen geschrieben. Es ändert sich nichts, wenn ich in der Form2 "Close" lösche. Wo liegt der Fehler?


Ende des Programms in Form2:

        private void button1_Click(object sender, EventArgs e)
        {
            X_min = Convert.ToDecimal(Xmin_box.Text);
            X_max= Convert.ToDecimal(Xmax_box.Text);
            Close();
        }

Rücksprung in aufrufende Form1:

        private void AchsenkalibrierungToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            if (f2.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = f2.Kal;

                textBox1.Text = Convert.ToString(f2.X_min);
                textBox3.Text = Convert.ToString(f2.X_max);
            }
        }

Danke für Eure Hilfe!

07.08.2017 - 12:02 Uhr

Vielen Dank für die Unterstützung, inzwischen funktioniert es tatsächlich! 👍
Die Radiobuttons waren zunächst in einer Groupbox zusammengefasst, das Ergebnis war allerdings das gleiche.
Nachdem ich hinter jeder If-Abfrage einen Haltepunkt gesetzt hatte, stellte ich fest, dass außer dem Button-Teil kein einziger der Radiobutton-Programmteile aufgerufen wurde.
Ich habe darauf hin im Entwurfsmodus alle Radiobuttons nochmals doppelt angeklickt und die alten Programmteile gelöscht, offensichtlich hatte ich zuvor einen Fehler bei der Einbindung gemacht.

06.08.2017 - 22:18 Uhr

Hallo an alle Forumsmitglieder!
Nachdem ich mich mit der Programmierung des Arduino in C intensiv beschäftigt habe, möchte ich auch weitergehend Programme in C# schreiben. Trotz Internetrecherche und des Handbuches "Einstieg in Visual C# 2013" finde ich allerdings keine Erklärung dafür, dass die Änderung der Radiobutton-Auswahl nicht auch zu einem entsprechend neuen Eintrag in die Textbox führt. Das Anklicken des Buttons sorgt korrekt für die Auswahl des ersten Radiobuttons und den Texteintrag. Kommentiere ich den Texteintrag aus, so bleibt das Textfeld immer leer:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Funktionsgraph
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Xy_l.Checked = true;
            textBox1.Text = "Beide Achsen linear!";
        }

        private void beendenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void Xy_l_CheckedChanged(object sender, EventArgs e)
        {
            if (Xy_l.Checked)
            {
                textBox1.Text = "Beide Achsen linear!";
            }
         
        }

        private void Xl_ylog_CheckedChanged(object sender, EventArgs e)
        {
            if (Xl_ylog.Checked)
            {
                textBox1.Text = "x linear/y logarithmisch!";
            }
        }

        private void Xlog_yl_CheckedChanged(object sender, EventArgs e)
        {
            if (Xlog_yl.Checked)
            {
                textBox1.Text = "x logarithmisch/y linear!";
            }
        }

        private void Xy_log_CheckedChanged(object sender, EventArgs e)
        {
            if (Xy_log.Checked)
            {
                textBox1.Text = "Beide Achsen logarithmisch!";
            }
        }
    }
}

Hintergrund: Die Radiobutton-Auswahl soll eigentlich in einer zweiten Form abgefragt werden. Und wo jetzt die Textbox gefüllt wird, sollte ein Variablenwert erzeugt werden, der in der aufrufenden Form weiter verwendet wird. Die Übergabe von Variablenwerten zwischen verschiedenen Forms funktionierte normalerweise. In diesem Falle wurde allerdings kein Wert zurückgegeben. Deshalb bin ich einen Schritt zurückgegangen und habe versucht, das in einer einzigen Form nachzuvollziehen. Offensichtlich liegt in beiden Fällen der gleiche Fehler vor. Was mache ich also falsch, bzw. wie muss es richtig programmiert werden?

Danke vorab für Eure Hilfe!