C# 实现去除多行文本框光标闪烁,并设置行距

news2024/11/27 3:43:26

一、前言

   本篇主要通过继承RichTextBox 的方式实现去除多行文本框的光标闪烁,以及能够设置行距大小,这是因为C#提供的TextBox 和 RichTextBox 本身无这样的功能

二、代码

    封装 RichTextBox 为CustomTextBox

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace testRichTextBox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load_1(object sender, EventArgs e)
        {
            CustomTextBox textBox;
            textBox = new CustomTextBox();
            int side = 10;
            textBox.Location = new Point(  side,   side);
            textBox.Size = new Size((int)(640-3.5*side), (int)(480- 6 * side) );

            textBox.Text = "人工智能简介\n" +
                           "  人工智能(Artificial Intelligence,简称 AI)是一门研究和开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统的新兴学科。它涉及计算机科学、数学、认知科学、心理学、神经科学、语言学等多个领域。其目标是让机器具备感知、学习、推理和决策能力,从而在特定任务中表现出类似人类的智能行为。\n"+

                           "  近年来,人工智能取得了令人瞩目的进展,尤其是在机器学习和深度学习领域。机器学习通过算法分析大量数据,发现潜在模式并做出预测或决策,而深度学习则通过多层神经网络模拟人脑的工作方式,特别擅长处理图像、声音和语言等复杂任务。从自动驾驶汽车到语音助手,从医疗诊断到金融分析,AI 技术正在广泛应用于各行各业,提高生产力和生活质量。\n" +

                           "  然而,人工智能的发展也伴随着诸多挑战和争议。技术层面上,AI 系统在数据质量、算法鲁棒性和伦理问题上仍有待提升。社会层面上,人工智能的普及可能导致就业结构变化,引发经济不平等和隐私保护等问题。此外,随着 AI 技术的不断演进,人们对其潜在威胁的担忧也日益增加,包括自主武器和超级智能等话题。如何在推动技术进步的同时,确保其安全和可控,是当前亟需解决的问题。\n" +

                           "  为了应对这些挑战,全球各地的研究机构、政府和企业正积极合作,制定相关的标准和政策,确保人工智能技术能够负责任地发展。例如,许多国家已经出台了 AI 发展战略,强调技术研发和应用中的伦理规范,并倡导透明、公正和可解释性。这些举措旨在最大程度地发挥人工智能的潜力,同时防范其可能带来的负面影响。\n" +

                           "  展望未来,人工智能有望在更多领域实现突破,进一步改变我们的生活和工作方式。随着计算能力的提升和算法的优化,AI 系统将在更加复杂和动态的环境中表现出更强的适应性和智能性。从智慧城市建设到个性化教育,从精准医疗到环境保护,人工智能将成为推动社会进步的重要力量。只有在技术创新与伦理思考并重的前提下,我们才能迎接一个更加智能和美好的未来。\n";  // ;
            textBox.ForeColor = Color.Black;
            textBox.BackColor = Color.FromArgb(255, 255, 255);
            textBox.Font = new Font("宋体", 11, FontStyle.Regular);
            textBox.Multiline = true;
             textBox.Anchor = AnchorStyles.Top;

            textBox.SetReadMode();  //禁止光标闪烁,并且设置为仅仅可读

            // 将 CustomTextBox 添加到窗体中
            this.Controls.Add(textBox);

        }
    }

    public class CustomTextBox : RichTextBox
    {
        // 下面是用于在构造函数设置行距 
        public const int WM_USER = 0x0400;
        public const int EM_GETPARAFORMAT = WM_USER + 61;
        public const int EM_SETPARAFORMAT = WM_USER + 71;
        public const long MAX_TAB_STOPS = 32;
        public const uint PFM_LINESPACING = 0x00000100;
        [StructLayout(LayoutKind.Sequential)]

        private struct PARAFORMAT2
        {
            public int cbSize;
            public uint dwMask;
            public short wNumbering;
            public short wReserved;
            public int dxStartIndent;
            public int dxRightIndent;
            public int dxOffset;
            public short wAlignment;
            public short cTabCount;

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
            public int[] rgxTabs;
            public int dySpaceBefore;
            public int dySpaceAfter;
            public int dyLineSpacing;
            public short sStyle;
            public byte bLineSpacingRule;
            public byte bOutlineLevel;
            public short wShadingWeight;
            public short wShadingStyle;
            public short wNumberingStart;
            public short wNumberingStyle;
            public short wNumberingTab;
            public short wBorderSpace;
            public short wBorderWidth;
            public short wBorders;
        }

        [DllImport("user32", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, ref PARAFORMAT2 lParam);

        //下面是禁止光标闪烁
        [DllImport("user32.dll")]
        static extern bool HideCaret(IntPtr hWnd);

        private bool bReadOnly = false;
        public void SetReadMode()
        {
            ReadOnly = true;
            bReadOnly = true;
        }

        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            if (bReadOnly)
                HideCaret(Handle);
        }

        public CustomTextBox()
        {
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            BackColor = Color.Transparent;
            BorderStyle = BorderStyle.None;

            this.Multiline = true; // 设置为多行文本框
            this.ScrollBars = RichTextBoxScrollBars.Vertical; // 垂直滚动条

            // 设置默认字体颜色和背景颜色,确保它们不同
            this.ForeColor = Color.Black;
            this.BackColor = Color.White;

            //设置行距
            PARAFORMAT2 fmt = new PARAFORMAT2();
            fmt.cbSize = Marshal.SizeOf(fmt);
            fmt.bLineSpacingRule = 4;
            fmt.dyLineSpacing = 40 * (7 + 5);  // 设置行距呀,40 * (9 + 3);//((int)richTextBox1.Font.Size) * 20 * ((int)ud.Value);
            fmt.dwMask = PFM_LINESPACING;
            SendMessage(new HandleRef(this, this.Handle), EM_SETPARAFORMAT, 0, ref fmt);
        }

    }

}

三、实现效果

    去除多行文本框的光标闪烁,以及能够设置行距大小,这样看起来就更为美观简洁,如果只是用于显示多行文字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

惠海H4120 降压IC 40V 36V 30V降压5V3A 9V3A 12V3A 动态响应优异,低纹波

H4120是一款功能优良的异步降压型DC-DC转换器。它的主要特性和优势如下: 产品特性: 内置40V耐压MOS:内置的高耐压MOS使得H4120能够处理更多种的输入电压范围,增强了其适用性和可靠性。 宽输入范围:输入电压可在5V至…

【python】PyQt5初体验,窗口等组件开发技巧,面向对象方式开发流程实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

docker换源

文章目录 前言1. 查找可用的镜像源2. 配置 Docker 镜像源3. 重启 Docker 服务4. 查看dock info是否修改成功5. 验证镜像源是否更换成功注意事项 前言 在pull镜像时遇到如下报错: ┌──(root㉿kali)-[/home/longl] └─# docker pull hello-world Using default …

hive优化之逻辑类似重复

今天拿到一个二次开发的需求,只是增加一个业务类型,开发起来倒是也蛮轻松。 但是,对自己的要求不难这么低,否则可替代性也太高了。 除了完成自己的那部分开发,当然展现自己实力的,可以是优化。 1&#x…

Java基础学习-数组

目录 数组定义 注意点: 地址值是数组在内存中实际存储的地址。 案例遍历:遍历数组得到每一个元素,求数组里面所有数据和 案例:定义数组,遍历能被3整除的数字 案例:遍历一个数组,奇数将当前…

MacOS设备远程登录配置结合内网穿透实现异地ssh远程连接

文章目录 前言1. MacOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接MacOS3.1 MacOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接MacOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

Oracle最终还是杀死了MySQL

起因 大约15年前,Oracle收购了Sun公司,从而也拥有了MySQL,互联网上关于Oracle何时会“扼杀MySQL”的讨论此起彼伏。 当时流传着各种理论:从彻底扼杀 MySQL 以减少对 Oracle 专有数据库的竞争,到干掉 MySQL 开源项目&…

团队管理五个基本法则,帮你打造高效团队

团队管理是一项至关重要的工作,作为一名管理者,应该如何在团队管理中发挥作用呢?以下是团队管理的五个基本原则,它们能够帮助你打造出一个高效协作的团队。 一、以身作则 团队要保持超强的执行力,管理者必须以身作则…

【初阶数据结构】深入解析带头双向循环链表:探索底层逻辑

🔥引言 本篇将介绍带头双向循环链表底层实现以及在实现中需要注意的事项,帮助各位在使用过程中根据底层实现考虑到效率上问题和使用时可能会导致的错误使用 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔…

华为海思CPU解读

安全可靠CPU测评结果(华为海思篇) 中国信息安全测评中心于2024年5月20日发布安全可靠测评结果公告(2024年第1号),公布依据《安全可靠测评工作指南(试行)》的测评结果,自发布起有效期…

计算机网络:1概述、2物理层

目录 概述因特网网络、互连网(互联网)与因特网的区别与关系因特网发展的三个阶段因特网服务提供者(Internet Service Provider,ISP)因特网的标准化工作因特网的管理结构 三种交换电路交换分组交换报文交换 计算机网络性…

什么电脑录屏软件好用?这里有3款超实用推荐!

在当今数字化时代,电脑录屏软件已经成为了人们日常学习和工作中不可或缺的工具。无论是录制游戏实况、制作教程视频,还是保存线上会议的内容,一款好用的电脑录屏软件都显得尤为重要。可是什么电脑录屏软件好用呢?本文将为大家介绍…

如何有效地进行机台数据管理,让数据发挥更大的价值?

机台数据管理是一个涉及收集、存储、分析和保护与机台(可能是机械设备、生产线设备、医疗设备等)相关数据的过程。通常包括以下几个方面: 1.数据收集:使用传感器和数据采集系统来收集机台的性能数据,如温度、压力、速…

Shell编程规范与变量-01

一、Shell脚本概述 在一些复杂的 Linux 维护工作中,大量重复性的输入和交互操作不仅费时费力,而且容易出错,而编写一个恰到好处的 Shell 脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。 1…

【机器学习】深度学习赋能:基于 LSTM 的智能日志异常检测

目录 1. LSTM 简介 2. 日志序列异常检测概述 3. 数据预处理 3.1 日志解析 3.2 数据清洗 3.3 序列化 3.4 特征提取 示例代码 4. 构建 LSTM 模型 4.1 模型结构 4.2 模型构建示例 5. 训练 LSTM 模型 5.1 数据准备 5.2 模型训练 示例代码 6. 异常检测 6.1 异常分数…

pycharm的一些配置

1.安装 2.字体 3.新建文件模版 4.快捷键设置

openeuler一个服务异常占用cpu的排查过程

1 环境 硬件环境:LS1046A arm64 系统环境:openEuler release 22.03 (LTS-SP1) Linux kernel 4.19.26 2 问题说明 我的硬件平台需要适配一下 openEuler release 22.03 (LTS-SP1) 但是目前只能使用原来硬件平台的内核,在适配的过程中…

0 简单的图像分类

本文主要针对交通标识图片进行分类,包含62类,这个就是当前科大讯飞比赛,目前准确率在0.94左右,难点如下: 1 类别不均衡,有得种类图片2百多,有个只有10个不到; 2 像素大小不同&…

【论文笔记】Prefix-Tuning: Optimizing Continuous Prompts for Generation

题目:Prefix-Tuning: Optimizing Continuous Prompts for Generation 来源: ACL 2021 模型名称: Prefix-Tuning 论文链接: https://aclanthology.org/2021.acl-long.353/ 项目链接: https://github.com/XiangLi1999/PrefixTuning 感觉与prompt的想法很相近,那么问题…

php基础语法_面向对象

PHP php代码标记 多种标记来区分php脚本 ASP标记&#xff1a;<% php代码 %> 短标记&#xff1a; 脚本标记: 标准标记&#xff08;常用&#xff09;&#xff1a; 简写风格&#xff1a; ASP风格&#xff1a;<% php代码 %> 注意&#xff1a;简写风格和ASP风格…