Wpf TextChanged事件导致死循环,事件触发循环问题

1、实例:

说明:当TextBox控件的Text内容发生变化时,TextChanged事件触发,并且会立即同步执行。

基于这个特点,设置一个全局变量标识,ChangeTxtB,如果是正在修改txtB的时候,不执行txt_TextChanged事件内容。

这样就可以解决TextChanged事件带来的死循环问题。

//比特
private void txtb_TextChanged(object sender, TextChangedEventArgs e)
{
    if (ChangeTxtB) //如果当前是正在修改txtB,后面的代码不执行
        return;
    try
    {
        if (string.IsNullOrEmpty(txtb.Text))
        {
            txtb.Focus();
            return;
        }

        double number = double.Parse(txtb.Text);
        txtB.Text = (number / 8.0).ToString();
    }
    catch (Exception ex)
    {
        ShowError(ex.Message);
    }
}
//标识txtB对话框正在修改数据
private bool ChangeTxtB = false;
//字节
private void txtB_TextChanged_1(object sender, TextChangedEventArgs e)
{
label1.Content = "";
try
{
if (string.IsNullOrEmpty(txtB.Text))
{
    txtB.Focus();
    return;
}
//标识正在修改txtB
ChangeTxtB = true;
//吉字节变换是统一修改其他内容
double number = double.Parse(txtB.Text);
txtb.Text = (number * 8).ToString();//当修改Text属性时,txtb_TextChanged会立即同步触发
txtKB.Text = (number / 1024.0).ToString();
txtMB.Text = (number / 1024.0 / 1024.0).ToString();
txtGB.Text = (number / 1024.0 / 1024.0 / 1024.0).ToString();
txtTB.Text = (number / 1024.0 / 1024.0 / 1024.0 / 1024.0).ToString();
}
catch (Exception ex)
{
ShowError(ex.Message);
}
//标识结束修改txtB
ChangeTxtB = false;
}
时间: 2024-08-19 12:47:12

Wpf TextChanged事件导致死循环,事件触发循环问题的相关文章

IOS自带输入法中文不触发KEYUP事件导致vue双向绑定错误问题

先上图: 可以看到输入框中的内容和弹出框的内容不一致, <input class="am-fr labRight" id="txcode" type="text" placeholder="请输入纳税人识别号" v-model="invBuyer.TaxCode" /> 文本框使用的是vue的v-model双向绑定,在android中是ok的,在IOS上不行, 导致问题出现的原因是IOS自带输入

正确处理WPF中Slider值改变事件的方式

最近在用WPF数据绑定重写一下播放器项目时遇到的关于Slider的问题,在窗体透明度调节和播放进度调节上用了Slider控件.调节窗体透明度我是 这么想的:将窗体的Opacity属性的值与Slider的值绑定不就可以了,Opacity="{Binding ElementName=Slider,Path=Value,Mode=OneWay}",这样根本不用处理Slider的值改变事件 (ValueChanged).不过我要做保存设置的功能,因此肯定要记录Slider的值咯,于是处理一下V

WPF 中的 loaded 事件和 Initialized 事件

在 WPF 中, 控件有 Loaded 和 Initialized 两种事件. 初始化和加载控件几乎同时发生, 因此这两个事件也几乎同时触发. 但是他们之间有微妙且重要的区别. 这些区别很容易让人误解. 这里介绍我们设计这些事件的背景. (不仅适用于 Control 类, 同样在通用类如 FrameworkElement 和 FrameworkContentElement 类也适用.) 下面是个小故事: Initialized 事件只说: 这个元素已经被构建出来,并且它的属性值都被设置好了,所以

WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别

本文摘要: 1:什么是路由事件: 2:中断事件路由: 3:自定义路由事件: 4:为什么需要自定义路由事件: 5:什么是冒泡事件和预览事件(隧道事件): 1:什么是路由事件 WPF中的事件为路由事件,所谓路由事件,MSDN定义如下: 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由 RoutedEvent 类的实例提供支持并由 Windows Presentation Foundation (W

移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法

这两天自己在写一个手机网页,用到了触屏滑动的特效,就是往右滑动的时候左侧隐藏的菜单从左边划出来. 做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且touchend也经常不触发. 之后百度了一下这个问题,原因是 主要是由于200ms超时导致内核不一定会一直处理touchmove事件,一旦超时会将后续所有的事件转交给UI处理,导致touchmove不会一直触发. 为了解决开发者需要,建议开发者在touchstart时调用event.preventDe

WPF编程宝典之路由事件(一)

路由事件是更具有传播能力的事件--它们可在元素树中向上冒泡和向下隧道传播,并且沿着传播路径被事件处理程序处理. 可通过传统的方式使用路由事件--通过关联具有正确签名的事件处理程序. 1.定义.注册和封装路由事件 与依赖项属性一样,路由事件由只读的静态字段表示,在静态构造函数中注册,并通过标准的.net事件定义进行封装. 1 public abstract class ButtonBase : ContentControl 2 { 3 //定义事件 4 public static readonly

wpf自定义控件中使用自定义事件

wpf自定义控件中使用自定义事件 1 创建自定义控件及自定义事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36     /// <summary>     /// 演示用的自定义控件     /// </summary>     public class ExtButton : Button     {         public

WPF的路由事件、冒泡事件、隧道事件(预览事件)

原文:WPF的路由事件.冒泡事件.隧道事件(预览事件) 本文摘要: 1:什么是路由事件: 2:中断事件路由: 3:自定义路由事件: 4:为什么需要自定义路由事件: 5:什么是冒泡事件和预览事件(隧道事件): 1:什么是路由事件 WPF中的事件为路由事件,所谓路由事件,MSDN定义如下: 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由 RoutedEvent 类的实例提供支持并由 Window

苹果手机在微信QQ上输入,导致页面事件触点错乱。

部分苹果手机在微信QQ上,输入之后,如果页面有滚动内容.内容上有对应的时间,那么输入结束,再次触发事件,会发现事件的触点变了. 例如:按钮A 因为 输入法弹出移动了,输入法隐藏回去后,按钮A 回滚到原来的位置,但是事件却已经不在按钮A上了. 对此的方式可以采用,重置页面  scrollTop , // 重置苹果手机部分机型输入法导致页面滚动后,事件触点错位问题 $(document).on('blur', 'input,textarea', function () { //解决iPhoneX系列