public static MemberInfoControl GetPropertyController(PropertyInfo info) { if (info == null) { return(null); } if (!info.CanRead) { return(null); } MemberInfoControl mic = GetPropertyController(info.Name, info.PropertyType); if (mic == null) { return(null); } mic.info = info; mic.ValueChanged += new Action <object>(o => { info.SetValue(mic.Target, o, null); }); Control outer = mic.Control; outer.Name = string.Format("lbl_{0}_{1}", info.DeclaringType.Name, info.Name); outer.Text = info.Name; mic.IsReadOnly = !info.CanWrite; //if (!TryMakeControl(info, outer)) return null; return(mic); }
private void AddMember(MemberInfo info) { if (info.Name.StartsWith("_") || info.Name.StartsWith("<")) { return; } MemberInfoControl lblPrimType = MemberInfoControl.GetPropertyController(info); if (lblPrimType != null) { this.grpPrimInfo.Controls.Add(lblPrimType.Control); } }
public static MemberInfoControl GetPropertyController(string name, Type ftype) { if (IsBitFlags(ftype)) { var fs = ftype.GetFields(BindingFlags.Static); int total = fs.Length; int len = total / 4; Size size = new System.Drawing.Size(15 * total + 60, len * 39 + 39); FlowLayoutPanel flow = new FlowLayoutPanel(); flow.FlowDirection = FlowDirection.LeftToRight; flow.AutoSize = false; flow.Size = size; flow.Dock = DockStyle.Bottom; flow.MinimumSize = size; foreach (var o in fs) { CheckBox inner = new CheckBox(); inner.Size = new System.Drawing.Size(54, 21); inner.Text = o.Name; inner.Name = string.Format("value_{0}_{1}", name, o.Name); inner.KeyUp += (delegate(object sender, KeyEventArgs e) { }); flow.Controls.Add(inner); } Control outer = new GroupBox(); outer.Size = size; outer.MinimumSize = size + new Size(5, 5); outer.Controls.Add(flow); outer.AutoSize = false; MemberInfoControl mic = new MemberInfoControl(outer); return(mic); } if (ftype.IsEnum) { ComboBox inner = new ComboBox(); inner.FormattingEnabled = true; inner.Dock = DockStyle.Bottom; inner.Name = "value_" + name; foreach (FieldInfo o in ftype.GetFields()) { if (o.IsStatic) { inner.Items.Add(o.Name); } } inner.SelectedIndex = 0; inner.SelectedIndexChanged += new System.EventHandler(delegate(object sender, EventArgs e) { }); Control outer = new GroupBox(); outer.Size = new System.Drawing.Size(149, 39); outer.Controls.Add(inner); MemberInfoControl mic = new MemberInfoControl(outer); return(mic); } if (ftype == typeof(String)) { TextBox inner = new TextBox(); inner.Dock = DockStyle.Bottom; inner.Name = "value_" + name; inner.KeyUp += (delegate(object sender, KeyEventArgs e) { }); Control outer = new GroupBox(); outer.Size = new System.Drawing.Size(149, 39); outer.Controls.Add(inner); MemberInfoControl mic = new MemberInfoControl(outer); return(mic); } if (typeof(bool).IsAssignableFrom(ftype)) { CheckBox inner = new CheckBox(); inner.Dock = DockStyle.Bottom; inner.Name = "value_" + name; inner.Text = name; inner.Size = new System.Drawing.Size(90, 39); GetResult <object> act = new GetResult <object>(); inner.KeyUp += (delegate(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { // mic.OnValueChanged(act); } }); MemberInfoControl mic = new MemberInfoControl(inner); return(mic); } if (IsNumber(ftype)) { TextBox inner = new TextBox(); inner.Dock = DockStyle.Bottom; inner.Name = "value_" + name; inner.Size = new System.Drawing.Size(50, 21); GetResult <object> act = new GetResult <object>(); inner.KeyUp += (delegate(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { // mic.OnValueChanged(act); } }); Control outer = new GroupBox(); outer.Size = new System.Drawing.Size(90, 39); outer.Controls.Add(inner); MemberInfoControl mic = new MemberInfoControl(outer); return(mic); } if (IsNumberList(ftype, 5)) { FlowLayoutPanel flow = new FlowLayoutPanel(); flow.Dock = DockStyle.Bottom; var fs = ftype.GetFields(BindingFlags.Instance | BindingFlags.Public); flow.FlowDirection = FlowDirection.LeftToRight; Size size = new System.Drawing.Size(60 * fs.Length, 39); flow.MinimumSize = size; Label label = new Label(); label.Text = ftype.Name; foreach (var o in fs) { string oName = o.Name; //labelText += oName.Length > 1 ? oName.Substring(oName.Length - 1) : oName; } label.Size = new System.Drawing.Size(20, 13); label.Name = string.Format("lbl_{0}", name); TextBox inner = new TextBox(); inner.Size = new System.Drawing.Size(60, 21); inner.Name = string.Format("value_{0}", name); inner.KeyUp += (delegate(object sender, KeyEventArgs e) { }); flow.Controls.Add(label); flow.Controls.Add(inner); Control outer = new GroupBox(); outer.MinimumSize = size + new Size(5, 10); outer.Size = size + new Size(5, 10); flow.Size = size; outer.Controls.Add(flow); MemberInfoControl mic = new MemberInfoControl(outer); return(mic); } return(null); }