Laden...

Picturebox verdeckt Kindformulare?

Erstellt von MillionsterNutzer vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.161 Views
M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 18 Jahren
Picturebox verdeckt Kindformulare?

Hi,

habe ein Hauptformular von dem aus Kindformulare zum arbeiten geöffnet werden. Wollte jetzt eigentlich ein Hintergrundbild in das Hauptformular einbringen, allerdings wird das Bild gekachelt wenn ich es direkt als Hintergrundbild zuordne. Deshalb habe ich jetzt eine Picturebox auf das Hauptformular gesetzt.
Das Bild wird jetzt einwandfrei angezeigt, allerdings mußte ich feststellen, das die geöffneten Kindformulare von der Picturebox verdeckt werden. Wie geht denn sowas? Was mach ich da falsch?

Grüße

215 Beiträge seit 2004
vor 18 Jahren

Wenn ich das richtig verstehe, dann willst Du ein MDI nutzen, ja?

In dem Fall werden die MDI-Children in einer 'MDI-Area' des MDI-Parent untergebracht.
Dieser Bereich ist all das, wo man 'direkt auf's Fenster schauen kann'.
Also die unverdeckte Client-Fläche.
Die PictureBox verdeckt Client-Fläche.

Du musst schon das Bild 'selbst' auf die ClientFläche pinseln.

greetz
DaSchroeter

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo MillionsterNutzer,

könnte auch reichen, die Kindfenster mit BringToFront vor die PictureBox zu bringen.

herbivore

215 Beiträge seit 2004
vor 18 Jahren

@herbivore: Genau das hab ich neulich probiert -> reicht nicht!
Aber ich weiss nicht mehr, ob das mit dem 1.1 oder dem 2.0 Framework war 🙂

4.221 Beiträge seit 2005
vor 18 Jahren

Wäre es nicht sinnvoller das Problem an der Wurzel zu packen ??

Das Image wird ja nur gekachelt weil es nicht genau so gross ist wie das ClientRect



		private Image _Image=Image.FromFile(@"C:\Windows\Web\Wallpaper\Fischkarawane.jpg");

		/// <summary>
		/// Returns a resized Image
		/// </summary>
		/// <param name="pImage">the original Image</param>
		/// <param name="pBounds">the Bounds of the new Image</param>
		/// <returns></returns>
		private Image LoadThumbnail(Image pImage)
		{
			Image ret=new Bitmap(this.ClientRectangle.Width,this.ClientRectangle.Height);
			Graphics g=Graphics.FromImage(ret);
			g.FillRectangle(new SolidBrush(this.BackColor),0,0,ret.Width,ret.Height);
			float factor=Math.Max((float)pImage.Width/(float)ret.Width,(float)pImage.Height/(float)ret.Height);
			g.DrawImage(pImage,0,0,(float)pImage.Width/factor,(float)pImage.Height/factor);
			g.Dispose();
			return ret;
		}

		protected override void OnResize(EventArgs e)
		{
			base.OnResize (e);
			if (this.BackgroundImage!=null)
			{
				this.BackgroundImage.Dispose();
			}
			this.BackgroundImage=this.LoadThumbnail(this._Image);
		}

Edit: Hintergrund von White geändert auf this.BackColor (sieht irgendwie besser aus)

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 18 Jahren
ähnlich wie Programmierhans es sagt...

Hi @ all,

also zunächstmal muß ich DaSchroeter zustimmen: .BringToFront() ändert leider nichts an den Tatsachen, daher habe ich die Idee die mit der PictureBox verworfen.

Statt dessen habe ich beschlossen die BackGroundImage-Eigenschaft zu nutzen:

Image img = Image.FromFile(@"c:\abc.png");
this.BackgroundImage = new Bitmap (img,this.Width,this.Height)

Damit kann ich auch dem gekachelten Hintergrund entgegenwirken. Zwar ist die Lösung nicht wirklich sauber, da die Bilder immer in der Größe angepasst werden. Wenn ich mich aber einschränke und immer nur Wallpapers in höheren Auslösungen nehme kann man darüber hinweg sehen.

Wenn man das vermeiden möchte, um zum Beispiel kleinere Bilder unangepasst und zentriert anzuzeigen, könnte man evtl. das Bild mit einem Graphics-Object entsprechend mit einem Rahmen versehen. Glaube ich zumindest 🙂

Ah, so wie ich sehe hat Programmierhans hierzu den nötigen Code geliefert. Stimmts???

Grüße