Autor Beitrag
Melfice
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 03.03.17 22:44 
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):

ausblenden 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:

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:
 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3897
Erhaltene Danke: 794

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Fr 03.03.17 23: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4345
Erhaltene Danke: 877


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 04.03.17 12: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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 04.03.17 14: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
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3897
Erhaltene Danke: 794

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Sa 04.03.17 16: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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 04.03.17 20: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.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 05.03.17 00:57 
Wenn ich deine Grafik richtig deute, soll aus 3 Werten (r, g, b) eine Farbe entstehen.
Dafür gibt es auch schon eine fertige Methode, nämlich Color.FromRgb() :(
Du könntest dennoch etwas Nützliches daraus machen, einen "Farb-Picker".
Dabei ermittelst du die Farbwerte unter der Maus(Position) und lässt diese umrechnen, so ca.:

colorPicker
Einloggen, um Attachments anzusehen!
_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)