Hallo zusammen,
ich hab nach langem Suchen endlich ein ToolboxControl gefunden, welches zumindest zum größten Teil das tut, was ich möchte.
Was mir jedoch sehr fehlt, ist die möglichkeit, vor den Controlnamen das passende Icon anzuzeigen.
Das ganze Teil leitet sich von ListBox ab und die scheint sowas nicht zu können. Ich hab auch versucht das ganze nach ListView umzumodeln, aber das wollte auch nicht wirklich klappen.
Vielleicht hat ja von Euch einer ne gute Idee.
Das hier ist die Klasse:
[highlight=c#]
internal class ToolboxService : ListBox, IToolboxService
{
internal Control designPanel = null;
public ToolboxService()
{
}
public void AddCreator(System.Drawing.Design.ToolboxItemCreato rCallback creator, string format, System.ComponentModel.Design.IDesignerHost host)
{
// No implementation
}
public void AddCreator(System.Drawing.Design.ToolboxItemCreato rCallback creator, string format)
{
// No implementation
}
public void AddLinkedToolboxItem(System.Drawing.Design.Toolbox Item toolboxItem, string category, System.ComponentModel.Design.IDesignerHost host)
{
// No implementation
}
public void AddLinkedToolboxItem(System.Drawing.Design.Toolbox Item toolboxItem, System.ComponentModel.Design.IDesignerHost host)
{
// No implementation
}
public void AddToolboxItem(System.Drawing.Design.ToolboxItem toolboxItem, string category)
{
AddToolboxItem(toolboxItem);
}
public void AddToolboxItem(System.Drawing.Design.ToolboxItem toolboxItem)
{
Items.Add(toolboxItem);
}
public System.Drawing.Design.ToolboxItem DeserializeToolboxItem(object serializedObject, System.ComponentModel.Design.IDesignerHost host)
{
return null;
}
public System.Drawing.Design.ToolboxItem DeserializeToolboxItem(object serializedObject)
{
return null;
}
public System.Drawing.Design.ToolboxItem GetSelectedToolboxItem(System.ComponentModel.Desig n.IDesignerHost host)
{
return GetSelectedToolboxItem();
}
public System.Drawing.Design.ToolboxItem GetSelectedToolboxItem()
{
if (base.SelectedIndex == -1)
return null;
else
return (ToolboxItem)base.SelectedItem;
}
public System.Drawing.Design.ToolboxItemCollection GetToolboxItems(string category, System.ComponentModel.Design.IDesignerHost host)
{
return GetToolboxItems();
}
public System.Drawing.Design.ToolboxItemCollection GetToolboxItems(string category)
{
return GetToolboxItems();
}
public System.Drawing.Design.ToolboxItemCollection GetToolboxItems(System.ComponentModel.Design.IDesi gnerHost host)
{
return GetToolboxItems();
}
public System.Drawing.Design.ToolboxItemCollection GetToolboxItems()
{
ToolboxItem[] t = new ToolboxItem[Items.Count];
Items.CopyTo(t, 0);
return new ToolboxItemCollection(t);
}
public bool IsSupported(object serializedObject, System.Collections.ICollection filterAttributes)
{
return false;
}
public bool IsSupported(object serializedObject, System.ComponentModel.Design.IDesignerHost host)
{
return false;
}
public bool IsToolboxItem(object serializedObject, System.ComponentModel.Design.IDesignerHost host)
{
return false;
}
public bool IsToolboxItem(object serializedObject)
{
return false;
}
public void Refresh()
{
base.Refresh();
}
public void RemoveCreator(string format, System.ComponentModel.Design.IDesignerHost host)
{
// No implementation
}
public void RemoveCreator(string format)
{
// No implementation
}
public void RemoveToolboxItem(System.Drawing.Design.ToolboxIte m toolboxItem, string category)
{
RemoveToolboxItem(toolboxItem);
}
public void RemoveToolboxItem(System.Drawing.Design.ToolboxIte m toolboxItem)
{
Items.Remove(toolboxItem);
}
public void SelectedToolboxItemUsed()
{
base.SelectedIndex = -1;
}
public object SerializeToolboxItem(System.Drawing.Design.Toolbox Item toolboxItem)
{
return null;
}
public bool SetCursor()
{
if (base.SelectedIndex == -1)
designPanel.Cursor = Cursors.Default;
else
designPanel.Cursor = Cursors.Cross;
return true;
}
public void SetSelectedToolboxItem(System.Drawing.Design.Toolb oxItem toolboxItem)
{
base.SelectedItem = toolboxItem;
}
public System.Drawing.Design.CategoryNameCollection CategoryNames
{
get
{
return null;
}
}
public string SelectedCategory
{
get
{
return null;
}
set
{
}
}
private bool ShouldSerializeItems()
{
return false;
}
}
[/highlight]
Aufgerufen wird das ganze dann so:
[highlight=c#]
private void PopulateToolbox(IToolboxService toolbox)
{
toolbox.AddToolboxItem(new ToolboxItem(typeof(Button)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(ListBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(TextBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(Label)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(CheckBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(ComboBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(GroupBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(Rahmen)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(PictureBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(DatePicker)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(RadioBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(RadioButton)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(TabControl)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(TreeView)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(DataGridView)));
}
[/highlight]
ich hab nach langem Suchen endlich ein ToolboxControl gefunden, welches zumindest zum größten Teil das tut, was ich möchte.
Was mir jedoch sehr fehlt, ist die möglichkeit, vor den Controlnamen das passende Icon anzuzeigen.
Das ganze Teil leitet sich von ListBox ab und die scheint sowas nicht zu können. Ich hab auch versucht das ganze nach ListView umzumodeln, aber das wollte auch nicht wirklich klappen.
Vielleicht hat ja von Euch einer ne gute Idee.
Das hier ist die Klasse:
[highlight=c#]
internal class ToolboxService : ListBox, IToolboxService
{
internal Control designPanel = null;
public ToolboxService()
{
}
public void AddCreator(System.Drawing.Design.ToolboxItemCreato rCallback creator, string format, System.ComponentModel.Design.IDesignerHost host)
{
// No implementation
}
public void AddCreator(System.Drawing.Design.ToolboxItemCreato rCallback creator, string format)
{
// No implementation
}
public void AddLinkedToolboxItem(System.Drawing.Design.Toolbox Item toolboxItem, string category, System.ComponentModel.Design.IDesignerHost host)
{
// No implementation
}
public void AddLinkedToolboxItem(System.Drawing.Design.Toolbox Item toolboxItem, System.ComponentModel.Design.IDesignerHost host)
{
// No implementation
}
public void AddToolboxItem(System.Drawing.Design.ToolboxItem toolboxItem, string category)
{
AddToolboxItem(toolboxItem);
}
public void AddToolboxItem(System.Drawing.Design.ToolboxItem toolboxItem)
{
Items.Add(toolboxItem);
}
public System.Drawing.Design.ToolboxItem DeserializeToolboxItem(object serializedObject, System.ComponentModel.Design.IDesignerHost host)
{
return null;
}
public System.Drawing.Design.ToolboxItem DeserializeToolboxItem(object serializedObject)
{
return null;
}
public System.Drawing.Design.ToolboxItem GetSelectedToolboxItem(System.ComponentModel.Desig n.IDesignerHost host)
{
return GetSelectedToolboxItem();
}
public System.Drawing.Design.ToolboxItem GetSelectedToolboxItem()
{
if (base.SelectedIndex == -1)
return null;
else
return (ToolboxItem)base.SelectedItem;
}
public System.Drawing.Design.ToolboxItemCollection GetToolboxItems(string category, System.ComponentModel.Design.IDesignerHost host)
{
return GetToolboxItems();
}
public System.Drawing.Design.ToolboxItemCollection GetToolboxItems(string category)
{
return GetToolboxItems();
}
public System.Drawing.Design.ToolboxItemCollection GetToolboxItems(System.ComponentModel.Design.IDesi gnerHost host)
{
return GetToolboxItems();
}
public System.Drawing.Design.ToolboxItemCollection GetToolboxItems()
{
ToolboxItem[] t = new ToolboxItem[Items.Count];
Items.CopyTo(t, 0);
return new ToolboxItemCollection(t);
}
public bool IsSupported(object serializedObject, System.Collections.ICollection filterAttributes)
{
return false;
}
public bool IsSupported(object serializedObject, System.ComponentModel.Design.IDesignerHost host)
{
return false;
}
public bool IsToolboxItem(object serializedObject, System.ComponentModel.Design.IDesignerHost host)
{
return false;
}
public bool IsToolboxItem(object serializedObject)
{
return false;
}
public void Refresh()
{
base.Refresh();
}
public void RemoveCreator(string format, System.ComponentModel.Design.IDesignerHost host)
{
// No implementation
}
public void RemoveCreator(string format)
{
// No implementation
}
public void RemoveToolboxItem(System.Drawing.Design.ToolboxIte m toolboxItem, string category)
{
RemoveToolboxItem(toolboxItem);
}
public void RemoveToolboxItem(System.Drawing.Design.ToolboxIte m toolboxItem)
{
Items.Remove(toolboxItem);
}
public void SelectedToolboxItemUsed()
{
base.SelectedIndex = -1;
}
public object SerializeToolboxItem(System.Drawing.Design.Toolbox Item toolboxItem)
{
return null;
}
public bool SetCursor()
{
if (base.SelectedIndex == -1)
designPanel.Cursor = Cursors.Default;
else
designPanel.Cursor = Cursors.Cross;
return true;
}
public void SetSelectedToolboxItem(System.Drawing.Design.Toolb oxItem toolboxItem)
{
base.SelectedItem = toolboxItem;
}
public System.Drawing.Design.CategoryNameCollection CategoryNames
{
get
{
return null;
}
}
public string SelectedCategory
{
get
{
return null;
}
set
{
}
}
private bool ShouldSerializeItems()
{
return false;
}
}
[/highlight]
Aufgerufen wird das ganze dann so:
[highlight=c#]
private void PopulateToolbox(IToolboxService toolbox)
{
toolbox.AddToolboxItem(new ToolboxItem(typeof(Button)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(ListBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(TextBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(Label)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(CheckBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(ComboBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(GroupBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(Rahmen)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(PictureBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(DatePicker)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(RadioBox)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(RadioButton)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(TabControl)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(TreeView)));
toolbox.AddToolboxItem(new ToolboxItem(typeof(DataGridView)));
}
[/highlight]
Comment