winform记录

2023-11-20

SpeechSynthesizer

下边代码多次调用,会导致内存溢出outofmemory。
SpeechSynthesizer 需要改为全局静态。

  private void button_Click(object sender, EventArgs e)
    {
    	SpeechSynthesizer speak = new SpeechSynthesizer();
        speak.SpeakAsync(speakWords);
        }

标题datagridview合并单元格

别人的用来做了点改进,解决原代码多次重绘文字,导致文字重影变粗,而且单元格容不下字体时,字体越界。
调用:

 private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            DataGridView_CellPaintingMergeCell(sender, e,2);
        }

代码:


        public static void DataGridView_CellPaintingMergeCell(object sender, DataGridViewCellPaintingEventArgs e, int mergeColumnCount)
        {
            DataGridView myGrid = sender as DataGridView;
            Brush gridBrush = new SolidBrush(myGrid.GridColor);
            SolidBrush backBrush = new SolidBrush(e.CellStyle.BackColor);
            SolidBrush fontBrush = new SolidBrush(e.CellStyle.ForeColor);
            int UpRows = 0;
            int DownRows = 0;
            int rowSpanCount = 0;
            int cellwidth = e.CellBounds.Width;
            Pen gridLinePen = new Pen(gridBrush);
            if (e.ColumnIndex < mergeColumnCount && e.RowIndex >= 0)
            {
                string curValue = e.Value == null ? "" : e.Value.ToString().Trim();
                for (int i = e.RowIndex + 1; i < myGrid.Rows.Count; i++)
                {
                    if (myGrid.Rows[i].Cells[e.ColumnIndex].Value != null)
                    {
                        if (myGrid.Rows[i].Cells[e.ColumnIndex].Value.ToString().Equals(curValue))
                        {
                            DownRows++;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                for (int i = e.RowIndex - 1; i >= 0; i--)
                {
                    if (myGrid.Rows[i].Cells[e.ColumnIndex].Value != null)
                    {
                        if (myGrid.Rows[i].Cells[e.ColumnIndex].Value.ToString().Equals(curValue))
                        {
                            UpRows++;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                rowSpanCount = DownRows + UpRows + 1;
                if (rowSpanCount <= 1)
                { return; }
                int cellheight = e.CellBounds.Height; 
                e.Graphics.FillRectangle(backBrush, new Rectangle(e.CellBounds.X, e.CellBounds.Y - cellheight * UpRows, cellwidth-1, rowSpanCount * cellheight - 1));

                SizeF fontAreaSize = e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font, cellwidth+1);
                int fontAreaHeight = (int)fontAreaSize.Height;
                int fontAreaWidth = (int)fontAreaSize.Width;
                int fontAreaX = e.CellBounds.X + (cellwidth - fontAreaWidth) / 2;
                int fontAreaY = e.CellBounds.Y - cellheight * UpRows + (cellheight * rowSpanCount - fontAreaHeight) / 2;
                if (cellwidth < fontAreaWidth)
                {
                    fontAreaWidth = cellwidth-1;
                }
                if (cellheight * rowSpanCount < fontAreaHeight)
                { fontAreaY = e.CellBounds.Y - cellheight * UpRows; fontAreaHeight = cellheight * rowSpanCount; }
                 
                e.Graphics.DrawString(curValue, e.CellStyle.Font, fontBrush, new RectangleF(fontAreaX, fontAreaY, fontAreaWidth+1, fontAreaHeight));
                // 画下边线
                if (DownRows == 0)
                {
                    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom -1, e.CellBounds.Right , e.CellBounds.Bottom -1); 
                    rowSpanCount = 0;
                }
                // 画右边线
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right-1, e.CellBounds.Top, e.CellBounds.Right-1, e.CellBounds.Bottom); 

                e.Handled = true;
            }
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

winform记录 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 通过哲学家进餐问题学习线程间协作(代码实现以leetcode1226为例)

    哲学家进餐问题 代码实现以leetcode1226为例 问题场景 解决思路 解决死锁问题 代码实现 c go 代码实现以leetcode1226为例 提到多线程和锁解决问题 就想到了os中哲学家进餐问题 问题场景 回想该问题产生场景 五个哲
  • 流形学习(Manifold Learning)

    https www cnblogs com jiangxinyang p 9314256 html 1 什么是流形 流形学习的观点 认为我们所能观察到的数据实际上是由一个低维流行映射到高维空间的 由于数据内部特征的限制 一些高维中的数据会产
  • 数学(五) -- LC[415]&[455] 字符串相加与两数相加

    1 字符串相加 1 1 题目描述 给定两个字符串形式的非负整数 num1 和num2 计算它们的和并同样以字符串形式返回 你不能使用任何內建的用于处理大整数的库 比如 BigInteger 也不能直接将输入的字符串转换为整数形式 示例 1
  • qtdesigner界面美化

    文章目录 前言 一 QSS 1 1 QSS选择器介绍 2 2 使用 二 自定义属性 2 1 添加自定义属性 前言 pyqt5能快速构建界面 但是你会发现构建出来的界面没有像我们平常用的客户端界面一样美观 现在 就让我学习一下如何美化界面 本
  • 如何防止过拟合和欠拟合

    过拟合和欠拟合是模型训练过程中经常出现的问题 两种情况正好相反 现将两者的定义及如何防止进行简要总结 1 过拟合 1 1 定义 是指模型对于训练数据拟合呈现过当的情况 反映到评估指标上就是模型在训练集上的表现很好 但是在测试集上的表现较差
  • 如何终止java线程

    终止线程的三种方法 有三种方法可以使终止线程 1 使用退出标志 使线程正常退出 也就是当run方法完成后线程终止 2 使用stop方法强行终止线程 这个方法不推荐使用 因为stop和suspend resume一样 也可能发生不可预料的结果
  • n行Python代码系列:两行代码去除抖音快手短视频尾部Logo

    老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 最近看到好几篇类似 n行Python代码 的博文 看起来还挺不错 简洁 实用 传播了知识 带来了阅读量 撩动了老猿的心 决定跟风一把 推
  • 基于Springboot+Vue图书商城系统

    目录 1 系统架构 2 系统介绍 3 运行环境 4 系统演示 5 前端搭建 6 功能展示 7 代码展示 1 系统架构 后台 SpringBoot Mybatis plus Mybatis Hutool工具包 lombok插件 前台 Vue
  • UE4 制作导出Content目录下某个文件夹内所有模型的六视图并将模型资源文件复制到指定文件夹的插件

    一 新建空白插件 在Bulid cs内加入两个模块 EditorSubsystem UnrealEd PublicDependencyModuleNames AddRange new string Core EditorSubsystem
  • 用vue写一个学校官网

    首先 你需要准备一个文本编辑器 如 Sublime Text VSCode 等 和浏览器 然后 你需要安装 Vue 你可以通过使用 npm 命令来安装 npminstall g vue
  • Ubuntu Server 22.04 安装桌面

    Ubuntu Server 22 04 安装桌面 sudo apt get update sudo apt get upgrade apt get install y ubuntu desktop 如果你不想安装一些附加的程序 可用以下命令
  • Tomcat startup.bat Using CATALINA_OPTS: ““,启动闪退

    Tomcat 控制台打开startup bat 发现Tomcat终端窗口闪退打不开 在startup bat最后加一个pause 会弹出Using CATALINA OPTS 重新设置了JAVA HOME 没用 在startup bat最前
  • python对csv文档进行读,写,追加操作(csv,pandas)

    python处理csv文档的两种方法 csv pandas python处理csv一般采用两种方法一种是import pandas 另一种是 import csv 本文将介绍这两种方法对csv进行读 写 追加的操作 1 import pan
  • mysql unique key使用_mysql unique key在查询中的使用与相关问题

    1 建表语句 CREATE TABLE employees emp no int 11 NOT NULL birth date date NOT NULL first name varchar 14 NOT NULL last name v
  • WordPress多站点伪静态的设置方式(WP站群必备)

    apache的设置方式 正常参考wordpress自带的设置方式即可 本文只介绍Ngnix及IIS下Wordpress多站点伪静态设置方式 Ngnix的wordpress多站点伪静态设置方式 wordpress固定链接设置 try file
  • Arduino for ESP8266&ESP32适用库ESPAsyncWebServer:快速入门

    文章目录 目的 特征 安装 快速体验 注意事项 总结 目的 Arduino for ESP8266 和 Arduino for ESP32 中默认就有WebServer 不过这些WebServer都是同步的 不支持同时处理多个连接 这在很多
  • AngularJs单元测试

    这篇文章主要介绍了angularJS中的单元测试实例 本文主要介绍利用Karma和Jasmine来进行ng模块的单元测试 并用Istanbul 来生成代码覆盖率测试报告 需要的朋友们可以参考下 以下可全都是干货哦 当ng项目越来越大的时候
  • 如何在Insert插入操作之后,获取自增主键的ID值

    背景说明 MyBatis中 在大多数情况下 我们向数据库中插入一条数据之后 并不需要关注这条新插入数据的主键ID 我们也知道 正常在DAO中的插入语句虽然可以返回一个int类型的值 但是这个值表示的是插入影响的行数 而不是新插入数据的主键I
  • Unity3D如何修改Button显示的文字以及深入了解Button组件

    在创建了一个Button后 结构如图 先仔细观察一下Button的Inspector视图 发现其中竟然有一个叫Button的脚本组件 新建脚本 代码如下 并将该脚本绑定给Canvas组件 using UnityEngine UI using
  • winform记录

    SpeechSynthesizer 下边代码多次调用 会导致内存溢出outofmemory SpeechSynthesizer 需要改为全局静态 private void button Click object sender EventAr