using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; namespace DataLoader { public partial class frmPG : Form { private object _SelectedObject; public object SelectedObject { get { return _SelectedObject; } set { _SelectedObject = value; } } public frmPG(string title, object selectedObject) { InitializeComponent(); this.Text = title; _SelectedObject = selectedObject; } private void CheckValidity() { if (SelectedObject.GetType().Name == "DataLoaderSettings") { DataLoaderSettings myDls = (DataLoaderSettings)SelectedObject; string validity = myDls.ValidityCheck; pg.SelectedObject = SelectedObject; tbError.Text = validity; if (validity == "") tbError.Visible = false; else { using (Graphics gr = tbError.CreateGraphics()) { SizeF sf = gr.MeasureString(validity, tbError.Font,tbError.ClientRectangle.Width-10); tbError.Height = (int)(tbError.Font.GetHeight(gr.DpiY) + sf.Height); } tbError.Visible = true; } } else tbError.Visible = false; btnOK.Enabled = !tbError.Visible; } private void frmPG_Load(object sender, EventArgs e) { pg.PropertyValueChanged += new PropertyValueChangedEventHandler(pg_PropertyValueChanged); pg.SelectedObject = SelectedObject; Resize += new EventHandler(frmPG_Resize); CheckValidity(); MoveSplitterTo(pg, SplitterWidth); } void pg_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { if (e.ChangedItem.Label == "VEProms Exe Folder") { DataLoaderSettings dls = SelectedObject as DataLoaderSettings; if (dls != null) dls.VESamFile = dls.VEPromsPath + "\\vesam.opt"; } //if (e.ChangedItem.Label == "Procedure Folder") //{ // DataLoaderSettings dls = SelectedObject as DataLoaderSettings; // //if (dls != null) // // dls.PDFFolder = ""; //} CheckValidity(); } void frmPG_Resize(object sender, EventArgs e) { MoveSplitterTo(pg, SplitterWidth); } private int _SplitterWidth = 0; public int SplitterWidth { get { if (_SplitterWidth == 0) { using (Graphics gr = this.CreateGraphics()) _SplitterWidth = 180 * ((int)gr.DpiX) / 96; } return _SplitterWidth; } } static void MoveSplitterTo(PropertyGrid grid, int x) { // HEALTH WARNING: reflection can be brittle... FieldInfo field = typeof(PropertyGrid) .GetField("gridView", BindingFlags.NonPublic | BindingFlags.Instance); field.FieldType .GetMethod("MoveSplitterTo", BindingFlags.NonPublic | BindingFlags.Instance) .Invoke(field.GetValue(grid), new object[] { x }); } private void btnCancel_Click(object sender, EventArgs e) { PropertyDescriptor pd = pg.SelectedGridItem.PropertyDescriptor; pd.ResetValue(pg.SelectedObject); } } }