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

一、前言

   本篇主要通过继承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.mzph.cn/bicheng/31194.shtml

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

相关文章

解决element-plus没有导出的成员FormInstance

使用element-plus的el-form时,报错“"element-plus"”没有导出的成员“FormInstance”。你是否指的是“FooterInstance”? 解决方法: 引入ElForm类型,在外重新定义FormInstance的类型为ElForm的实例类型 示例: import…

React+TS前台项目实战(十四)-- 响应式头部导航+切换语言相关组件封装

文章目录 前言Header头部相关组件1. 功能分析2. 相关组件代码详细注释3. 使用方式4. Gif图效果展示 总结 前言 在这篇博客中,我们将封装一个头部组件,根据不同设备类型来显示不同的导航菜单,会继续使用 React hooks 和styled-components库来…

Oracle最终还是杀死了MySQL

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

qt开发-07_radioButton

QRadioButton 部件提供了一个带有文本标签的单选框(单选按钮)。 QRadioButton 是一个可以切换选中(checked)或未选中(unchecked)状态的选项按钮。 单选框通常呈现给用户一个“多选一”的选择。也就是说&…

Emacs之复制时:禁止转换成tab符号(一百三十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

购物网站系统

摘 要 随着互联网的快速发展,不同的平台软件也不断涌出市场,在众多的平台中,购物网站深受人们的欢迎,也成为生活中不可缺少的一部分。经过对国内外购物情况的调查,社区购物在近几年来成为电商发展的新趋势&#xff0c…

递归乘法00

题目链接 递归乘法 题目描述 注意点 保证乘法范围不会溢出 解答思路 使用加法代替乘法,递归计算A * B,每个递归的过程加上一个A,且对B减1,直到B为0为止 代码 class Solution {public int multiply(int A, int B) {if (B 0…

C++ 教程 - 05 构建编译

文章目录 构建工具cmake安装与使用CMakeLists.txt编写使用案例 构建工具 cmake, Cross Platform Make, (对C)跨平台编译工具,将CMakeLists.txt 文件编译为对应的文件,如linux下的 Makefile,然后使用make命…

[WTL/Win32]_[中级]_[MVP架构在实际项目中的应用]

场景 在开发Windows和macOS的界面软件时,Windows用的是WTL/Win32技术,而macOS用的是Cocoa技术。而两种技术的本地语言一个主打是C,另一个却是Object-c。界面软件的源码随着项目功能增多而增多,这就会给同步Windows和macOS的功能造成很大负担…

Github 2024-06-21 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-21统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Python项目3Java项目2非开发语言项目2JavaScript项目1Rust项目1Dart项目1HTML项目1Vue项目1C++项目1TensorFlow: 机器学习的开源…

用户和账号

chage、useradd、passwd、usermod、userdel、groupadd、gpasswd、groupdel、groups、 用户账号初始配置文件 .bashrc .bash_profile .bash_logout finger、w、who、users chmod、chowd、umask、last 1.用户的分类 Linux 用户三种角色 超级用户&#x…

LInux驱动开发笔记(十)SPI子系统及其驱动

文章目录 前言一、SPI驱动框架二、总线驱动2.1 SPI总线的运行机制2.2 重要数据结构2.2.1 spi_controller2.2.2 spi_driver2.2.3 spi_device2.2.4 spi_transfer2.2.5 spi_message 三、设备驱动的编写3.1 设备树的修改3.2 相关API函数3.2.1 spi_setup( )3.2.2 spi_message_init( …

使用GPG来解密和加密文件详解

文章目录 使用私钥解密文件示例步骤 注意事项加密文件前提条件导入公钥加密文件输出加密文件示例步骤注意事项邮箱不是必须的情况1:有多个公钥情况2:只有一个公钥示例步骤示例1:指定公钥ID或邮箱地址示例2:密钥环中只有一个相关的…

深度学习论文: Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data

深度学习论文: Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data PDF: https://arxiv.org/abs/2401.10891.pdf 代码:https://github.com/LiheYoung/Depth-Anything PyTorch代码: http…

揭秘最酷的Matplotlib 风格库!

相信大家对Matplotlib多少有些了解,对于数据研究,最终的研究结果都尽可能利用可视化呈现,使其更加直观通俗易懂。而Matplotlib作为python家族中最为著名的绘图工具,其风格实在是有些无聊,有时会让人觉得科研工作者在可…

React中的JSX应该怎么用

什么是JSX JSX Javascript XML,JSX是一个 JavaScript 的语法扩展。 JSX可以很好地描述 UI 应该呈现出它应有交互的本质形式并且其完全可以和JavaScript融合在一起使用。而且具有 JavaScript 的全部功能。JSX 可以生成 React “元素”。 JSX代码示例: …

MicroBlaze IP核中Local Memory Bus (LMB)接口描述

LMB(Local Memory Bus)是一种同步总线,主要用于访问FPGA上的块RAM(Block RAM,BRAM)。LMB使用最少的控制信号和一个简单的协议,以保证块RAM能在一个时钟周期内被存取。所有的LMB信号都是高电平有…

【服务器03】之【Navicat完整版破解】

首先清掉电脑所有Navicat组件 虽然被卸载掉了但是没有彻底清理掉Navicat组件 在原装盘里找到Navicat清楚碎片 清空之后开始下载 navicat16 https://www.alipan.com/s/GTvP93mn3sU 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需…

AI Workflow的敏捷开发:持续创新与优化的艺术

在人工智能的浪潮中,AI Workflow作为大模型落地的关键实践,正逐渐成为技术领域的新宠。然而,随着技术的发展,我们面临着一系列挑战,如何有效地应对这些挑战,实现AI Workflow的敏捷开发,成为了一…

fyne的VBox布局02

VBox布局02 最常用的布局是layout.BoxLayout,它有两种变体,水平和垂直。box布局将所有元素排列在单行或单列中,并带有可选的空格以帮助对齐。 一步一步实现一个如下界面布局,这个界面可以使用VBox布局来实现。 这次添加了2个复…