Windows表单在离开事件时更改了文本

Rob*_*Rob 4 .net c# events winforms

也许我只是一个白痴,但我似乎无法在离开的同时找到一个会触发文本框的事件,但只有当文本框的内容发生变化时才会发生.有点像textchanged和leave的组合.我不能使用textchanged,因为它会在每次击键时触发.现在我将文本框的当前值存储在一个变量中,并在离开事件中进行比较,但它看起来真的很乱.

谢谢

Luc*_*ero 8

您可以创建自己的(派生)类来覆盖OnEnter,OnLeave和OnTextChanged以设置标志并触发"您的"事件.

像这样的东西:

    public class TextBox: System.Windows.Forms.TextBox {
        public event EventHandler LeaveWithChangedText;

        private bool textChanged;

        protected override void OnEnter(EventArgs e) {
            textChanged = false;
            base.OnEnter(e);
        }

        protected override void OnLeave(EventArgs e) {
            base.OnLeave(e);
            if (textChanged) {
                OnLeaveWithChangedText(e);
            }
        }

        protected virtual void OnLeaveWithChangedText(EventArgs e) {
            if (LeaveWithChangedText != null) {
                LeaveWithChangedText(this, e);
            }
        }

        protected override void OnTextChanged(EventArgs e) {
            textChanged = true;
            base.OnTextChanged(e);
        }
    }
Run Code Online (Sandbox Code Playgroud)