Hi,
I wanted to be able to control most of the aspects of the Collection Editor. First, I will admit, most of the ideas presented here came from various posts and examples found scouring the web. At this point, I don't remember where each idea came from, so if any of them are yours, let me know and I'll add credit in this post. Anyway, I will simply post the CustomerCollectionEditor. Comments explain most of what it is doing. If you need more clarification, just send me a note. I got help on setting the Font of the various items within the CustomCollectionEditor from the Forum Moderator John H. I also got help re-sizing the "listbox" from another Forum's user Reza Aghaei. Below is the code and an image of the customizations.
I wanted to be able to control most of the aspects of the Collection Editor. First, I will admit, most of the ideas presented here came from various posts and examples found scouring the web. At this point, I don't remember where each idea came from, so if any of them are yours, let me know and I'll add credit in this post. Anyway, I will simply post the CustomerCollectionEditor. Comments explain most of what it is doing. If you need more clarification, just send me a note. I got help on setting the Font of the various items within the CustomCollectionEditor from the Forum Moderator John H. I also got help re-sizing the "listbox" from another Forum's user Reza Aghaei. Below is the code and an image of the customizations.
CustomCollectionEditor:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
using System.ComponentModel.Design;
using System.Windows.Forms;
namespace FirstPassYield
{
public class MyCollectionEditor : CollectionEditor
{
public static bool bEditingCollection = false;
public delegate void MyFormClosedEventHandler(object sender, FormClosedEventArgs e);
public event MyFormClosedEventHandler MyFormClosed;
public delegate void MyFormLoadEventHandler(object sender, System.EventArgs e);
public event MyFormLoadEventHandler MyFormLoad;
public delegate void MyFormControlAddedEventHandler(object sender, System.EventArgs e);
public event MyFormControlAddedEventHandler MyFormControlAdded;
public MyCollectionEditor(Type type)
: base(type)
{
}
protected override string GetDisplayText(object value)
{
Defect item = new Defect();
item = (FirstPassYield.Defect)value;
if (String.IsNullOrEmpty(item.DefectCode))
return base.GetDisplayText(" ");
else
{
String sDisplay = item.DefectCode.ToString().Substring(0, item.DefectCode.ToString().IndexOf(":"));
return base.GetDisplayText(string.Format("{0}", sDisplay));
}
}
protected override CollectionForm CreateCollectionForm()
{
CollectionForm collectionForm = base.CreateCollectionForm();
Font myDialogFont = new Font("Microsoft San Seraf", 9.0f, FontStyle.Bold); // Form's Font
Font myFont = new Font("Microsoft San Seraf", 9.0f, FontStyle.Bold); // Individual Item's Font
// Set the Dialog Font
collectionForm.Font = myDialogFont;
// Turn OFF Help Button
collectionForm.HelpButton = false;
// Set the BackColor, StartPosition and Size of the form
collectionForm.BackColor = Color.FromName("SteelBlue");
collectionForm.StartPosition = FormStartPosition.CenterParent;
collectionForm.Size = new Size(660, 500);
// Add Form Handlers for trapping Load and Close
collectionForm.FormClosed += this.collection_FormClosed;
collectionForm.Load += this.collection_FormLoad;
var overArchingTableLayoutPanel = collectionForm.Controls["overArchingTableLayoutPanel"];
// Change the size of the "listbox"
Size mySize = new Size(150, 337);
overArchingTableLayoutPanel.Controls["listbox"].Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left;
overArchingTableLayoutPanel.Controls["listbox"].Size = mySize;
var addRemoveTableLayoutPanel = overArchingTableLayoutPanel.Controls["addRemoveTableLayoutPanel"];
// Change the width of the Add/Remove Buttons to match the new "listbox" size
addRemoveTableLayoutPanel.Controls["addButton"].Anchor = 0;
addRemoveTableLayoutPanel.Controls["addButton"].Width = addRemoveTableLayoutPanel.Controls["addButton"].Width / 2;
addRemoveTableLayoutPanel.Controls["removeButton"].Anchor = 0;
addRemoveTableLayoutPanel.Controls["removeButton"].Width = addRemoveTableLayoutPanel.Controls["removeButton"].Width / 2;
// Set the BackColor of the Buttons - It appears that they get set by default to the form's BackColor
addRemoveTableLayoutPanel.Controls["addButton"].BackColor = Color.FromName("Control");
addRemoveTableLayoutPanel.Controls["removeButton"].BackColor = Color.FromName("Control");
// Set the Font for the Add, Remove buttons
addRemoveTableLayoutPanel.Controls["addButton"].Font = myFont;
addRemoveTableLayoutPanel.Controls["removeButton"].Font = myFont;
// Add Handlers for trapping Add and Remove Buttons
addRemoveTableLayoutPanel.Controls["addButton"].Click += AddButton_Click;
addRemoveTableLayoutPanel.Controls["removeButton"].Click += RemoveButton_Click;
var okCancelTableLayoutPanel = overArchingTableLayoutPanel.Controls["okCancelTableLayoutPanel"];
// Set the BackColor of the Buttons - It appears that they get set by default to the form's BackColor
okCancelTableLayoutPanel.Controls["okButton"].BackColor = Color.FromName("Control");
okCancelTableLayoutPanel.Controls["cancelButton"].BackColor = Color.FromName("Control");
// Set the Font for the OK, Cancel buttons
okCancelTableLayoutPanel.Controls["okButton"].Font = myFont;
okCancelTableLayoutPanel.Controls["cancelButton"].Font = myFont;
// Add Handlers for trapping OK and Cancel Buttons
okCancelTableLayoutPanel.Controls["okButton"].Click += OKButton_Click;
okCancelTableLayoutPanel.Controls["cancelButton"].Click += CancelButton_Click;
// Change the Member Labels' Text, Color and Font
overArchingTableLayoutPanel.Controls["membersLabel"].Text = "&Defect List:";
overArchingTableLayoutPanel.Controls["membersLabel"].ForeColor = Color.FromName("White");
overArchingTableLayoutPanel.Controls["membersLabel"].Font = myFont;
// Change the Properties Labels' Text, Color and Font
overArchingTableLayoutPanel.Controls["propertiesLabel"].Text = "&Properties:";
overArchingTableLayoutPanel.Controls["propertiesLabel"].ForeColor = Color.FromName("White");
overArchingTableLayoutPanel.Controls["propertiesLabel"].Font = myFont;
// Set the BackColor of the Buttons - It appears that they get set by default to the form's BackColor
overArchingTableLayoutPanel.Controls["upButton"].BackColor = Color.FromName("Control");
overArchingTableLayoutPanel.Controls["downButton"].BackColor = Color.FromName("Control");
// Add Handlers for trapping Up and Down Buttons
overArchingTableLayoutPanel.Controls["upButton"].Click += UpButton_Click;
overArchingTableLayoutPanel.Controls["downButton"].Click += DownButton_Click;
var propertyBrowser = overArchingTableLayoutPanel.Controls["propertyBrowser"] as PropertyGrid;
if (propertyBrowser.Controls.Count != 0)
{
// Set the PropertySorting and ToolbarVisibilty
propertyBrowser.PropertySort = PropertySort.NoSort;
propertyBrowser.ToolbarVisible = false;
}
// Do something based on which Collection Editor was called
switch (collectionForm.Text)
{
case "Defect Collection Editor":
{
break;
}
}
// Hide Add, Remove, Up and Down Buttons
//collectionForm.Controls["overArchingTableLayoutPanel"].Controls["addRemoveTableLayoutPanel"].Controls["addButton"].Visible = false;
//collectionForm.Controls["overArchingTableLayoutPanel"].Controls["addRemoveTableLayoutPanel"].Controls["removeButton"].Visible = false;
//collectionForm.Controls["overArchingTableLayoutPanel"].Controls["upButton"].Visible = false;
//collectionForm.Controls["overArchingTableLayoutPanel"].Controls["downButton"].Visible = false;
return collectionForm;
}
private void collection_FormLoad(object sender, System.EventArgs e)
{
bEditingCollection = true;
}
private void AddButton_Click(object sender, EventArgs e)
{
//MessageBox.Show("Add Button Clicked");
}
private void RemoveButton_Click(object sender, EventArgs e)
{
//MessageBox.Show("Remove Button Clicked");
}
private void OKButton_Click(object sender, EventArgs e)
{
//MessageBox.Show("OK Button Clicked");
}
private void CancelButton_Click(object sender, EventArgs e)
{
//MessageBox.Show("Cancel Button Clicked");
}
private void UpButton_Click(object sender, EventArgs e)
{
//MessageBox.Show("Up Button Clicked");
}
private void DownButton_Click(object sender, EventArgs e)
{
//MessageBox.Show("Down Button Clicked");
}
private void collection_FormClosed(object sender, FormClosedEventArgs e)
{
bEditingCollection = false;
}
}
}