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.
There are a few things I wish I could change (mostly Font Sizes), but many of the items are "Read-only". I even tried creating new control to cover the ones I couldn't customize, but I could not get them positioned where I wanted. If anyone has any ideas, let me know.
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.
C#:
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 Defects
{
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 = (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();
// 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"];
var addRemoveTableLayoutPanel = overArchingTableLayoutPanel.Controls["addRemoveTableLayoutPanel"];
// 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");
// 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");
// 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 and Color
overArchingTableLayoutPanel.Controls["membersLabel"].Text = "&Defect List:";
overArchingTableLayoutPanel.Controls["membersLabel"].ForeColor = Color.FromName("White");
// Change the Properties Labels' Text and Color
overArchingTableLayoutPanel.Controls["propertiesLabel"].Text = "&Properties:";
overArchingTableLayoutPanel.Controls["propertiesLabel"].ForeColor = Color.FromName("White");
// 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;
}
}
}
There are a few things I wish I could change (mostly Font Sizes), but many of the items are "Read-only". I even tried creating new control to cover the ones I couldn't customize, but I could not get them positioned where I wanted. If anyone has any ideas, let me know.