我需要密切注意文本框內的插入符號位置;有沒有這個事件?我不想爲此使用計時器(例如,如果位置發生變化,請每隔10ms檢查一次)。vs2008/vs2010在TextBox中有插入位置發生變化的事件嗎?
我正在使用Windows窗體。
我需要密切注意文本框內的插入符號位置;有沒有這個事件?我不想爲此使用計時器(例如,如果位置發生變化,請每隔10ms檢查一次)。vs2008/vs2010在TextBox中有插入位置發生變化的事件嗎?
我正在使用Windows窗體。
我不確定SelectionChanged事件是否觸發了插入符號位置上的evon,但您應該嘗試一下。
如果沒有,您可以創建一個計時器並檢查SelectionStart屬性值是否更改。
更新:這是相當簡單的創建一個文本框類,它提出了一個SelectionChanged事件:
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();
}
}
SelectionChanged不針對Windows窗體觸發 – Abel 2011-11-21 08:26:00
@Abel,那是真的,我剛剛用一個引發SelectionChanged事件的TextBox更新了我的帖子。 – 2011-11-21 14:39:37
本地的Windows控件不產生通知這一點。試圖解決這個限制是一個痛苦的祕訣,你只是無法分辨脫字符的位置。 SelectionStart屬性是而不是的可靠指標,插入符號可以出現在選擇的任一端,具體取決於用戶選擇文本的方向。拼寫檢查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())
);
}
Winforms,webforms或WPF? – Oded 2010-12-19 18:58:30