Windows Forms
Q: In Windows Forms, how do I reliably scroll a text box to the end?
A: Normally calling SelectionStart(cntrol.TextLength) followed by ScrollToCaret. AppendText is good for general use, but will not work if the control is hidden. Courtesy this source.
Q: How do I implement DragMove to move a Windows Forms form when a the user drags a control?
A: This requires three event handlers: MouseDown, MouseMove, and MouseUp, plus 2 instance members: moveMode and moveStartLocation
MouseDown: moveMode = true
MouseUp: moveMode = false
MouseMove: if (moveMode) {Location = new System.Drawing.Point((this.Location.X - moveStartLocation.X) + e.X, (this.Location.Y - moveStartLocation.Y) + e.Y); Update();}
Q: In Windows Forms, when my ComboBox selection changes, the binding is not updated until focus leaves the field. How do I make the binding update immediately?
A: This is by design in Forms; there is no way to reconfigure when the binding is updated. To resolve this, install a handler on the SelectedValueChanged event that updates the bindings:
foreach (Binding currBinding in ((System.Windows.Forms.Control)sender).DataBindings)
{
currBinding.WriteValue();
currBinding.ReadValue();
}
Yes, this is kinda yuk, but is due to binding limitations in Windows Forms - it is not as sophisticated as WPF.
Q: In Windows Forms, how do I use an object collection that requires a formatter method?
A: Add a .Format handler and set the ListControlConvertEventArgs .Value member to the string to display. On call, this member is also the object selected. For example:
private void guiSelectedDevice_Format(object sender, System.Windows.Forms.ListControlConvertEventArgs e)
e.Value = nameConverter.Convert(e.ListItem, typeof(string), null, null);