At a guess, the alignment is set to right by default, but on editing is set to left, then back to right in the leave event (somewhat erroneously). The problem is most likely with the order of events. When using the keyboard, the events are fired in the following order: Enter GotFocus (user enters data) Leave (user has tabbed away) Validating Validated LostFocus When you use the mouse or call the Focus method, the events are fired in the following order: Enter GotFocus (user enters data) LostFocus (user clicks on other control) Leave Validating Validated So, if you handle the Enter and LostFocus events, what you want works when using the keyboard. If you use the likely pairs together (like Enter and Leave), when you change the TextAlign property the handle for the text control is recreated. If it had the focus (which for keyboard events, it still does) the focus is again set to the TextBox. The trick is to change the alignment at the correct time based on whether or not a mouse button was clicked: // Hook-up event handlers. myTextBox.Enter += new EventHandler(myTextBox_Enter); myTextBox.Leave += new EventHandler(myTextBox_Leave); myTextBox.LostFocus += new EventHandler(myTextBox_LostFocus); // Handle events. private void myTextBox_Enter(object sender, EventArgs e) { myTextBox.TextAlign = HorizontalAlignment.Left; } private void myTextBox_Leave(object sender, EventArgs e) { if (Control.MouseButtons != MouseButtons.None) myTextBox.TextAlign = HorizontalAlignment.Right; } private void myTextBox_LostFocus(object sender, EventArgs e) { if (Control.MouseButtons == MouseButtons.None) myTextBox.TextAlign = HorizontalAlignment.Right; } Hope this helps Steve S (One of these days I really must start using this stuff properly...)