Jag försöker ändra förg på en toolbar med hjälp av Arv. Jag hitta en lösing. Det här ser lite knasigt ut:ändra färg på toolbar
Men Toolbar har ju ingen OnPint.Men den ärver ju av Forms.Controls som har en OnPaint.Jag lyckas override OnPaint. Men vet ej hur jag skall göra sen.Sv: ändra färg på toolbar
Dock kvarstår ett littet problem mina Buttons sysns inte.
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Windows.Forms;
namespace menuControl
{
/// <summary>
/// Summary description for cuteButton.
/// </summary>
public class menu : System.Windows.Forms.ToolBar
{
private Color m_color1 = Color.LightGreen; // first color
private Color m_color2 = Color.DarkBlue; // second color
private int m_color1Transparent = 64; // transparency degree
// (applies to the 1st color)
private int m_color2Transparent = 64; // transparency degree
//public event PaintEventHandler Paint;
// (applies to the 2nd color)
public Color cuteColor1
{
get { return m_color1; }
set { m_color1 = value; Invalidate(); }
}
public Color cuteColor2
{
get { return m_color2; }
set { m_color2 = value; Invalidate(); }
}
public int cuteTransparent1
{
get { return m_color1Transparent; }
set { m_color1Transparent = value; Invalidate(); }
}
public int cuteTransparent2
{
get { return m_color2Transparent; }
set { m_color2Transparent = value; Invalidate(); }
}
public menu()
{
this.SetStyle(System.Windows.Forms.ControlStyles.UserPaint, true);
this.Buttons.Add("test");
}
//public void OnPaint(PaintEventArgs pe)
protected override void OnPaint(PaintEventArgs pe)
{
// Calling the base class OnPaint
base.OnPaint(pe);
// Create two semi-transparent colors
Color c1 = Color.FromArgb
(m_color1Transparent , m_color1);
Color c2 = Color.FromArgb
(m_color2Transparent , m_color2);
Brush b = new System.Drawing.Drawing2D.LinearGradientBrush
(ClientRectangle, c1, c2, 10);
pe.Graphics.FillRectangle (b, ClientRectangle);
b.Dispose();
}
}
}
Sv:ändra färg på toolbar
<code>
//public void OnPaint(PaintEventArgs pe)
protected override void OnPaint(PaintEventArgs pe)
{
// Calling the base class OnPaint
base.OnPaint(pe);
// Create two semi-transparent colors
Color c1 = Color.FromArgb
(m_color1Transparent , m_color1);
Color c2 = Color.FromArgb
(m_color2Transparent , m_color2);
Brush b = new System.Drawing.Drawing2D.LinearGradientBrush
(ClientRectangle, c1, c2, 10);
pe.Graphics.FillRectangle (b, ClientRectangle);
b.Dispose();
}
</code>
En enkel analys av koden blir:
1) Låt toolbaren bli utritad
2) Fyll allting med min bakgrund
Borde det inte vara tvärtom där? :) Lägg base.OnPaint(pe) på slutet, se till att den inte ritar ut någon bakgrundsfärg i sin vanliga funktion (transparent)