Entwickler-Ecke

Basistechnologien - Hexadezimalumrechnung in einer Methode


Melfice - Fr 03.03.17 23:44
Titel: Hexadezimalumrechnung in einer Methode
Hallo liebe Forum Mitglieder,

ich habe die Tage angefangen einen Farbmischer zu Programmieren als Projekt für meine Schule. Dieser soll die Farbwerte von 0-255 in txt_boxen anzeigen und diese angezeigten Werte in eine Hexadezimalzahl umrechnen. Dafür würde ich gerne eine Methode nutzen, da ich die Rechnung sonst 3 mal machen müsste, aber leider schaffe ich das ohne Hilfe nicht.
Mein bisheriger Programmcode ohne Methode war (ohne Methode):


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
private void vScrollBarRed_Scroll(object sender, ScrollEventArgs e)
        {
            scrollwertred = vScrollBarRed.Value;
            scrollwertredstring = Convert.ToString(scrollwertred);
            LabelRed.Text = scrollwertredstring;
            ShapeRed.FillColor = Color.FromArgb(vScrollBarRed.Value, 00);
            ShapeMix.FillColor = Color.FromArgb(vScrollBarRed.Value, vScrollBarGreen.Value, vScrollBarBlue.Value);
            hexred = Convert.ToString(scrollwertred, 16);
            LabelMix.Text = hexred + hexgreen + hexblue;
        }


Mein bisheriges Programm mit Methode ist:


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:
 private void vScrollBarGreen_Scroll(object sender, ScrollEventArgs e)
        {
            scrollwertgreen = vScrollBarGreen.Value;
            scrollwertgreenstring = Convert.ToString(scrollwertgreen);
            LabelGreen.Text = scrollwertgreenstring;
            ShapeGreen.FillColor = Color.FromArgb(0, vScrollBarGreen.Value, 0);
            ShapeMix.FillColor = Color.FromArgb(vScrollBarRed.Value, vScrollBarGreen.Value, vScrollBarBlue.Value);
            hexgreen = hexrechnung(scrollwertgreen);
            LabelMix.Text = hexred + hexgreen + hexblue;
        }

        string hex;
        private string hexrechnung(int ScrollValue)
        {
            do
            {
                Rest = ScrollValue % 16;
                Speicher[Zaehler] = Rest;
                Zaehler = Zaehler + 1;
                ScrollValue = (ScrollValue - Rest) / 16;
            } while (ScrollValue != 0);
            do
            {
                Zaehler = Zaehler - 1;
                Zwischenablage = Speicher[Zaehler];
                if (Zwischenablage > 90)
                {
                    switch (Zwischenablage)
                    {
                        case 10:
                            Zwischenablage2 = "A";
                            break;

                        case 11:
                            Zwischenablage2 = "B";
                            break;

                        case 12:
                            Zwischenablage2 = "C";
                            break;

                        case 13:
                            Zwischenablage2 = "D";
                            break;

                        case 14:
                            Zwischenablage2 = "E";
                            break;

                        case 15:
                            Zwischenablage2 = "F";
                            break;
                    }
                     return hex = hex + Zwischenablage2;
                }
                else
                {
                    return hex;
                }

            } while (Zaehler != 0);


Vielen dank im voraus.
Gruß Melfice.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Fr 03.03.2017 um 23:26


Th69 - Sa 04.03.17 00:25

Hallo,

leider kann ich aus deinem Beitrag nicht die genaue Fragestellung herauslesen.
Was funktioniert nicht so, wie du es gerne haben möchtest?
Ich sehe nur, daß du statt Convert.ToString nun die eigene Methode hexrechnung aufrufst (welche nicht sonderlich elegant programmiert ist).


Ralf Jansen - Sa 04.03.17 13:50

Auch ich vermisse eine Frage.

Aber ein paar Anmerkungen die dich vielleicht in die richtige Richtung schubsen hätte ich schon.

- Man kann einen Event auch an alle 3 Controls hängen. Du musst nicht 3 verschiedene Scroll Events ausprogrammieren.
- Falls du tatsächlich 3 Scrollbar benutzt fände ich das verwirrend. Eine Trackbar ist letztlich logisch nichts anderes aber deren UI entspricht doch eher das was ein User erwartet und schneller erkennt was gemeint ist.
- Du versuchst da selbst irgendwas zu rechnen. Alles was du brauchst gibt es bereits im Framework und da muss eher nicht gerechnet werden (ich würde es ehe nicht rechnen nennen. Ob es nun dezimal oder hexadezimal ist. Da hat sich kein Wert geändert sondern nur dessen Darstellung). Die Klassen Color, ColorTranslator und die Überladungen der ToString Methode aus dem Framework liefern eigentlich bereits alles was man brauchen könnte.


Melfice - Sa 04.03.17 15:51

Ich bekomme aktuell wenn ich das Programm ausführe eine Fehlermeldung wen ich zu oft mit der Scrollbargreen scrolle. Das ist die Fehlermeldung: Ausnahmefehler des Typs "System.IndexOutOfRangeException" ist in Farbmischer.exe aufgetreten. Der Fehler wird mir in der Zeile "Speicher[Zaehler] = Rest;" angezeigt. Leider weiß ich nicht was gemeint ist und wie ich den Fehler lösen kann. Deswegen wollte ich fragen ob einer hier im Forum vielleicht eine Idee hat.
Außerdem bekomme ich wenn ich mit Grün scrolle nur sehr viele Buchstaben die sich häufen anstatt den Hexwert des momentanen Wertes von Grün. Da weiß ich leider auch nicht was Falsch ist.
Im Anhang habe ich mal die Form hinterlegt bevor sie Abstürzt.
Ich hoffe man kann jetzt bissen mehr mit meiner Problemstellung anfangen.
Gruß Melfice

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Sa 04.03.17 17:33

Welchen Wert hat denn die Variable Zaehler? Und warum ist diese global - dadurch wird diese nach dem Methodenaufruf nicht mehr zurückgesetzt.
Aber wie Ralf und ich schon schrieben, ist es nicht nötig, eine eigene Methode für die Hex-Darstellung zu schreiben, da es sie eben schon gibt - oder ist das eine Aufgabe?


Melfice - Sa 04.03.17 21:52

Zaehler hat einen Wert von Null am Anfang.
Es wäre besser wenn ich es in eine Methode mache weil mein Lehrer sowas gerne sieht.


Delete - So 05.03.17 01:57

- Nachträglich durch die Entwickler-Ecke gelöscht -