卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1829本站已运行4109

C&C++ Console.WriteLine转发到richTextbox的代码完善重复输出的代码

睡醒试了试那代码容易出现死循环转发至richtextbox中
C#控制台内容重定向到richTextBox中
不过没关系有解决办法
首先是这俩自定义的方法
加这俩方法就是可以以防万一了
//关闭rich文本改动检测
       private void DisableTextChangedEvent(RichTextBox richTextBox)
       {
           richTextBox.TextChanged -= richTextBox1_TextChanged;
       }
       //开启rich文本改动检测
       private void EnableTextChangedEvent(RichTextBox richTextBox)
       {
           richTextBox.TextChanged += richTextBox1_TextChanged;
       }
具体使用就是
//rich字数检测
        private void RichStartIndexLength(RichTextBox richTextBox)
        {
//(因为我的richTextBox1_TextChanged里面有好多Console.WriteLine所以就给下面修改内容时套了个禁用)
//就是修改文本时给禁用就不会触发了
//根据实际情况用别的办法也行,反正办法很多
/////////////这种使用格式//////////////////
            //DisableTextChangedEvent(richTextBox);
            //Console.WriteLine("启用字数检测");
            //EnableTextChangedEvent(richTextBox);
 
            // 获取RichTextBox1的最大字符数量
            toolStripStatusLabel3.Text = richTextBox.MaxLength.ToString();
 
            // 获取RichTextBox1的当前字符数量
            toolStripStatusLabel5.Text = richTextBox.Text.Length.ToString();
 
            // 计算当前字符数量占最大字符数量的百分比
            double percentage = Math.Round((double)richTextBox.Text.Length / richTextBox.MaxLength * 100, 2);
 
            // 检查是否达到最大值的70%
            if (percentage >= 70 && percentage <= 90)
            {
                // 字体颜色变为橘黄色
                toolStripStatusLabel4.ForeColor = Color.Orange;
                toolStripStatusLabel5.ForeColor = Color.Orange;
            }
            // 检查是否达到最大值的90%
            else if (percentage >= 90)
            {
                // 字体颜色变为红色
                toolStripStatusLabel4.ForeColor = Color.Red;
                toolStripStatusLabel5.ForeColor = Color.Red;
            }
            // 否则,字体颜色恢复为默认颜色
            else
            {
                toolStripStatusLabel4.ForeColor = Color.Green;
                toolStripStatusLabel5.ForeColor = Color.Green;
            }
 
            // 获取当前文本
            string text = richTextBox.Text;
 
            // 检查文本长度是否超过最大值
            DisableTextChangedEvent(richTextBox);
            while (text.Length > richTextBox.MaxLength)
            {
                int endOfFirstLine = text.IndexOf("\n");
                if (endOfFirstLine == -1)
                {
                    // 如果没有找到换行符,说明只有一行,直接截断
                    richTextBox.Text = text.Substring(0, richTextBox.MaxLength);
                    break;
                }
                else
                {
                    // 删除第一行
                    text = text.Remove(0, endOfFirstLine + 1);
                    richTextBox.Text = text;
                }
            }
            EnableTextChangedEvent(richTextBox);
        }
就是先把文字检测从richTextBox1_TextChanged里面剥离出来
然后加上这俩方法就可以避免了
如果想修改文本不触发TextChanged事件
可以在修改文本之前临时禁用TextChanged事件 修改后重新启用它
然后就是在load窗口时加入计时器方法调用
// 字数检测计时器
        private System.Windows.Forms.Timer _richBox1_timer;
        private void RichTimeStart()
        {
            _richBox1_timer = new System.Windows.Forms.Timer();
            _richBox1_timer.Interval = 1000; // 1秒
            _richBox1_timer.Tick += new EventHandler(OnTimedEvent);
            _richBox1_timer.Start();
        }
        private void OnTimedEvent(Object myObject, EventArgs myEventArgs)
        {
            AutoMethod();
        }
        private void AutoMethod()
        {
            RichStartIndexLength(richTextBox1);
        }
 
卓越飞翔博客
上一篇: 一键免费下载高清无水印LOGO v4.2.0
下一篇: PHP仿twitter

相关推荐

留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏