我需要留意一个文本框里面插入位置; 是有这样的一个事件? 我不想用这个定时器(例如,检查每10ms,如果位置发生变化)。
我使用Windows窗体。
我需要留意一个文本框里面插入位置; 是有这样的一个事件? 我不想用这个定时器(例如,检查每10ms,如果位置发生变化)。
我使用Windows窗体。
本地的Windows控制不会产生这种通知。 试图解决这个限制对于疼痛的处方,你就不能告诉尖号所在位置。 所述SelectionStart属性不是一个可靠的指标,光标可以在选择的任一端出现,这取决于在什么方向上的用户选定的文本。 Pinvoking GetCaretPos()给出了当控制具有焦点该回一个字符索引不是那么容易的插入位置,但映射由于TextRenderer.MeasureText不精确()。
不要去那里。 相反,解释为什么你认为你需要这个。
希望这会有所帮助。 我这样做对移动鼠标
private void txtTest_MouseMove(object sender, MouseEventArgs e)
{
string str = "Character{0} is at Position{1}";
Point pt = txtTest.PointToClient(Control.MousePosition);
MessageBox.Show(
string.Format(str
, txtTest.GetCharFromPosition(pt).ToString()
, txtTest.GetCharIndexFromPosition(pt).ToString())
);
}
大多数文本控件将具有KeyDown
和KeyUp
,你可以用它来找出按下了哪个键事件。
我已经联系到的WinForms TextBox
,因为你没有指定要使用哪种技术。
有没有直接的方法却告诉光标所在的区域内。
我不知道如果SelectionChanged事件触发evon上改变插入位置,但你应该试一试。
如果没有,你可以创建一个定时器,请检查是否SelectionStart属性值的变化。
更新:这是相当简单的创建提出了SelectionChanged事件一个TextBox类:
public class TextBoxEx : TextBox
{
#region SelectionChanged Event
public event EventHandler SelectionChanged;
private int lastSelectionStart;
private int lastSelectionLength;
private string lastSelectedText;
private void RaiseSelectionChanged()
{
if (this.SelectionStart != lastSelectionStart || this.SelectionLength != lastSelectionLength || this.SelectedText != lastSelectedText)
OnSelectionChanged();
lastSelectionStart = this.SelectionStart;
lastSelectionLength = this.SelectionLength;
lastSelectedText = this.SelectedText;
}
protected virtual void OnSelectionChanged()
{
var eh = SelectionChanged;
if (eh != null)
{
eh(this, EventArgs.Empty);
}
}
#endregion
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
RaiseSelectionChanged();
}
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
RaiseSelectionChanged();
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
RaiseSelectionChanged();
}
protected override void OnMouseUp(MouseEventArgs mevent)
{
base.OnMouseUp(mevent);
RaiseSelectionChanged();
}
}