Laden...

Hintergrundfarbe vom MDI Container

Erstellt von snoopy vor 18 Jahren Letzter Beitrag vor 18 Jahren 8.216 Views
S
snoopy Themenstarter:in
204 Beiträge seit 2005
vor 18 Jahren
Hintergrundfarbe vom MDI Container

Hi, wie kann man die Farbe vom MDI Container ändern? Standardmäßig ist es ja son dunkel grau. Möchte gerne, das die Hintergrundfarbe genau die gleiche ist, wie von einer normalen Form der Hintergrund.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo snoopy,

also ob man das in der Anwendung umstellen kann, weiß ich nicht, aber du kannst es systemweit unter 'Eigenschaften von Anzeige'/'Darstellung'/'Hintergrund der Anwendung' umstellen.

herbivore

S
snoopy Themenstarter:in
204 Beiträge seit 2005
vor 18 Jahren

das ist ja nicht das was ich möchte. Also scheint es wohl nicht möglich zu sein.. mist..

Dafür jetzt nene neuen Topic machen ist auch irgendwie blöd.

Das was ich eigentlich wollte, ist, ich habe in meinem MDI Container als Hintergrund ne form ohne border. Es sieht so aus, als wenn der Hintergrund die Form wär. Jetzt ist mein MDI Container aber Sizeable. Und wenn ich den Container jetzt vergrößer, ist die form ja kleiner als der Container und es sieht blöd aus. Wenn ich jetzt in der ChangeSize Event methode schreibe


hintergrund_form.width = this.width;
hintergrund_form.height = this.height;

dann bekomm ich beim starten ne Fehlermeldung, das das Fenster nicht gezeichnet werden kann. Wie könnt ich das sonst machen?

104 Beiträge seit 2005
vor 18 Jahren

Hallo!

Du könntest vielleicht die Controls deiner Form durchsuchen, somit kommst du auf den MDIClient.
Dort kannst du vielleicht - hab es jetzt nicht ausprobiert - auch die Hintergrundfarbe ändern.
Ich weiss nur, das dort auf jeden Fall geht die Größe des MDI zu beeinflussen


foreach (Control cr in this.Controls){
  if (cr.GetType() == typeof(MdiClient)){
     cr.BackColor = System.Drawing.SystemColors.Control;
  }
}

Vielleicht hilft dir dies ja irgendwie weiter...

=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Merkur76,

es geht ja um den Mdi-Container und für den hatte ich - leider erfolglos - probiert BackColor zu setzen.

herbivore

104 Beiträge seit 2005
vor 18 Jahren

Hallo herbivore!

Hab es jetzt probiert und bei mir ging folgendes Problemlos.
Hatte dann das MDI schön blau.


foreach (Control cr in this.Controls)
			{
				if (cr.GetType() == typeof(MdiClient))
				{
					cr.BackColor = Color.Blue;
				}
			}			

[EDIT]
Wenn ein Form als MDIContainer erstellt wird (IsMdiContainer = true), erstellt das Framework ein Fenster der Klasse MdiClient.
[/EDIT]

=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Merkur76,

den Mdi-Client bekomme ich auch blau, aber den Mdi-Container leider eben nicht.

herbivore

104 Beiträge seit 2005
vor 18 Jahren

Hallo herbivore!

Aber wenn du eine Form zu einem MDIContainer machst (IsMdiContainer = true) erstellt
das Framework ja automatisch ein Fenster der Klasse MdiClient.

Wenn man jetzt alle Controls durchsucht, gibt es auch nur -zumindest in VS2003- nur ein Control und das ist MdiClient. (in VS2005 sind es 2: Form und MdiClient).

Wie greift man dann auf den MdiContainer zu?
Für mich ist der MdiContainer und der MdiClient HIER dasselbe.

Ist dem nicht so? Für Erweiterung meines Wissenstandes bin ich immer dankbar 🙂

=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Merkur76,

(in VS2005 sind es 2: Form und MdiClient)

In deiner Beschreibung ist 'Form' der MdiContainer (und MdiClient ist der MdiClient 🙂

Im Prinzip sagst du das ja auch schon selbst:

wenn du eine Form zu einem MDIContainer machst (IsMdiContainer = true)

herbivore

104 Beiträge seit 2005
vor 18 Jahren

Hallo herbivore!

Naja, wenn du es so erklärst, dann verstehe ich nicht ganz wieso du dann bei dem MDIContainer nicht die Hintergrundfarbe einstellen kannst?

Wenn ich diesem MdiContainer(Form) eine BackColor zuweise geht das.
Ebenso kann ich dem MdiClient auch eine andere BackColor zuweisen.

Wenn ich nun die Größe des MdiClient verändere sehe ich die BackColor der Form und auch die BackColor des MdiClient.

Auf jeden Fall werden alle MDIChilds in diesem MdiClient angezeigt.

Aber mal eine ganz andere Frage: Ich sehe ja ziemlich oft Beiträge von dir, aber jedesmal frage ich mich was dein AVATAR darstellt. Kannst du mich bitte mal aufklären? Danke 🙂

=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Merkur76,

komisch, also bei mir geht es - zumindest mit folgendem Code - nicht, also der Hintergrund des MdiContainers wird nicht blau.


using System;
using System.Drawing;
using System.Windows.Forms;

public class MdiContainer : Form
{
   public MdiContainer ()
   {
      Text = "MdiContainer";
      ClientSize = new Size (600, 480);

      BackColor = Color.Blue;

      IsMdiContainer = true;

      BackColor = Color.Blue;

      MyWindow mywin = new MyWindow ();
      mywin.MdiParent = this;
      mywin.Show ();
   }
}

public class MyWindow : Form
{
   public MyWindow ()
   {
      Text = "MdiClient";
      ClientSize = new Size (300, 240);
   }
}

abstract class App
{
   public static void Main (string [] astrArg)
   {
      Application.Run (new MdiContainer ());
   }
}

Mein Avatar ist mein Lieblings-Herbivore aus der virtuellen Welt Technosphere http://www.technosphere.co.uk/ - leider schon länger offline. Unter http://www.janeprophet.com/technoweb1.html gibt es zumindest noch Screenshots der damaligen Web-Seite.

herbivore

S
snoopy Themenstarter:in
204 Beiträge seit 2005
vor 18 Jahren

habs jetzt so gemacht wie Merkur76.. Danke schön!

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo zusammen,

kann mir dann noch einer verraten, warum es bei mir bzw. mit meinem Code (s.o.) nicht geht?

herbivore

104 Beiträge seit 2005
vor 18 Jahren

Hallo herbivore!

Erstmal danke für deine Aufklärung über dein Avatar 🙂

Warum es bei dir nicht geht, kann ich dir leider nicht sagen. 🙁
Aber vielleicht musst du dein zweites BackColor nicht in MdiContainer sondern in MyWindow machen.
Aber eigentlich habe ich keine Ahnung, "kann" selber erst seit 3 Monaten C#. Bin eigentlich bisher immer auf deine (bzw. hier im Forum) Hilfe angewiesen gewesen. Und du hast mir immer selber sehr gut weitergeholfen.

Ich habe es einfach so gemacht wie ich es beschrieben habe, und es funzte.
Tut mir leid, das ich nicht mehr helfen kann X(

Gruß
Merkur76

=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
2.921 Beiträge seit 2005
vor 18 Jahren

		public Form1()
		{
			cGradientImageBrush brush = new cGradientImageBrush();
			this.BackgroundImage = brush.GradientRect(this.ClientRectangle,Color.Red,Color.Red);
		}

so gehts.

hier die Definition der benötigten Klasse:
(es reicht übrigens aus, GradientRect zu benutzen, die anderen sind nur wichtig falls noch mehr damit angestellt werden soll)


using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace MDITest
{
	/// <summary>
	/// 
	/// </summary>
	[Serializable]
	public class cGradientImageBrush
	{
		public cGradientImageBrush()
		{
		}

		public static Image ScaleImage(Image actImage,Size newSize)
		{
			Size size		= newSize;
			Image image		= actImage;
			Bitmap bitmap	= new Bitmap(image, size);

			return bitmap as Image;
		}

		public static Bitmap GetImage(Image oImage,Color oHue,int iPaletteIndex)
		{
			Bitmap oBitmap = oImage as Bitmap;
			Color oEntry = Color.White;
			ColorPalette oPalette = null;
			double duPercent = 0;
			int iR = 0;
			int iG = 0;
			int iB = 0;

			oPalette = oBitmap.Palette;
				
			oEntry = oPalette.Entries[iPaletteIndex];
			iR = (Byte)(oHue.R * duPercent);
			iG = (Byte)Convert.ToByte(oHue.G * duPercent);
			iB = (Byte)Convert.ToByte(oHue.B * duPercent);
			oPalette.Entries[iPaletteIndex] = oHue;

			oBitmap.Palette = oPalette;
			return new Bitmap(oBitmap);
		}

		public static Bitmap GetImage(Bitmap oImage,Color oHue,int iPaletteIndex)
		{
			return GetImage(oImage,oHue,iPaletteIndex);
		}

		//Wird vielleicht später mal benötigt,
		//Färbt eine Grafik in Echtzeit um.
		//Dabei wird der Luminanzwert (Helligkeit berücksichtigt)
		private Bitmap GetHueImage(Image oImage,Color oHue)
		{
			Bitmap oBitmap = oImage as Bitmap;
			Color oEntry = Color.White;
			ColorPalette oPalette = null;
			double duAverage = 0;
			double duPercent = 0;
			int iR = 0;
			int iG = 0;
			int iB = 0;

			oPalette = oBitmap.Palette;

			for(int i=0;i<oPalette.Entries.GetLength(0);i++)
			{
				oEntry = oPalette.Entries[i];
				duAverage = ((int)(oEntry.R) + (int)(oEntry.R) + (int)(oEntry.G)) / 3;
				duPercent = duAverage / 255;
				iR = (Byte)(oHue.R * duPercent);
				iG = (Byte)Convert.ToByte(oHue.G * duPercent);
				iB = (Byte)Convert.ToByte(oHue.B * duPercent);
				oPalette.Entries[i] = Color.FromArgb(255,iR,iG,iB);
			}

			oBitmap.Palette = oPalette;
			return new Bitmap(oBitmap);
		}

		public Image GradientRect(Rectangle rectangle,Color colStart,Color colEnd)
		{
			// create the bitmap we will draw to

			try
			{
				Image image = new Bitmap(rectangle.Width,rectangle.Height);
			
				// calculate the half of the stroke width for use later
				// create a rectangle that bounds the ellipse we want to draw
			
				// create a Graphics object from the bitmap
				using(Graphics graphics = Graphics.FromImage(image))
				{
					// create a solid color brush
					using(LinearGradientBrush fillBrush = new LinearGradientBrush(rectangle,colStart,colEnd,LinearGradientMode.Vertical))
					{
						// fill the ellipse specified by the 
						// rectangle calculated above
						graphics.FillRectangle(fillBrush,rectangle);
					}

					/*// create a pen
					using(Pen pen = new Pen(strokeColor, strokeWidth))
					{
						// draw the stroke of the ellipse specified by 
						// the rectangle calculated above
						graphics.DrawEllipse(pen, ellipseBound);
					}*/
				}

				//image.Save("c:\\gradientrect",ImageFormat.Bmp);
				return image;
			}
				//Fehler abfangen, der Applikation zum Absturz bringen kann,
				//tritt auf, wenn Bild in den Hintergrund gebracht wird, z.B. durch Klicken auf
				//Desktop-Symbol in der Taskleiste.
			catch(Exception ex)
			{
				//MainForm.App.debugLog.SetLastError(1,"cGradientImageBrush: GradientRect",ex.Message);
				//return cImages.Back;
				return (Image)new Bitmap(10,10);
			}
		}
	}
}


Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.