#if NET_2_0
[ComVisible(true)]
+ [ClassInterface (ClassInterfaceType.AutoDispatch)]
+ [Designer ("System.Windows.Forms.Design.TextBoxDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
#endif
public class TextBox : TextBoxBase {
#region Variables
private MenuItem delete;
private MenuItem select_all;
- private bool has_been_focused;
#if NET_2_0
private bool use_system_password_char = false;
private AutoCompleteStringCollection auto_complete_custom_source = null;
scrollbars = RichTextBoxScrollBars.None;
alignment = HorizontalAlignment.Left;
this.LostFocus +=new EventHandler(TextBox_LostFocus);
+ this.RightToLeftChanged += new EventHandler (TextBox_RightToLeftChanged);
BackColor = SystemColors.Window;
ForeColor = SystemColors.WindowText;
document.multiline = false;
}
- #endregion // Public Constructors
+ #endregion // Public Constructors
#region Private & Internal Methods
+
+ void TextBox_RightToLeftChanged (object sender, EventArgs e)
+ {
+ UpdateAlignment ();
+ }
+
private void TextBox_LostFocus(object sender, EventArgs e) {
if (hide_selection)
document.InvalidateSelectionArea ();
}
+
+ private void UpdateAlignment ()
+ {
+ HorizontalAlignment new_alignment = alignment;
+ RightToLeft rtol = GetInheritedRtoL ();
+
+ if (rtol == RightToLeft.Yes) {
+ if (new_alignment == HorizontalAlignment.Left)
+ new_alignment = HorizontalAlignment.Right;
+ else if (new_alignment == HorizontalAlignment.Right)
+ new_alignment = HorizontalAlignment.Left;
+ }
+
+ document.alignment = new_alignment;
+
+ // MS word-wraps if alignment isn't left
+ if (Multiline) {
+ if (alignment != HorizontalAlignment.Left) {
+ document.Wrap = true;
+ } else {
+ document.Wrap = word_wrap;
+ }
+ }
+
+ for (int i = 1; i <= document.Lines; i++) {
+ document.GetLine (i).Alignment = new_alignment;
+ }
+
+ document.RecalculateDocument (CreateGraphicsInternal ());
+
+ Invalidate (); // Make sure we refresh
+ }
+
+ internal override Color ChangeBackColor (Color backColor)
+ {
+ if (backColor == Color.Empty) {
+#if NET_2_0
+ if (!ReadOnly)
+ backColor = SystemColors.Window;
+#else
+ backColor = SystemColors.Window;
+#endif
+ backcolor_set = false;
+ }
+ return backColor;
+ }
+
#if NET_2_0
void OnAutoCompleteCustomSourceChanged(object sender, CollectionChangeEventArgs e) {
if(auto_complete_source == AutoCompleteSource.CustomSource) {
[Browsable (true)]
[EditorBrowsable (EditorBrowsableState.Always)]
[Localizable (true)]
+ [Editor ("System.Windows.Forms.Design.ListControlStringCollectionEditor, " + Consts.AssemblySystem_Design,
+ "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public AutoCompleteStringCollection AutoCompleteCustomSource {
get {
if(auto_complete_custom_source == null) {
[Browsable (true)]
[EditorBrowsable (EditorBrowsableState.Always)]
[DefaultValue (AutoCompleteSource.None)]
+ [TypeConverter (typeof (TextBoxAutoCompleteSourceConverter))]
public AutoCompleteSource AutoCompleteSource {
get { return auto_complete_source; }
set {
}
[DefaultValue(false)]
+ [RefreshProperties (RefreshProperties.Repaint)]
public bool UseSystemPasswordChar {
get {
return use_system_password_char;
}
set {
- use_system_password_char = value;
+ if (use_system_password_char != value) {
+ use_system_password_char = value;
+
+ if (!Multiline)
+ document.PasswordChar = PasswordChar.ToString ();
+ else
+ document.PasswordChar = string.Empty;
+ }
}
}
#endif
set {
if (value != accepts_return) {
accepts_return = value;
- }
+ }
}
}
[Localizable(true)]
[DefaultValue('\0')]
[MWFCategory("Behavior")]
+#if NET_2_0
+ [RefreshProperties (RefreshProperties.Repaint)]
+#endif
public char PasswordChar {
get {
#if NET_2_0
if (value != password_char) {
password_char = value;
if (!Multiline) {
- document.PasswordChar = value.ToString();
+ document.PasswordChar = PasswordChar.ToString ();
} else {
- document.PasswordChar = "";
+ document.PasswordChar = string.Empty;
}
this.CalculateDocument();
}
}
set {
+ if (!Enum.IsDefined (typeof (ScrollBars), value))
+ throw new InvalidEnumArgumentException ("value", (int) value,
+ typeof (ScrollBars));
+
if (value != (ScrollBars)scrollbars) {
scrollbars = (RichTextBoxScrollBars)value;
base.CalculateScrollBars();
}
}
+#if ONLY_1_1
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override int SelectionLength {
base.SelectionLength = value;
}
}
-
+#endif
public override string Text {
get {
if (value != alignment) {
alignment = value;
- document.alignment = value;
-
- // MS word-wraps if alignment isn't left
- if (Multiline) {
- if (alignment != HorizontalAlignment.Left) {
- document.Wrap = true;
- } else {
- document.Wrap = word_wrap;
- }
- }
+ UpdateAlignment ();
- for (int i = 1; i <= document.Lines; i++) {
- document.GetLine(i).Alignment = value;
- }
- document.RecalculateDocument(CreateGraphicsInternal());
OnTextAlignChanged(EventArgs.Empty);
}
}
}
#endregion // Public Instance Properties
+#if NET_2_0
+ public void Paste (string text)
+ {
+ document.ReplaceSelection (CaseAdjust (text), false);
+
+ ScrollToCaret();
+ OnTextChanged(EventArgs.Empty);
+ }
+#endif
#region Protected Instance Methods
protected override CreateParams CreateParams {
get {
}
}
+#if ONLY_1_1
protected override ImeMode DefaultImeMode {
get {
return base.DefaultImeMode;
}
}
- #endregion // Protected Instance Methods
-
- #region Protected Instance Methods
+#endif
#if NET_2_0
protected override void Dispose (bool disposing)
{
}
#endif
- protected override bool IsInputKey(Keys keyData) {
+ protected override bool IsInputKey (Keys keyData)
+ {
return base.IsInputKey (keyData);
}
- protected override void OnGotFocus(EventArgs e) {
+ protected override void OnGotFocus (EventArgs e)
+ {
base.OnGotFocus (e);
- if (!has_been_focused)
- SelectAll ();
+ if (selection_length == -1 && !has_been_focused)
+ SelectAllNoScroll ();
has_been_focused = true;
}
- protected override void OnHandleCreated(EventArgs e) {
+ protected override void OnHandleCreated (EventArgs e)
+ {
base.OnHandleCreated (e);
}
- protected override void OnMouseUp(MouseEventArgs e) {
- base.OnMouseUp (e);
+#if ONLY_1_1
+ protected override void OnMouseUp(MouseEventArgs mevent)
+ {
+ base.OnMouseUp (mevent);
}
+#endif
- protected virtual void OnTextAlignChanged(EventArgs e) {
+ protected virtual void OnTextAlignChanged (EventArgs e)
+ {
EventHandler eh = (EventHandler)(Events [TextAlignChangedEvent]);
if (eh != null)
eh (this, e);
}
- protected override void WndProc(ref Message m) {
+ protected override void WndProc (ref Message m)
+ {
switch ((Msg)m.Msg) {
case Msg.WM_LBUTTONDOWN:
+ // When the textbox gets focus by LBUTTON (but not by middle or right)
+ // it does not do the select all / scroll thing.
+ has_been_focused = true;
FocusInternal (true);
break;
}
#region Private Methods
- internal override ContextMenu GetContextMenuInternal ()
+ internal override ContextMenu ContextMenuInternal {
+ get {
+ ContextMenu res = base.ContextMenuInternal;
+ if (res == menu)
+ return null;
+ return res;
+ }
+ set {
+ base.ContextMenuInternal = value;
+ }
+ }
+
+ internal void RestoreContextMenu ()
{
- ContextMenu res = base.GetContextMenuInternal ();
- if (res == menu)
- return null;
- return res;
+ ContextMenuInternal = menu;
}
private void menu_Popup(object sender, EventArgs e) {
} else {
undo.Enabled = true;
}
+
+ if (ReadOnly) {
+ undo.Enabled = cut.Enabled = paste.Enabled = delete.Enabled = false;
+ }
}
private void undo_Click(object sender, EventArgs e) {
}
private void delete_Click(object sender, EventArgs e) {
- SelectedText = "";
+ SelectedText = string.Empty;
}
private void select_all_Click(object sender, EventArgs e) {
}
}
+ protected override void OnBackColorChanged (EventArgs e)
+ {
+ base.OnBackColorChanged (e);
+ }
+
protected override void OnFontChanged (EventArgs e)
{
base.OnFontChanged (e);
}
+
+ protected override void OnHandleDestroyed (EventArgs e)
+ {
+ base.OnHandleDestroyed (e);
+ }
#endif
}
+
+#if NET_2_0
+ internal class TextBoxAutoCompleteSourceConverter : EnumConverter
+ {
+ public TextBoxAutoCompleteSourceConverter(Type type)
+ : base(type)
+ { }
+
+ public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
+ {
+ StandardValuesCollection stdv = base.GetStandardValues(context);
+ AutoCompleteSource[] arr = new AutoCompleteSource[stdv.Count];
+ stdv.CopyTo(arr, 0);
+ AutoCompleteSource[] arr2 = Array.FindAll(arr, delegate (AutoCompleteSource value) {
+ // No "ListItems" in a TextBox.
+ return value != AutoCompleteSource.ListItems;
+ });
+ return new StandardValuesCollection(arr2);
+ }
+ }
+#endif
}