Entwickler-Ecke

WinForms - Bilder zeichnen


sharpx - Do 08.01.09 12:34
Titel: Bilder zeichnen

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
void Button1Click(object sender, EventArgs e)
    {
      StreamReader sr = new StreamReader("pc.jpg");
      Bitmap bild = new Bitmap(sr.BaseStream);
      sr.Close();
      
      pb.Image = bild;
      pb.SizeMode= PictureBoxSizeMode.AutoSize;
      
      
    }


Kann mir einer sagen wie ich jetzt z.b. das bild auf den koordinaten x=120 und y=200 positioniere?

Oder hat wer ein gutes Tutorial hier für?


Danke schon mals


JüTho - Do 08.01.09 12:42

So langsam vergeht mir die Lust, Dir zu antworten.

Zitat:
Kann mir einer sagen wie ich jetzt z.b. das bild auf den koordinaten x=120 und y=200 positioniere?

Das klingt, als wenn Du die Bitmap innerhalb der PictureBox positionieren willst. Das geht so überhaupt nicht, wie aus der SDK-Doku/MSDN zu erkennen ist: Es gibt keine Eigenschaft der PictureBox, die eine solche Position verwendet; aber das von Dir verwendete SizeMode steuert genau das, und nur diese Möglichkeit hast Du.

Wenn Du aber die PictureBox im Formular positionieren willst, dann hat das nichts mit dem gezeigten Code zu tun. Schau in die Designer.cs, wie das geht.

Jürgen

PS. Der Titel "Bilder zeichnen" wäre etwas ganz anderes, siehe Paint-Ereignis. Du willst ein Bild anzeigen.

PS 2. Ich brauche zum Laden einer Datei nur eine Zeile, nicht drei:

C#-Quelltext
1:
Bitmap bild = new Bitmap("pc.jpg");                    

Auch dafür ist die SDK-Doku/MSDN hervorragend geeignet, nämlich um bessere Alternativen zu finden.


sharpx - Do 08.01.09 12:57

okay wie kann ich die picture box positionieren?
erklär mal, y0!

Moderiert von user profile iconChristian S.: Beiträge zusammenfasst


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
PictureBox pb = new PictureBox();
      pb.Height=100;
      pb.Width=100;
      pb.Top = 100;
      pb.Left = 100;
      pb.Image=Image.FromFile("pc.jpg");
      this.Controls.Add(pb);


passt das? y0!

Moderiert von user profile iconChristian S.: Beiträge zusammengefastt


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
void pb_click(object sender, EventArgs e)
    {
      MessageBox.Show("bam");
    }
    
    void Button1Click(object sender, EventArgs e)
    {
      PictureBox pb = new PictureBox();
      pb.Height=100;
      pb.Width=100;
      pb.Top = 100;
      pb.Left = 100;
      pb.Image=Image.FromFile("pc.jpg");
    
      this.Controls.Add(pb);
    }


Warum geht das nicht?
Sollte doch passen oder?

Moderiert von user profile iconChristian S.: Beiträge zusammengefasst


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
void pb_click(object sender, EventArgs e)
    {
      MessageBox.Show("bam");
    }
    
    void Button1Click(object sender, EventArgs e)
    {
      PictureBox pb = new PictureBox();
      pb.Height=100;
      pb.Width=100;
      pb.Top = 100;
      pb.Left = 100;
      pb.Image=Image.FromFile("pc.jpg");
      this.pb.Click += new System.EventHandler(this.pb_click);
      this.Controls.Add(pb);
    }


Habs auch mti nem eventhandler versucht.
geht auch nicht.

soltle das net passen?


JüTho - Do 08.01.09 13:35

In allen diesen Varianten ist pb eine neue lokale Variable innerhalb der betreffenden Methode. Dazu habe ich schon hier [http://www.c-sharp-forum.de/viewtopic.php?p=543361#543361] geschrieben:
Zitat:
Seltsam kommt mir vor, dass Du in der xxx-Methode die yyy neu deklarierst und erzeugst und durch Übergabe als zzz willst, dass sie auch danach noch existiert. Das würde ich auf jeden Fall vermeiden; wenn die yyy im Formular insgesamt benötigt wird (nämlich als zzz), sollte sie auch dort deklariert und erstellt werden. Nur das Zuweisen ... würde in die xxx-Methode passen.

Wenn Du aber eine schon vorhandene PictureBox neu positionieren willst, dann musst Du doch nur Left/Top neu zuweisen und (damit es sofort sichtbar wird, wenn das noch nicht genügt) Refresh oder Invalidate aufrufen.

Was soll eigentlich PictureBox.Click? Das hat doch nichts mit der Positionierung der PictureBox zu tun, sondern sorgt dafür, dass das System künftig auf ein Klicken auf diese PictureBox reagiert. Du willst im Button-Click eine (vermutlich die vorhandene) PictureBox anders positionieren als bisher; dann beschränke Dich doch darauf.

Hast Du Dich inzwischen mit den Grundlagen von Ereignissen beschäftigt? Da habe ich noch Zweifel, siehe z.B. OpenBook Kap.13 ff. [http://openbook.galileocomputing.de/visual_csharp/].

Jürgen


sharpx - Do 08.01.09 13:39

Nein ich hatte REcht.
Der einzige Fehler war das

C#-Quelltext
1:
this.pb.Click += new System.EventHandler(this.pb_click);                    


welches ich durch

C#-Quelltext
1:
      pb.Click += new System.EventHandler(pb_click);                    


ersetzt habe.
Klickt man nun auf die Picture Box, kommt auch die MsgBox :=)


JüTho - Do 08.01.09 13:44

user profile iconsharpx hat folgendes geschrieben Zum zitierten Posting springen:
Nein ich hatte REcht.

Wie schön für Dich. Und wodurch ist dieser Fehler entstanden? Durch unpassende Verwendung der Variablen pb. (Dieses Problem mit falschem this gab es vor wenigen Tagen schon einmal.) Jürgen


miniC# - Do 08.01.09 15:21

du lausbub ohne manieren ! *mitm finger wedel*


sharpx - Do 08.01.09 16:43

user profile iconminiC# hat folgendes geschrieben Zum zitierten Posting springen:
du lausbub ohne manieren ! *mitm finger wedel*

lol? :D