zoukankan      html  css  js  c++  java
  • RichTextBox控件的几点有意思的东西

    今天在改一个之前项目中的前端客户端工具,是一个Windows Forms的程序。里面用到了RichTextBox控件,也就是所谓的富文本框。这里总结几个有意思的东西

    1. 富文本框的字体样式修改

    image

    private void btChangeFont_Click(object sender, EventArgs e)
    {
        Font originalFont = txtContents.SelectionFont;
        Font newFont = new Font(originalFont.FontFamily, 20, FontStyle.Bold | FontStyle.Underline);
        txtContents.SelectionFont = newFont;
        txtContents.SelectionColor = Color.Red;
    }

    image

    2. 当内容在不断添加到时候,怎么样让它自动滚动到底部?

    image

    private void btAutoScroll_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 1000; i++)
        {
            txtContents.AppendText("测试文字" + i.ToString() + Environment.NewLine);
            txtContents.ScrollToCaret();
        }
    }

    image

    3. 在多线程中如何访问它

    默认情况下,如果我们在辅助线程中是不可以访问RichTextBox的。(其他控件其实也是一样)

    private void btAsync_Click(object sender, EventArgs e)
    {
        EventHandler handler = new EventHandler(SomeMethod);
        handler.BeginInvoke(sender, e, null, null);

    }

    void SomeMethod(object sender, EventArgs e)
    {
        txtContents.AppendText("这是通过辅助线程添加的文字");
    }

    如果点击我们的按钮,就会异步调用SomeMethod方法,该方法试图去添加一行文字到RichTextBox中

    image

    这个问题是普遍存在的,它有他的合理性。那么,如果你硬是要这么做,咋办呢

    第一个做法很简单,但不是很推荐

    在窗体初始化中,Control.CheckForIllegalCrossThreadCalls = false;//禁用掉线程访问之间的检查

    public Form1()
    {
        InitializeComponent();
        Control.CheckForIllegalCrossThreadCalls = false;
    }

    image

    各位同学注意了,CheckForIllegalCrossThreadCalls这个方法是点不出来的,就是没有智能感知。因为这确实不是很推荐的,跨线程操作,会有安全问题。所以。。。

    那么,该怎么办呢?事实上,这没有什么大不了的。如果你对多线程编程了解的话

    void SomeMethod(object sender, EventArgs e)
    {

        this.Invoke(new UpdateUIHandler(UpdateUI));
    }


    delegate void UpdateUIHandler();
    void UpdateUI()
    {
        txtContents.AppendText("这是通过辅助线程添加的文字");
    }

     

    4. 如何让它支持Tab键

    这个问题比较简单,设置一个属性

    txtContents.AcceptsTab = true;

    5.打开和保存rtf文件

    txtContents.LoadFile();
    txtContents.SaveFile();

  • 相关阅读:
    jquery-4 完整表单验证实例
    从程序员的角度分析微信小程序(编程语言:用到什么学什么)
    微信程序开发
    css3-4 css3边框样式
    css3-3 css3背景样式
    boxfilter 实现
    opencv在arm和x86在移植
    PAT 1033. To Fill or Not to Fill (贪婪)
    [git] fatal: This operation must be run in a work tree
    spring与mybatis集成和事务控制
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1498110.html
Copyright © 2011-2022 走看看