//******************************************************************************************************
// PropertyGridExtensions.cs - Gbtc
//
// Copyright © 2012, Grid Protection Alliance. All Rights Reserved.
//
// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
// the NOTICE file distributed with this work for additional information regarding copyright ownership.
// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may
// not use this file except in compliance with the License. You may obtain a copy of the License at:
//
// http://www.opensource.org/licenses/MIT
//
// Unless agreed to in writing, the subject software distributed under the License is distributed on an
// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
// License for the specific language governing permissions and limitations.
//
// Code Modification History:
// ----------------------------------------------------------------------------------------------------
// 03/16/2007 - J. Ritchie Carroll
// Generated original version of source code.
// 10/01/2008 - J. Ritchie Carroll
// Converted to C# extensions.
// 03/20/2009 - Pinal C. Patel
// Edited code comments.
// 09/14/2009 - Stephen C. Wills
// Added new header and license agreement.
// 12/20/2012 - Starlynn Danyelle Gilliam
// Modified Header.
//
//******************************************************************************************************
using System;
using System.Reflection;
using System.Windows.Forms;
namespace GSF.Windows.Forms
{
///
/// Defines extension functions for the control.
///
public static class PropertyGridExtensions
{
///
/// Adjusts a property grid's label ratio
///
/// Property grid to adjust
/// Ratio to use use for label column
///
/// Smaller ratios (e.g., 1.75) produce a wider label column.
///
/// This function only has an effect on property grids when their Visible property is set to True. To use
/// this on an initially hidden property grid - set the property grid's Visible property to True at design
/// time, call this function during form load, then set the Visible property to False.
///
///
/// This function was written to work with the .NET 2.0 PropertyGrid control. Note that reflection is used
/// to set private properties of the property grid and as a result this function may not work with future
/// versions of the .NET property grid.
///
///
public static void AdjustLabelRatio(this PropertyGrid grid, double ratio)
{
object gridView = typeof(PropertyGrid).GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(grid);
gridView.GetType().GetField("labelRatio").SetValue(gridView, ratio);
}
///
/// Adjusts a property grid's comment area height
///
/// Property grid to adjust
/// Number of lines to display in comment area
///
///
/// This function only has an effect on property grids when their Visible property is set to True. To use
/// this on an initially hidden property grid - set the property grid's Visible property to True at design
/// time, call this function during form load, then set the Visible property to False.
///
///
/// This function was written to work with the .NET 2.0 PropertyGrid control. Note that reflection is used
/// to set private properties of the property grid and as a result this function may not work with future
/// versions of the .NET property grid.
///
///
public static void AdjustCommentAreaHeight(this PropertyGrid grid, int lines)
{
Control.ControlCollection propertyGridControls = (Control.ControlCollection)typeof(PropertyGrid).GetProperty("Controls").GetValue(grid, null);
Type itemType;
foreach (Control item in propertyGridControls)
{
itemType = item.GetType();
if (string.Compare(itemType.Name, "DocComment", true) == 0)
{
itemType.GetField("userSized", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(item, true);
itemType.GetProperty("Lines").SetValue(item, lines, null);
break;
}
}
}
}
}