Autor Beitrag
Nika
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 24.08.14 12:55 
Hallo Leute,

ich bin ein Anfänger mit C# deshalb brauch ich bitte eure Hilfe. :)
Und zwar möchte ich folgendes schaffen:

Ich habe 4 TextBox (Millimeter, Zentimeter, Dezimeter, Meter) Wenn ich z.B Meter eingebe z.b 100 und aufs Button „Berechnen“ click mache, dann wird berechnet wie viel Millimeter, Zentimeter usw. Meine Frage ist, ob ich in dem Fall mit swich case machen kann. Mein Problem ist ich verstehe nicht wie muss mein code aussehen. Swich (????TextBox 1 oder 2 oder 3) Meine Idea war, wenn ich im TextBox Meter bin und gebe einen Wert ein, dann im case 4: werden die Methoden aufgerufen. Wenn ich im TextBox Millimeter bin, dann im case 1 werden die Methoden aufgerufen (berechneZentimeter, berechne Dezimeter, berechne Meter).

Moderiert von user profile iconTh69: Titel geändert: swich -> switch
Moderiert von user profile iconChristian S.: Topic aus C# & .NET Tutorials verschoben am So 24.08.2014 um 16:39
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 24.08.14 13:10 
Eher nicht. Am besten zu zeigst wo du gerade mit deinem Code stehst und wir können dich dann von da aus in eine passende Richtung lenken.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4801
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 24.08.14 13:11 
Hallo Nika :welcome:,

das Problem ist, daß beim Klick auf den Button der TextBox-Fokus verloren geht, d.h. dein eigentliches Problem besteht ersteinmal darin, zu ermitteln, in welche TextBox zuletzt ein Wert eingegeben wurde.

Wäre es nicht einfacher zu jeder TextBox einen eigenen Button zu erstellen, so daß du dann jeweils konkret die 3 anderen Umrechnungen durchführst (so daß du keinen switch case o.ä benötigst)?
Nika Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 24.08.14 14:59 
Hier ist mein Code. Das ist alles was ich bis jetzt gemacht habe. Ich habe keine Idee, wie ich weiter machen könnte

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
public partial class LenghtCalculator : Form
    {
        private float Inputwert = 0;
        private float Outputwert = 0;
        private float Berechnen = 0;
        private float Löschen = 0;

      

        private void Form1_Load(object sender, EventArgs e)
        {
            ToolTip toolTip= new ToolTip();
            toolTip.AutoPopDelay = 10000;
            toolTip.InitialDelay = 100;
            toolTip.ReshowDelay = 500;
            toolTip.ShowAlways = true;

            toolTip.SetToolTip(this.label1, "Ein Millimeter entspricht ");
            toolTip.SetToolTip(this.label4, "Ein Zentimeter entspricht ");
            toolTip.SetToolTip(this.label5, "Ein Dezimeter entspricht  ");
            toolTip.SetToolTip(this.label6, "Der Meter  ");
            toolTip.SetToolTip(this.label7, "Ein Kilometer entspricht 1000 Meter. ");
            toolTip.SetToolTip(this.label8, "Die Astronomische Einheit beträgt ");
            toolTip.SetToolTip(this.label14, ".... ");
            toolTip.SetToolTip(this.label13, "............ ");
            toolTip.SetToolTip(this.label12, ".... ");
            toolTip.SetToolTip(this.label11, "..... ");
            toolTip.SetToolTip(this.label10, "... ");
            toolTip.SetToolTip(this.label21, ".... ");
            toolTip.SetToolTip(this.label20, "....");
            toolTip.SetToolTip(this.label19, "...");
            toolTip.SetToolTip(this.label18, "Ein Rod entspricht  ");
            toolTip.SetToolTip(this.label17, "Ein Chain ist  ");
            toolTip.SetToolTip(this.label16, "Ein Furlong entspricht 10 Chains,  ");
            toolTip.SetToolTip(this.label15, "Ein Parsec ist die Entfernung,");

        }
        public LenghtCalculator()
        {
            InitializeComponent();
            Initialisierung();
        }

        private void Initialisierung()
        {
            txt_MillimeterWert.Text = "0";
            txt_ZentimeterWert.Text = "0";
            txt_DezimeterWert.Text = "0";

        }
        private void fontDialog1_Apply(object sender, EventArgs e)
        {
  
        }
       private void button1_Click(object sender, System.EventArgs e)
        {

        }
        public float millimeter(float mm) {

            mm=Inputwert/0.001f;

            return mm;
        }

        public float zentimeter(float cm)
        {
            cm = Inputwert / 0.01f;

            return cm;
        }
        public float dezimeter(float dm)
        {
            dm = Inputwert / 0.1f;

            return dm;
        }
        public float meter(float m)
        {
            m = Inputwert /(1/299792458);

            return m;
        }                 

    }


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 24.08.14 17:34 
Sehe leider nix in deinem Code um von dort aus weiterzumachen.
Darum eine Alternative, TH69 hat ja das Focusproblem erwähnt, darum wäre eine Alternative das Berechen durch ein Return Klick auszulösen während man in einer der Textboxen ist.

Um das Kompakt zuhalten kann man sich eine Basiseinheit denken in die man den Inhalt der Quell Textbox umrechnet um dann in die Ziel TextBox(en) Einheit(en) weiter zu rechnen. Man wendet also den Umrechnungsfaktor 2 mal an (also zum Beispiel von cm -> mm -> m wenn man Millimeter als Basis wählt).
Die Umrechnungsfaktor kann man günstigerweise in der Tag Property der TextBox ablegen dann hat man die immer relativ zur TextBox parat.

Eine Lösung (ohne jede Fehlerbehandlung) sähe dann im Code dann ungefähr so aus.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
    public partial class LenghtCalculator : Form
    {
        public LenghtCalculator()
        {
            InitializeComponent();

            // Intialisieren der TextBoxen mit Startwert, Umrechnungsfaktor und Event zum abfangen von Return 
            txtMillimeter.Text = "0";
            txtMillimeter.Tag  = 1.0;
            txtMillimeter.KeyUp += txtBoxes_KeyUp;

            txtCentimeter.Text = "0";
            txtCentimeter.Tag  = 10.0;
            txtCentimeter.KeyUp += txtBoxes_KeyUp;

            txtDezimeter.Text = "0";
            txtDezimeter.Tag  = 100.0;
            txtDezimeter.KeyUp += txtBoxes_KeyUp;

            txtMeter.Text  = "0";
            txtMeter.Tag   = 1000.0;
            txtMeter.KeyUp += txtBoxes_KeyUp;
        }

        private void txtBoxes_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Return)  // wenn return dann 
            {
                Control ctrl = (Control)sender; // die QuellTextBox 
                double value = Convert.ToDouble(ctrl.Text) * (double)ctrl.Tag; // umrechnen in Basiseinheit 
                    
                // Umrechnen in Zieleinheit und zuweisen als Tex
                txtMillimeter.Text = (value / (double)txtMillimeter.Tag).ToString();
                txtCentimeter.Text = (value / (double)txtCentimeter.Tag).ToString();
                txtDezimeter.Text = (value / (double)txtDezimeter.Tag).ToString();
                txtMeter.Text = (value / (double)txtMeter.Tag).ToString(); 
            }
        }
    }

Für diesen Beitrag haben gedankt: Nika