Entwickler-Ecke

WinForms - Formular als Bild speichern


Doommortar - Sa 29.03.08 18:20
Titel: Formular als Bild speichern
Hallo

Ich möchte wenn auf dem Button "Speichern unter" geklickt wird das gesamte Formular als Bild (bmp, jpg, gif) gespeichert wird.

Wie geht das hat jemand ein Code für mich? Danke. :)

Gruß


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Sa 29.03.2008 um 17:21


JüTho - Sa 29.03.08 18:35

Wenn Du meinst, dass es aus dem Programm heraus (nicht: aus der IDE heraus) gespeichert werden soll, ist Formular/Control drucken oder als Bitmap speichern [http://www.mycsharp.de/wbb2/thread.php?threadid=29704] eine mögliche Lösung.

Es ist zwar für NET 2.0 (und NET 1.1) entwickelt, funktioniert damit natürlich auch unter NET 3.5; aber vielleicht gibt es bessere Lösungen.

Jürgen


Christian S. - Sa 29.03.08 18:48

Ich hätte es jetzt so gemacht, hab's gerade nur als Chrome-Quelltext, sollte aber einfach zu übersetzen sein:

Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
7:
  using bmp := new Bitmap(self.Width, self.Height) do
  begin
    using gr := Graphics.FromImage(bmp) do      
      gr.CopyFromScreen(new Point(self.Left, self.Top), new Point(0,0), new Size(self.Width, self.Height));

    bmp.Save('e:\screen.bmp');
  end;


Doommortar - Di 08.04.08 19:55

Hallo

Ich arbeite immer noch an dem Problem. Zur Zeit möchte ich das aktive Subfenster in die Zwischenablage speichern. Mit folgenden Code bekomme ich immer das Subfenster inkl. Hauptfenster gespeichert.

Was muß ich verändern damit ich nur das Subfenster in die Zwischenablage bekomme? :roll:


C#-Quelltext
1:
2:
3:
4:
5:
6:
Graphics myGraphics = this.ActiveMdiChild.CreateGraphics();
Size s = ActiveForm.Size;
myBitmap = new Bitmap(s.Width, s.Height, myGraphics);
Graphics memoryGraphics = Graphics.FromImage(myBitmap);
memoryGraphics.CopyFromScreen(ActiveForm.Location.X, ActiveForm.Location.Y, 00, s);
Clipboard.SetDataObject(myBitmap);


Gruß

Moderiert von user profile iconChristian S.: Chrome- durch C#-Tags ersetzt


JüTho - Mi 09.04.08 09:21

Hallo,

mit MDI hatte ich mich nur vor vielen Jahren mal befasst. Für mich sieht es so aus, dass Du fälschlich ActiveForm verwendest (für Size und für Location). Ich schlage vor, auch dafür ActiveMdiChild zu benutzen. Jürgen

PS. Dein Quelltext ist C#, dann benutze bitte auch diese Code-Markierung.