Hej, Ja, det går bra att göra en egen kontroll och få den i toolboxen. Den kommer där automatiskt om du skapar en ny klass, som ärver från ComboBox. Som hjälp på traven visar jag ett litet exempel: Nice, tusen tack. Jag trodde att man skulle behöva lägga en combobox i en usercontrol för att få in den i toolboxen. Utöka (ärva) ComboBox-kontrollen
Jag har funderingar på att göra några förbättringar på ComboBox-kontrollen, bl a tänkte jag implementera en egen ComboItem-klass som innehåller bl a ToolTip på item-nivå e t c.
Min tanke var förstås att ärva från ComboBox-klassen och utöka denna, MEN, hur hanterar (Windows Form) formulärdesignern detta? Kan man få in denna nya klass, SuperComboBox :-), i toolboxen? Annars tappar man ju hela grejen? Jag vill absolut inte koda i blindo, dvs själv i kod skapa en instans av combon, tala om var den skall ligga etc varje gång den skall användas...Den måste synas i formulärdesignern, annars får det vara...
Någon som gjort något liknande?Sv: Utöka (ärva) ComboBox-kontrollen
Jag gjorde en egen, som ärvde från ComboBox, och innehöll ikoner etc.Sv:Utöka (ärva) ComboBox-kontrollen
Form1.cs
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
superComboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
superComboBox1.StatusLabel = label1;
superComboBox1.Items.Add(new SuperComboBoxItem("One", "My first item"));
superComboBox1.Items.Add(new SuperComboBoxItem("Two", "My second item"));
superComboBox1.Items.Add(new SuperComboBoxItem("Three", "My third item"));
superComboBox1.SelectedIndex = 0;
}
}
}
SuperComboBox.cs
namespace WindowsApplication1
{
public class SuperComboBox : ComboBox
{
Label statusLabel = null;
public Label StatusLabel
{
set { statusLabel = value; }
}
public SuperComboBox()
{
this.DrawMode = DrawMode.OwnerDrawFixed;
this.DrawItem += new DrawItemEventHandler(SuperComboBox_DrawItem);
}
void SuperComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
Brush brush;
//Mouse hovering
if ((e.State & DrawItemState.Focus) == 0)
{
//No highlight
e.Graphics.FillRectangle(Brushes.White, e.Bounds);
brush = new SolidBrush(SystemColors.ControlText);
}
else
{
//Highlight
Brush brushback = new SolidBrush(SystemColors.Highlight);
e.Graphics.FillRectangle(brushback, e.Bounds);
brush = new SolidBrush(SystemColors.HighlightText);
}
if (e.Index != -1)
{
Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, 24, 24);
e.Graphics.DrawString(((SuperComboBoxItem)this.Items[e.Index]).Text, this.Font, brush, 10, e.Bounds.Y + (e.Bounds.Height / 2) - (this.Font.Height / 2));
if (statusLabel != null)
statusLabel.Text = ((SuperComboBoxItem)this.Items[e.Index]).ToolTip;
}
}
}
}
SuperComboBoxItem.cs
namespace WindowsApplication1
{
public class SuperComboBoxItem
{
private string text;
private string toolTip;
public string Text
{
get { return text; }
set { text = value; }
}
public string ToolTip
{
get { return toolTip; }
set { toolTip = value; }
}
public SuperComboBoxItem(string Text, string ToolTip)
{
this.text = Text;
this.toolTip = ToolTip;
}
}
}
Dra ut en SuperComboBox från toolboxen.
Sv: Utöka (ärva) ComboBox-kontrollen