100 lines
2.0 KiB
C#
100 lines
2.0 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.ComponentModel;
|
|
|
|
namespace DevComponents.Tree
|
|
{
|
|
/// <summary>
|
|
/// Represents the text box for editing cell's text.
|
|
/// </summary>
|
|
[Designer(typeof(System.Windows.Forms.Design.ControlDesigner)),ToolboxItem(false)]
|
|
internal class TextBoxEx:TextBox
|
|
{
|
|
#region Private variables
|
|
private bool m_WordWrap=false;
|
|
#endregion
|
|
|
|
#region Events
|
|
public event EventHandler EndEdit;
|
|
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(EndEdit!=null)
|
|
EndEdit(this, new EventArgs());
|
|
}
|
|
else if(e.KeyCode==Keys.Escape)
|
|
{
|
|
if(CancelEdit!=null)
|
|
CancelEdit(this,new EventArgs());
|
|
}
|
|
}
|
|
|
|
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.Right)
|
|
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
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether the editing is in word-wrap mode.
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|