Autor Beitrag
cemolade
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 21.10.10 18:43 
Hey Leute
Ich programmiere ein TD in WPF und ich hab ein großes Problem.
Ich will dynamisch Images erstellen, am besten mit einem Array oderso...
.. WEIL die Geschoße von den Towern immer ein neues Ziel(Image[i]) finden müssen!

C#-Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
            if (image1.Margin.Left > image2.Margin.Left)
                image2.Margin = new Thickness(image2.Margin.Left + 1, image2.Margin.Top, image2.Margin.Right, image2.Margin.Bottom);
            if (image1.Margin.Left < image2.Margin.Left)
                image2.Margin = new Thickness(image2.Margin.Left - 1, image2.Margin.Top, image2.Margin.Right, image2.Margin.Bottom);

            if (image1.Margin.Top > image2.Margin.Top)
                image2.Margin = new Thickness(image2.Margin.Left, image2.Margin.Top + 1, image2.Margin.Right, image2.Margin.Bottom);
            if (image1.Margin.Top < image2.Margin.Top)
                image2.Margin = new Thickness(image2.Margin.Left, image2.Margin.Top - 1, image2.Margin.Right, image2.Margin.Bottom);


Und statt zB image1.Margin hätte ich gerne image[i].Margin


Mein 2. Problem ist etwas kleiner!
Ich würde gerne eine Schleife so lange laufen lassen, bis das Image die Position erreicht
zB

C#-Code:

while (image1.Margin == 12,68,0,0)
// code

das geht aber leider nicht. So zeigt er mir keiner Fehler an, aber es ist eine endlos Schleife und das Programm hängt sich auf:

C#-Code:
while (image1.Margin == image1.Margin = new Thickness(12,68,0,0))
//code

Da bekommt image1 immer die selben Koordinaten


Hoffentlich könnt ihr mir mit beiden Problemen helfen. Danke
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 21.10.10 19:27 
Hallo und
:welcome: im Forum!

Also zu dem ersten Problem: Wo ist da das Problem?
Habe ich nicht so ganz verstanden. Ich meine, die Images in ein Image[] oder eine List<Image> zu packen stellt ja nicht das große Problem dar. Aber vielleicht, wie Du das dann behandelst.

Zu dem 2. Punkt:
user profile iconcemolade hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden C#-Quelltext
1:
while (image1.Margin == 12,68,0,0)					

das geht aber leider nicht. So zeigt er mir keiner Fehler an, aber es ist eine endlos Schleife und das Programm hängt sich auf:
Das bezweifel ich mal sehr stark, dass es da keinen Fehler gab. Oder dass es sich überhaupt kompilieren ließ! Da hast Du echt einen schlauen Compiler, mein VS schluckt das nicht.

Und wenn überhaupt, dann müsste es
ausblenden C#-Quelltext
1:
while (image1.Margin != 12,68,0,0)					
heißen. Denn eine while-Schleife soll so lange durchlaufen werden, bis ein bestimmter Fall eintritt. Aber da die Schleife so eh nicht funktioniert...
Und der 2. Versuch davon:
user profile iconcemolade hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden C#-Quelltext
1:
while (image1.Margin == image1.Margin = new Thickness(12,68,0,0))					

Ja, Du weist ja auch IMMER image1.Margin den neuen Rand zu. Bei jedem Schleifenduchgang. Und das ist natürlich immer wahr.

Probier es mal so:
ausblenden C#-Quelltext
1:
2:
Thickness t = new Thickness(12,68,0,0);
while (image1.Margin != t)
Aber damm müssen ALLE äusseren Umrandungen von image1 stimmen, damit die Schleife abgebrochen wird.

LG, Marko
cemolade Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 21.10.10 20:43 
Bitte genauer lesen.
1. Ich will dynamisch(!) images erstellen. (ich weiss nicht wie das geht, desswegen frage ich, DA ist das Problem)

2. Ich habe nie behauptet dass es funktioniert, ganz im Gegenteil, ich habe gesagt, das geht leider nicht.
Wenn du schon helfen willst, dann bitte sieh dir das Problem genauer an, danke.

Ich werde mal versuchen das ganze Programm mit Canvas zu machen..

Trotzdem muss ich noch wissen wie man dynamisch Images erstellt + denen von einem Pfad ein Bild zuweist und anzeigen lässt an einer bestimmten Position.

Danke.
cemolade Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 23.10.10 00:26 
Ich habe es geschafft ein Image per Code zu erstellen.
Aber ich möchte machen, dass ein Images Array erstelle und jedes mal wenn ich auf einen Button klicke, dass ein neues generiert wird.

Das geht aber nur ohne Arrays, also wenn ich ein einzelnes erstelle.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
            Image[] img = new Image[5];
            BitmapImage bi = new BitmapImage();
            bi[imgint].BeginInit();
            bi[imgint].UriSource = new Uri(@"C:\Users\Anonym\Desktop\TowerDefense\bomb.jpg");
            bi[imgint].EndInit();
            img[imgint].Source = bi[imgint];
            img[imgint].Visibility = Visibility.Visible;
            canvas1.Children.Add(img[imgint]);
            Canvas.SetLeft(img[imgint], 10);
            Canvas.SetTop(img[imgint], 10);
            img[imgint].Width = 30;
            img[imgint].Height = 39;
            imgint++;


Wenn ich es ausführe kommt eine Fehlermeldung bei bi[imgint].BeginInit();

Fehlermeldung: NullReferenceException was unhandled
Object reference not set to an instance of an object.


Bitte um Hilfe!
Danke!
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Sa 23.10.10 11:12 
Hi,
user profile iconcemolade hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Quelltext
1:
2:
3:
4:
            Image[] img = new Image[5];
            BitmapImage bi = new BitmapImage();
            bi[imgint].BeginInit();
            ...
Wenn ich es ausführe kommt eine Fehlermeldung bei bi[imgint].BeginInit();

Fehlermeldung: NullReferenceException was unhandled
Object reference not set to an instance of an object.

Mich wundert, dass es sich überhaupt ausführen lässt, denn bi ist ein BitmapImage. Mein Visual Studio sagt dazu jedenfalls:
ausblenden Quelltext
1:
Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "System.Windows.Media.Imaging.BitmapImage" angewendet werden.					
Und das ist ja auch logisch.

Probier es mal so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
private List<Image> images = new List<Image>();

public void AddImage(Uri source)
{
  Image image = new Image();
  BitmapImage bi = new BitmapImage();
  bi.BeginInit();
  bi.UriSource = source;
  bi.EndInit();
  image.Source = bi;
  images.Add(image);   
}


Gruss, Marko
cemolade Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 23.10.10 12:28 
Hallo

Dein Quellcode in der public Funktion, funktioniert bei mir in meinem Button nicht. Er zeigt mir keine Fehler an, aber es erzeugt auch kein Image

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
            Image image = new Image();
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            bi.UriSource = new Uri(@"C:\Users\Anonym\Desktop\TowerDefense\BabyCreep-796005.jpg");
            bi.EndInit();
            image.Source = bi;
            //images.Add(image); // mit dem passiert nichts!
            canvas1.Children.Add(image); //so wie ich es gemacht habe schon, aber nur 1 bild, ich will mehrere erstellen!
            image.Width = 30;
            image.Height = 30;
            Canvas.SetTop(image, 50);
            Canvas.SetLeft(image, 50);
            image.Visibility = Visibility.Visible;


Wie kann ich mehrere erstellen? Und das mit der List hab ich nicht durchschaut, wie funktioniert das?

Danke!
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Sa 23.10.10 13:44 
Hi,

user profile iconcemolade hat folgendes geschrieben Zum zitierten Posting springen:
Er zeigt mir keine Fehler an, aber es erzeugt auch kein Image

Also, es wird schon ein Image erzeugt. Die Referenz darauf wird dann der List angehängt.

Eine List<> ist eine generische Collection. Mit einer List hast Du die Möglichkeit, Elemente hinzuzufügen, zu löschen, einzufügen... Aber für die Basics der Sprache C# hole Dir ein schlaues Buch.

Hast Du dir denn nach dem Aufruf der Prozedur den Inhalt von "images" angeschaut?

Also, wenn Du also eine Referenz eines Image-Objektes in der List hast, so kannst Du das Objekt ganz einfach per Index ansprechen und weiter damit arbeiten.
ausblenden C#-Quelltext
1:
2:
canvas1.Children.Clear();
canvas1.Children.Add(images.ElementAt(images.Count - 1));


Marko