Jag gör en egen 2-färgad label, ser kanon ut. Jag förstår inte ditt problem, det är bara att lägga till en ny property, enklare kan det inte bli. Jo det är det som är problemet, det här"bara att göra en ny property" som jag inte riktigt förstår. Tog lite av din kod ovan där jag har skapat en propery åt dig:Hjälp med UserControll
Koden är enkel och ser ut så här:
<code>
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace ctlCuteLabel
{
/// <summary>
/// Summary description for cuteLabel.
/// </summary>
public class cuteLabel : System.Windows.Forms.Label
{
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
// (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 cuteLabel()
{
}
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>
Vad jag skulle vilja ha hjälp med är möjligheten att förändra ovanståend kod, så att jag också kan ha den som vertikaltext.
Jag hittade följande kod på Microsoft:
<code>
string text = "Vertical text";
FontFamily fontFamily = new FontFamily("Lucida Console");
Font font = new Font(
fontFamily,
14,
FontStyle.Regular,
GraphicsUnit.Point);
PointF pointF = new PointF(40, 10);
StringFormat stringFormat = new StringFormat();
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
e.Graphics.DrawString(text, font, solidBrush, pointF, stringFormat);
</code>
Men hur skriver jag för att kunna få en ny egenskap(vinklen).
Var någonstans i huvudkoden skall detta in(om det går)
Tack på förhandSv: Hjälp med UserControll
/Fredrik NSv: Hjälp med UserControll
Sv: Hjälp med UserControll
<code>
public class cuteLabel : System.Windows.Forms.Label
{
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
// (applies to the 2nd color)
//Ett privat fält, istället för att använda true/false så kan
//kan det vara snyggare om du använder enum där du väljer
//om det ska vara hortizantal eller vertical.
private bool vertical = false;
public Color cuteColor1
{
get { return m_color1; }
set { m_color1 = value; Invalidate(); }
}
//Här har du en property
//För att sedan i din kod se vilket värde du har satt till propertyn
//så använder du det privata fäletet vertical.
public bool Vertical
{
get { return this.vertical; }
set { this.vertival = value; }
}
</code>
Hoppas detta gav dig något..
/Fredrik N