Autor Beitrag
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Do 15.07.10 00:44 
Ich habe jetzt mal folgendes initialisiert:

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:
private void timer1_Tick(Object myObject, EventArgs myEventArgs)
        {
            if (pictureBox1.Location == new System.Drawing.Point(185100))
            {
                Thread.Sleep(1000);
                pictureBox1.Left = pictureBox1.Left + 1;
            }

            else if(pictureBox1.Location == new System.Drawing.Point(335100))
            {
                Thread.Sleep(1000);
                pictureBox1.Left = pictureBox1.Left + 1;
            }

            else if (pictureBox1.Location == new System.Drawing.Point(400100))
            {
                for (int i = 1; i <= 36; i++)
                {
                    pictureBox1.Top = pictureBox1.Top - 1;
                    pictureBox1.Left = pictureBox1.Left + 1;
                }
            }

            else if (pictureBox1.Location == new System.Drawing.Point(55080))
            {
                Thread.Sleep(1000);
                timer1.Enabled = false;
            }

           else
            { pictureBox1.Left = pictureBox1.Left + 1; }
        }
        }
    }


Ein Objekt, welches an 3 Punkten halten sollte. Dies macht es aber nicht. Das Objekt startet und fährt bis zum Punkt 185/100 - dort wartet es 1 Sekunde - dann fährt es weiter bis zu einem zweiten Haltepunkt - nach diesem wechselt es auf eine andere mit GDI+ gezeichnete Linie. Das funktioniert soweit. Danach sollte es bei x=550/y=80 stoppen und der Timer enden - dies funktioniert aber nicht - das Objekt fährt ganz normal weiter. Ich habe schon so ziemlich alle y-Werte (auch die, die eigentlich gar nicht möglich sein dürften) ausprobiert, aber die PictureBox fühlt sich dadurch nicht angesprochen.
Weiters hätte ich gerne, dass die PictureBox an jedem Haltepunkt für die Dauer des Haltes das Bild wechselt. Nach dem Halt - beim Anfahren, soll das Bild wieder in den ursprünglichen Zustand gehen. Die gif-Animation existiert schon, aber es gibt ein anderes Problem:
ausblenden C#-Quelltext
1:
2:
FileStream imageStream = new FileStream("C:\\Users\\vista\\xxx.gif", FileMode.Open, FileAccess.Read);
pictureBox1.Image = System.Drawing.Image.FromStream(imageStream);

Wenn ich das Bild in einer PictureBox während eines Haltes ersetzen will, dann wird die gif-Animation nicht abgespielt - das resultiert denke ich daraus, weil während des Haltes ein "Thread.Sleep(1000);" existiert. Kann man dies irgendwie umgehen?

lg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 15.07.10 04:18 
user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
Danach sollte es bei x=550/y=80 stoppen und der Timer enden - dies funktioniert aber nicht - das Objekt fährt ganz normal weiter. Ich habe schon so ziemlich alle y-Werte (auch die, die eigentlich gar nicht möglich sein dürften) ausprobiert, aber die PictureBox fühlt sich dadurch nicht angesprochen.
Wozu gibt es eigentlich den Debugger? :zwinker:

Na gut, nehmen wir mal den Brain Debugger: :mrgreen:
Also, nachdem du bei (400, 100) warst gehst du in einer Schleife auf (436, 64). Dann wartest du auf (550, 80), die PictureBox ist aber 16 Pixel weiter oben. ;-)

user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
das resultiert denke ich daraus, weil während des Haltes ein "Thread.Sleep(1000);" existiert. Kann man dies irgendwie umgehen?
Ja, kein Sleep benutzen, das hat da nix zu suchen...
Du hast einen Timer um gerade keine Schleifen oder Wartezeiten zu benötigen. Du machst einfach alles was zu diesem Zeitpunkt gemacht werden muss. Mehr nicht. Und wenn du eine Sekunde nichts machen willst, dann darf dein Timer-Eventhandler eben eine Sekunde lang nichts machen.

Sprich du kannst eine Variable mit der Anfangszeit des Haltes setzen und erst nach Ablauf der Sekunde führst du in deinem Event wieder etwas aus.
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Do 15.07.10 07:19 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Also, nachdem du bei (400, 100) warst gehst du in einer Schleife auf (436, 64). Dann wartest du auf (550, 80), die PictureBox ist aber 16 Pixel weiter oben. ;-)

Ja, das wäre zwar logisch und nachvollziehbar, aber es funktioniert trotzdem nicht. Ich habe dann noch zur Sicherheit die Werte 50, 55, 60, 65, 70, 75, 80 eingesetzt, aber die PictureBox wird durch keine dieser eingesetzten y-Werte angesprochen. Beim Debugging (bin nicht allzu geübt darin), glaube ich, dass der Debugger erst gar nicht in diese eine else-if-Anweisung reingeht - alle anderen else-if-Anweisungen inkl. der else-Anweisung werden aber "benutzt".

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Sprich du kannst eine Variable mit der Anfangszeit des Haltes setzen und erst nach Ablauf der Sekunde führst du in deinem Event wieder etwas aus.

Das ist eine sehr gute Idee! Ich habe nun in alle else-if-Anweisungen das "Thread.Sleep" durch "timer1.Interval = 1000;" ersetzt. Die else-Anweisung hat ein "timer1.Interval = 25;" erhalten. Durch "timer1.Interval" ist es mir ja jetzt sogar möglich, Geschwindigkeiten abschnittsweise zu regeln. :shock: :D

Angenommen man hat zwei ComboBoxen. In einer ComboBox gibt der User den Startpunkt (z.B. eine Station) der PictureBox bekannt, in der anderen ComboBox wird der Zielort (ebenfalls eine Station) der ComboBox bestimmt.
Das ganze würde dann so aussehen:
ausblenden 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:
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) // Startorteingabe
            {     
            if (comboBox1.SelectedItem.ToString() == "Haltepunkt1")
            {
                ...?
            }
            else if (comboBox1.SelectedItem.ToString() == "Haltepunkt2")
            {
                ...?
            }
            else if (comboBox1.SelectedItem.ToString() == "Haltepunkt3")
            {
                ...?
            }
            
            private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) // Zielorteingabe
            {
            if (comboBox2.SelectedItem.ToString() == "Haltepunkt1")
            {
                ...?
            }
            else if (comboBox2.SelectedItem.ToString() == "Haltepunkt2")
            {
                ...?
            }
            else if (comboBox2.SelectedItem.ToString() == "Haltepunkt3")
            {
                ...?
            }

Doch habt ihr eine Idee, wie man das nun in verwertbare Information konvertieren könnte? Also z.B. die Information aus ComboBox1 und ComboBox2 kombinieren und daraus einen Schluss ziehen. Es wäre dann ganz nett, wenn der User eingibt, dass die PictureBox von Haltepunkt1 nach Haltepunkt3 fahren soll, dass diese dann das auch macht. Ich hoffe das ganze wird dann nicht all zu umfangreich. :? Aber vielleicht ist eine ComboBox das falsche Medium dazu? Wäre eine Textbox in die der User selbst seine gewünschte Route eingibt besser? Hier hätte man nämlich gleich beide Informationen (Startort und Zielort) in einem Medium vereint. Dann könnte man mit einer if-else-Abfrage die nötigen Schlüsse aus der gewonnenen Information ziehen.
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Do 15.07.10 23:20 
Im weiteren Verlauf habe ich nun noch einen "interne Zeitanzeige" hinzugefügt. Diese soll die Uhrzeit in Stunden und Minuten im Zeitraffer anzeigen. Dabei bin ich gleich auf mehrere Probleme gestoßen. Das mit Abstand größte Problem ist die Performance. Hier mal der Code:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
 private void timer1_Tick(object sender, EventArgs e)
        {
            for (int j = 0; j < 1441; j++)
            {
                for (int i = 0; i < j; i++)
                {

                    int value1 = 1 + i;
                    double value2 = 1 + i;
                    int time = value1 / 60;
                    double time2 = (value2 / 60);
                    double time3 = ((time2 - time) * 100);
                    double time4 = (time3 * 0.6);
                    string time5 = String.Format("{0:F0}", time4);

                    textBox1.Text = time.ToString();
                    textBox2.Text = time5.ToString();
                }
                textBox1.Update();
                textBox2.Update();
            }
        }


Dabei werden sowohl die Stunden als auch die Minuten in einer eigenen TextBox ausgegeben. Ich vermute, dass das hohe "i" von 1441 die Performanceprobleme verursacht. Mein mit einem zweiten Timer gesteuertes Objekt erreicht kaum mehr eine Geschwindigkeit - selbst bei Interval=10.
Warum überhaupt eine interne Zeit? > Zukünftig habe ich vor, das Objekt zu einer bestimmten Zeit (z.B. 20:22h) starten zu lassen. Dies sollte in Zeitraffer (1 Tag = ~10 Minuten) passieren.
Das zweite Problem (ebenfalls Performance): Die Uhrzeit vergeht anfangs sehr schnell, doch mit vortschreitender Uhrzeit (= hohes "i") dauert eine Stunde immer länger. Kann man hier nicht eine halbwegs (zumindest für das Auge) konstante Geschwindigkeit halten?
Danke schon mal!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 15.07.10 23:59 
user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
selbst bei Interval=10
Selbst wenn so ein kleines Intervall möglich wäre, wie soll denn ein Mensch 1000 / 10 = 100 Aktualisierungen pro Sekunde sehen?

Fazit: Mach das Intervall höher und überspringe stattdessen Zahlen bei der Anzeige.

Außerdem hast du offenbar das Konzept eines Timers immer nicht nicht verstanden, sonst würdest du keine Schleife in das Event schreiben...
Es geht doch gerade darum, dass im Event immer der aktuelle Schritt durchgeführt wird. Ohne Schleife.
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Fr 16.07.10 00:07 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
..., sonst würdest du keine Schleife in das Event schreiben...
Es geht doch gerade darum, dass im Event immer der aktuelle Schritt durchgeführt wird. Ohne Schleife.

Stimmt - ein Denkfehler von mir - das macht natürlich absolut keinen Sinn! Ich habe den Timer jetzt rausgenommen - es funktioniert zwar - aber die Performanceprobleme gibt es nach wie vor.

Edit:
Habe jetzt alles nocheinmal überdacht und habe nun doch die Entscheidung getroffen, einen Timer zu nehmen - die Performance passt jetzt auch und stellt absolut kein Problem mehr dar! Damit bin ich meinem Ziel schon einmal einen erheblichen Schritt weiter gekommen. :lol: Eine Frage hätte ich jedoch noch dazu: Ist es möglich, dass die Uhrzeit statt in diesem Format:
11:4 oder 3:29 >> in diesem Format: 11:04 oder 03:29 angezeigt wird?

ausblenden 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:
        int time = 0;
        int erg = 0;

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (textBox1.Text == "23:59")
            {
                timer1.Enabled = true;
            }

            else
            {
                int time2 = 1;

                erg = time + time2;
                time = erg; 

                int basiswert = erg / 60;
                double basiswert2 = erg % 60;

                string basiswert3 = String.Format("{00:F0}:", basiswert);
                string basiswert4 = String.Format("{00:F0}", basiswert2);

                textBox1.Text = basiswert3.ToString() + basiswert4.ToString();
                textBox1.Update();
            }
            
        }
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 16.07.10 06:12 
user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
Habe jetzt alles nocheinmal überdacht und habe nun doch die Entscheidung getroffen, einen Timer zu nehmen - die Performance passt jetzt auch
So war meine Aussage auch gemeint. ;-)

user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
Ist es möglich, dass die Uhrzeit statt in diesem Format:
11:4 oder 3:29 >> in diesem Format: 11:04 oder 03:29 angezeigt wird?
Ja.

Willst du auch wissen wie? ;-)
ausblenden C#-Quelltext
1:
2:
                string basiswert3 = String.Format("{0:00}:", basiswert);
                string basiswert4 = String.Format("{0:00}", basiswert2);
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Fr 16.07.10 16:55 
Die PictureBox erscheint nun um z.B. 00:10 Uhr (interne Zeit) bei Pixel 775/527 und bewegt sich entlang der x-Achse in Richtung links. Ab einem bestimmten Punkt auf der x-Achse, soll sich die PictureBox aber entlang der y-Achse nach oben bewegen.
Im Prinzip soll sich die PictureBox ja nur bei y = 527 nach links bewegen. Gibt es eine Möglichkeit statt nur einem x-Wert gleich ein ganzes Spektrum an x-Werten anzugeben? Also ich bräuchte z.B. von x=775 bis x=620 oder aber von x= +unendlich bis x=620 ginge auch. Gibt es eine Möglichkeit dies so anzugeben (statt dem xxx eben dieses Spektrum an x-Werten)?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
private void timer01_Tick(object sender, EventArgs e)
        {
            if (textBox1.Text == "00:10")
            {
                pictureBox01.Visible = true;
                pictureBox01.Location = new System.Drawing.Point(775527);
            }

            else if (pictureBox01.Location == new System.Drawing.Point(xxx, 527))
            {
                time01.Interval = 100;
                pictureBox01.Left = pictureBox01.Left - 1;
            }
            else
            {
                timer01.Interval = 100;
                pictureBox01.Top = pictureBox01.Top - 1;
            }
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 16.07.10 19:31 
Wie wäre es, wenn du dir die beiden Werte der Location getrennt anschaust? ;-)
Es gibt in der Mathematik durchaus auch "größer als" und sowas, genauso gibt es das auch in C# als Operatoren. Denn du willst ja wissen, ob der Wert größer als ein bestimmter und kleiner als ein anderer ist (zum Beispiel).

Für diesen Beitrag haben gedankt: dubstep
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Fr 16.07.10 20:11 
DANKE vielmals! :D

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
else if ((pictureBox01.Location.X >= 622) && (pictureBox01.Location.Y == 527))
            {
                timer01.Interval = 100;
                pictureBox01.Left = pictureBox01.Left - 1;
            }


Edit:
Ist es ratsam, wenn sich zwei PictureBoxen gleichzeitig bewegen sollen, einen zweiten Timer zu nehmen? Ich habe versucht beide PictureBoxen durch einen Timer bewegen zu lassen, aber so wirklich gut funktioniert das nicht.
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Mo 19.07.10 14:25 
Hmm - hat denn niemand eine Idee? :(
Gibt es eine Möglichkeit 3 Timer gleichzeitig laufen zu lassen (1 Timer für die interne Zeit, ein zweiter Timer, welcher dafür sorgt, dass sich das Objekt bewegt (mit 24 if-else-Abfragen :? ) und ein dritter Timer, welcher genau die selbe Aufgabe wie der zweite Timer nur für ein weiteres Objekt erfüllt.
Ich weiß jetzt nicht ob dass die Grenzen von GUI sprengt, aber mein Ziel wäre es, rund 50 Objekte oder PictureBoxen gleichzeitig bewegen zu lassen. Gibt es da vielleicht einen Ansatz, welcher die Performance nicht so sehr belastet?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 19.07.10 18:35 
user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe versucht beide PictureBoxen durch einen Timer bewegen zu lassen, aber so wirklich gut funktioniert das nicht.
Dann lass es uns verbessern ;) . Es genügt auf jeden Fall ein einziger Timer und wenn du die Punkte geschickt in eine Liste ablegst, wirst du auch keine 24 ifs benötigen.

_________________
>λ=


Zuletzt bearbeitet von Kha am Mo 19.07.10 22:50, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: dubstep
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Mo 19.07.10 21:03 
Ich hoffe das reicht so: =)
Im Anhang findet ihr die Datei - falls die zwei Bilder nicht angezeigt werden - ich habe beide ebenfalls in die Projektmappe geladen. Diese findet ihr im Projektmappen-Explorer. Ein Bild ist für den Hintergrund der Form, das andere Bild für die PictureBox.
Vielen Dank nochmal und bitte nicht über das Projekt wundern. :wink:
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 19.07.10 22:54 
Das war vielleicht die falsche Wortwahl :) . Ich dachte eher daran, dass du uns vorstellst, was "nicht so wirklich gut" funktioniert, und es dann mit Hinweisen von uns selbst lösen kannst. Das ist jedenfalls grob der Gedanke hinter diesem Forum ;) .

_________________
>λ=
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Mi 21.07.10 00:43 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
..., was "nicht so wirklich gut" funktioniert, und es dann mit Hinweisen von uns selbst lösen kannst. Das ist jedenfalls grob der Gedanke hinter diesem Forum ;) .

Am Versuch nur einen Timer für beide PictureBoxen zu verwenden bin ich leider gescheitert. Dieser Fehler erscheint:
"Der Typ "WindowsFormsApplication.FormSimulation" definiert bereits einen Member namens "timer1_Tick" mit den gleichen Parametertypen."
Mir ist zwar klar was das nun heißt (bei Timer1 kann man unter Ereignis zwischen zwei Verhalten - beide nennen sich Timer1_Tick - wählen, es darf aber nur ein Verhalten ausgewählt werden), aber wie kann man das Problem lösen?
Ein Lösungsansatz wäre, dass die Bewegung in Abhängigkeit vom Timer durch zwei verschiedene Ereignisse (z.B. einmal PictureBox_Click und einmal timer1_Tick) ausgelöst wird, aber das will ich nicht. Bei beiden Pictrue-Boxen soll die Bewegung durch das selbe Ereignis ausgelöst werden.
Durch die vorgegebene Oberfläche (wo man einfach nur das Verhalten auswählen braucht) geht es jedenfalls nicht, aber vielleicht gibt es eine Möglichkeit den Code manuell einzugeben und zwar so, dass der Timer beide Verhalten annimmt. Bei den Eigenschaften eines Buttons funktioniert dies ja ähnlich - man kann die Eigenschaften (z.B. Location) über die vorgefertigte Oberfläche auswählen oder man gibt sie manuell mittels Code vor. Bei der manuellen Eingabe hat man selbstverständlich mehr Freiheiten.

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Es genügt auf jeden Fall ein einziger Timer und wenn du die Punkte geschickt in eine Liste ablegst, wirst du auch keine 24 ifs benötigen.

Wie ist das mit dieser Liste gemeint - eine LinkedList wird es wohl nicht sein?!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 21.07.10 13:01 
user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
Bei beiden Pictrue-Boxen soll die Bewegung durch das selbe Ereignis ausgelöst werden.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
void timer1_Tick(...)
{
  CodeUmDieErstePictureBoxZuBewegen();
  CodeUmDieZweitePictureBoxZuBewegen();
}
:gruebel: ?

user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
Wie ist das mit dieser Liste gemeint - eine LinkedList wird es wohl nicht sein?!
Nun, eine Liste wäre das auch, aber normalerweise würde ich eher zu einer List<T> oder einem Array tendieren. Wie das nun genau aussehen muss, kann ich nicht sagen, ohne den exakten gewünschten Bewegungsablauf zu kennen.

_________________
>λ=
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: Mi 21.07.10 13:47 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile icondubstep hat folgendes geschrieben Zum zitierten Posting springen:
Bei beiden Pictrue-Boxen soll die Bewegung durch das selbe Ereignis ausgelöst werden.
ausblenden C#-Quelltext
1:
2:
void timer1_Tick(...)
...
:gruebel: ?
Achso - stimmt, so funktioniert das. Ich hatte vorhin zwei Funktionen mit dem selben Namen erstellt, das geht natürlich nicht - keine Ahnung wie ich überhaupt auf solch eine absurde Idee gekommen bin!? Jedenfalls habe ich jetzt daraus eine wichtige Konsequenz gezogen. Ich habe nun 4 Buttons (ohne lange if-else-Abfrage) gleichzeitig bewegen lassen und die Performance wird in keiner weise gstört - das heißt, die Reduktion auf einen Timer bringt (wie du es mir geraten hast) schon einmal Abhilfe. =)

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
... eher zu einer List<T> oder einem Array tendieren. Wie das nun genau aussehen muss, kann ich nicht sagen, ohne den exakten gewünschten Bewegungsablauf zu kennen.
Mit gewöhnlichen Lists habe ich noch nicht gearbeitet. Ich denke, ich werde es einmal in Form eines Arrays versuchen. Wäre ein Dictionary auch eine mögliche Option?
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: So 08.08.10 17:29 
Bezüglich der "Performanceprobleme" habe ich einen tollen Tipp bekommen. :lol:
Zwar mögen die vielen if-else-Abfragen vielleicht hinderlich sein, aber sie sind nicht ausschließlich der Grund für die Probleme. Umgehen lässt sich das alles ganz einfach und zwar mit "Double Buffering":
msdn.microsoft.com/e...ibrary/ms229622.aspx
Dank "Double Buffering" ist es nun möglich ohne Probleme 20 PictureBoxen zeitgleich in einer Form bewegen zu lassen - trotz der vielen if-else-Abfragen.
Soweit ist dieses Problem mal gelöst. :)

Eine kurze Frage noch: Ich habe eine Textbox. In diese Textbox schreibt der User Zahlen (werden aber trotzdem als string angesehen). Nun habe ich eine zweite Textbox. In dieser soll der Text der ersten Textbox und zusätzlich noch ein immer gleich bleibender Text angezeigt werden.
Das ganze sieht dann zum Beispiel so aus:
Eingabe User Textbox1: "3320"
User klickt auf Button
Ausgabe Textbox2: "Die Zahl ist 3320"
..., wobei "Die Zahl ist" konstant und "3320" je nach Benutzereingabe variabel ist.

ausblenden C#-Quelltext
1:
2:
3:
4:
 private void button1_Click(object sender, EventArgs e)
        {
                       textBox2.Text = ("Die Zahl ist {0}", textBox1.Text);
        }

Irgendwie hat das mit Console.WriteLine immer so toll geklappt, aber da dies ja hier keinen Sinn mehr hätte ... :(
Ich habe schon so viel probiert ... aber es funktioniert einfach nicht.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 08.08.10 17:47 
Für neue Fragen, die nichts mehr mit dem alten Thema zu tun haben, bitte einen neuen Thread aufmachen. Vielleicht genügt dir aber schon dieser Wink :) : string.Format.

_________________
>λ=
dubstep Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

Win XP, Win 7
C# (VS 2010)
BeitragVerfasst: So 08.08.10 18:37 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Für neue Fragen, die nichts mehr mit dem alten Thema zu tun haben, bitte einen neuen Thread aufmachen. Vielleicht genügt dir aber schon dieser Wink :) : string.Format.

Danke - hat wunderbar funktioniert. Ich hatte es zuvor nur mit ".toString" und "Convert.ToString" versucht, aber auf "string.Format" wäre ich nicht gekommen.
ausblenden C#-Quelltext
1:
textBox2.Text = string.Format("Die Zahl ist {0}", textBox1.Text);