using System; using System.Drawing; using System.Windows.Forms; using System.ComponentModel; namespace DevComponents.AdvTree { /// /// Represents the text box for editing cell's text. /// [Designer("System.Windows.Forms.Design.ControlDesigner, System.Design, Version= 2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),ToolboxItem(false)] internal class TextBoxEx:TextBox, ICellEditControl { #region Private variables private bool m_WordWrap=false; #endregion #region Events public event EventHandler EditComplete; public event EventHandler CancelEdit; #endregion #region Constructor public TextBoxEx():base() { this.AutoSize=false; this.BorderStyle=System.Windows.Forms.BorderStyle.None; } #endregion #region Internal Implementation protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); if(e.KeyCode==Keys.Enter && !m_WordWrap || e.KeyCode==Keys.Enter && e.Modifiers==Keys.Control) { if(EditComplete!=null) EditComplete(this, new EventArgs()); } else if(e.KeyCode==Keys.Escape) { if(CancelEdit!=null) CancelEdit(this,new EventArgs()); } } #if FRAMEWORK20 protected override void OnKeyPress(KeyPressEventArgs e) { if (!m_WordWrap && _PreventEnterBeep && e.KeyChar == (char)Keys.Enter) { e.Handled = true; } base.OnKeyPress(e); } #endif protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.Tab) { if (EditComplete != null) EditComplete(this, new EventArgs()); } return base.ProcessCmdKey(ref msg, keyData); } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged (e); ResizeControl(); } private void ResizeControl() { Graphics g=this.CreateGraphics(); SizeF size=g.MeasureString(this.Text,this.Font); int width=(int)Math.Ceiling(size.Width); int height=(int)Math.Ceiling(size.Height); if (this.Parent != null && this.Right + (width - this.Width) > (this.Parent.ClientRectangle.Right - SystemInformation.VerticalScrollBarWidth - 2)) return; if (width > this.Width) this.Width = width; if(m_WordWrap) { if(this.Parent!=null && this.Bottom+(height-this.Height)>this.Parent.Bottom) return; if(height>this.Height) this.Height=height; } } #endregion #region Public Properties /// /// Gets or sets whether the editing is in word-wrap mode. /// public bool EditWordWrap { get {return m_WordWrap;} set { m_WordWrap=value; if(m_WordWrap) { this.Multiline=true; this.ScrollBars=ScrollBars.None; } else { this.Multiline=false; } } } private bool _PreventEnterBeep = false; /// /// Gets or sets whether control prevents Beep sound when Enter key is pressed. /// [DefaultValue(false), Category("Behavior"), Description("Gets or sets whether control prevents Beep sound when Enter key is pressed.")] public bool PreventEnterBeep { get { return _PreventEnterBeep; } set { _PreventEnterBeep = value; } } #endregion #region ICellEditControl Members public void BeginEdit() { } public void EndEdit() { } public object CurrentValue { get { return this.Text; } set { this.Text = value.ToString(); } } #endregion } }