SelectAll OnGotFocus Windows.Forms.TextBox
יצא לי לא מזמן לנסות לכתוב קוד שיגרום לטקסט בתיבת הטקסט להיות במצב בחור (Selected) בזמן שתיבת הטקסט מקבלת פוקוס.
הקוד הראשון שכתבתי היה כזה:
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
SelectAll();
}
הקוד הזה אכן עבד במידה ותיבת הטקסט קבלה את הפוקוס על ידי לחיצה על טאב, במידה והתיבה קבלה את הפוקוס על ידי קליק של העכבר הטקסט לא נבחר (למעשה זה נבחר אבל מיד נעלם – בגלל המימוש הפנימי של קליק העכבר בתיבת הטקסט).
כאן מצאתי את הפתרון.
private bool _alreadyFocused = false;
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
SelectAll();
_alreadyFocused = true;
}
protected override void OnMouseUp(MouseEventArgs mevent)
{
if (!_alreadyFocused && SelectionLength == 0)
{
SelectAll();
_alreadyFocused = true;
}
base.OnMouseUp(mevent);
}
protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
_alreadyFocused = false;
}
הקוד הנ"ל מאפשר לבחור את הטקסט בזמן לחיצה על העכבר – אם זה הלחיצה הראשונה לפני שהתיבה איבדה את הפוקוס.