【WinForm详细教程三】WinForm中的NumericUpDown、PictureBox、RichTextBox及三种Timer控件

news2024/11/27 18:49:05

文章目录

    • 1. NumericUpDown
    • 2. PictureBox
    • 3.RichTextBox控件
    • 4. Timer 、System.Timers.Timer和System.Threading.Timer 计时器
      • 4.1 Timer
      • 4.2 System.Timers.Timer
      • 4.3 System.Threading.Timer

1. NumericUpDown

NumericUpDown 控件是一个用于数字输入和显示的控件,通常用于让用户选择数字值。它包括一个文本框,用于显示当前的数值,以及向上和向下的按钮,用户可以点击这些按钮来增加或减少数值。这种控件在需要用户输入数量、年龄、数量等数据时非常有用。

属性:

NumericUpDown 控件具有许多属性,以下是其中一些常用的属性:

  • Value:用于获取或设置 NumericUpDown 控件当前显示的数值。
  • Minimum:指定允许输入的最小值。
  • Maximum:指定允许输入的最大值。
  • Increment:指定在按向上或向下按钮时数值的增加或减少幅度。
  • DecimalPlaces:指定小数点后的位数,如果需要输入小数。
  • ThousandsSeparator:如果设置为 true,将在数值中插入千位分隔符。

方法:

NumericUpDown 控件提供了一些方法来操作控件的行为,其中两个常见的方法是:

  • UpButton():模拟用户点击向上按钮,增加数值。
  • DownButton():模拟用户点击向下按钮,减少数值。

事件:

  • ValueChanged:当 NumericUpDown 控件的值发生变化时触发的事件。你可以将事件处理程序与此事件关联,以在数值发生变化时执行特定操作。

案例:

public partial class FrmNumericUpDown : Form
{
    public FrmNumericUpDown()
    {
        InitializeComponent();
    }

    private void FrmNumericUpDown_Load(object sender, EventArgs e)
    {
        // 设置 NumericUpDown 控件的位置和大小
        //numericUpDown1.Location = new Point(50, 50);
        //numericUpDown1.Size = new Size(120, 30);
        // 设置允许输入的最小值和最大值
        numericUpDown1.Minimum = 0;
        numericUpDown1.Maximum = 100;
        // 设置增量值为1
        numericUpDown1.Increment = 1;
        // 设置小数点后的位数为0
        numericUpDown1.DecimalPlaces = 0;
    }

    private void btnSubtraction_Click(object sender, EventArgs e)
    {
        numericUpDown1.DownButton();
    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
        numericUpDown1.UpButton();
    }

    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        textBox1.Text = numericUpDown1.Value.ToString();
    }
}

在这里插入图片描述

2. PictureBox

PictureBox 控件是一个图像控件,用于在 Windows 窗体中显示图像。它是一个非常常见的用于显示图形元素的控件,可以用来展示图片、图标、位图等各种图像。

属性:

  • Image:用于设置或获取 PictureBox 控件中显示的图像。你可以通过代码加载图像文件或将图像直接分配给此属性来显示图像。
  • ImageLocation:这是一个字符串属性,用于指定要在PictureBox中显示的图像文件的路径。当你设置了 ImageLocation 属性时,它会自动加载和显示指定路径的图像。
  • SizeMode:SizeMode 属性用于控制图像在 PictureBox 中的显示方式。常见的选项包括:
    • Normal:图像将按其原始尺寸显示,可能会超出 PictureBox 控件的边界。
    • StretchImage:图像将被拉伸以填充整个 PictureBox 控件。
    • AutoSize:PictureBox 控件将自动调整大小以适应图像的尺寸。
    • CenterImage:图像将在PictureBox控件的中心显示,保持原始尺寸。
    • Zoom:图像将被缩放以填充 PictureBox 控件,但保持原始比例。

事件:

  • Click:当用户单击 PictureBox 控件时触发的事件。你可以将事件处理程序与此事件关联,以在用户点击图像时执行特定操作。

案例:

 public partial class frmPictureBox : Form
 {
     public frmPictureBox()
     {
         InitializeComponent();
     }

     private void pictureBox1_Click(object sender, EventArgs e)
     {
         MessageBox.Show("用户单击了图像!");
     }

     private void frmPictureBox_Load(object sender, EventArgs e)
     {
         // 设置 PictureBox 控件的位置和大小
         pictureBox1.Location = new Point(50, 50);
         pictureBox1.Size = new Size(200, 150);
         // 指定要显示的图像文件的路径
         pictureBox1.ImageLocation = "C:\\Users\\24576\\Pictures\\Microsoft.Windows.Photos_8wekyb3d8bbwe!App\\111.jpg";
         // 设置图像显示模式为拉伸以填充整个 PictureBox 控件
         pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

     }
 }

image-20231025221311835

3.RichTextBox控件

RichTextBox 控件是一个富文本编辑控件,它允许用户输入和编辑文本,并支持丰富的文本格式化选项,如字体、颜色、样式等。用户可以在 RichTextBox 中创建粗体、斜体、下划线文本,插入图片,创建超链接等。这使得 RichTextBox 在需要富文本编辑功能的应用程序中非常有用,如文档编辑器、聊天应用程序等。

常用属性:

RichTextBox 控件具有许多属性,以下是一些常用的属性:

  • Text:获取或设置 RichTextBox 中的文本内容。
  • SelectionFont:获取或设置当前所选文本的字体。
  • SelectionColor:获取或设置当前所选文本的颜色。
  • SelectionAlignment:获取或设置当前所选文本的对齐方式(左对齐、居中、右对齐等)。
  • SelectionBullet:获取或设置当前所选文本是否带有项目符号(如圆点)。
  • DetectUrls:指示是否自动检测文本中的 URL 并创建超链接。

方法:

RichTextBox 控件提供了一些方法来操作文本和控件的行为,以下是一些常用的方法:

  • Find:用于搜索并定位文本中的指定字符串,并可选地指定搜索的起始位置和搜索选项。
  • SaveFile:用于将 RichTextBox 中的内容保存到文件中。
  • LoadFile:用于从文件中加载文本内容到 RichTextBox 控件中。

事件:

RichTextBox 控件定义了一些事件,以下是一些常用的事件:

  • TextChanged:当 RichTextBox 中的文本内容发生变化时触发的事件。你可以将事件处理程序与此事件关联,以在文本发生变化时执行特定操作。
  • SelectionChanged:当用户更改选择文本时触发的事件。
  • LinkClicked:当用户点击超链接时触发的事件。这通常用于在应用程序中处理链接的导航。

案例:

 public partial class frmRichTextBox : Form
 {
     public frmRichTextBox()
     {
         InitializeComponent();
     }

     private void frmRichTextBox_Load(object sender, EventArgs e)
     {
         // 向 RichTextBox 中插入富文本内容
         richTextBox1.AppendText("这是一段富文本示例。\n");
         richTextBox1.SelectionFont = new Font("Arial", 12, FontStyle.Bold);
         richTextBox1.SelectionColor = Color.Blue;
         richTextBox1.AppendText("这是粗体蓝色文本。\n");

         // 添加一个超链接
         richTextBox1.AppendText("访问我的网站:");
         richTextBox1.SelectionFont = new Font("Arial", 12, FontStyle.Underline);
         richTextBox1.SelectionColor = Color.Blue;
         richTextBox1.AppendText("https://www.baidu.com\n");
         
         Clipboard.Clear(); //剪贴板清空
         Image bmp = Image.FromFile(@"C:\\Users\\24576\\Pictures\\Microsoft.Windows.Photos_8wekyb3d8bbwe!App\\111.jpg");
         Clipboard.SetImage(bmp);
         richTextBox1.Paste();//将剪贴板中的图片粘贴到控件中
         
     }

     private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
     {
         //启动进程,将资源与新的Process相关联
         System.Diagnostics.Process.Start(e.LinkText);
     }
 }

其它一些用法
//richTextBox1.LoadFile(@"d:\course.txt", RichTextBoxStreamType.PlainText);//加载文件到控件中
//richTextBox1.SaveFile(@"d:\courseNew.rtf"); //保存文件
//richTextBox1.SelectionAlignment = HorizontalAlignment.Center; //居中
//richTextBox1.SelectionFont = newFont;//设置选定内容或插入点的字体

在这里插入图片描述

4. Timer 、System.Timers.Timer和System.Threading.Timer 计时器

4.1 Timer

  • 作用:主要用于在Windows应用程序中执行定时任务,每隔指定的间隔时间就会引发一个事件。
  • 线程模型:它运行在UI线程中,因此可以直接修改UI元素。
  • 属性
    • Interval:设置时间间隔,单位为毫秒(ms),例如,1000ms表示1秒。
  • 事件
    • Tick:每当达到设定的时间间隔后触发。
  • 应用场景
    • 动态时间显示
    • 动画
    • 自动更新UI等
  • 性能考虑
    • 如果单次执行时间超过间隔时间,会影响下次触发。
    • 精度较差,不适用于需要高精度计时的场景。

代码示例:

public partial class frmTimer : Form
{
    public frmTimer()
    {
        InitializeComponent();
    }

    private void frmTimer_Load(object sender, EventArgs e)
    {
        label1.Text = DateTime.Now.ToString();
        timer1.Enabled = true;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        label1.Text = "当前的时间是:" + DateTime.Now.ToString();
    }
}

在这里插入图片描述

4.2 System.Timers.Timer

System.Timers.Timer 是一种基于服务的计时器,用于在指定的时间间隔触发 Elapsed 事件并执行操作。它是一个轻量级的计时器,适用于在后台执行一些定时任务。

特点:

  • System.Timers.Timer 是基于服务的计时器,因此它不依赖于 UI 线程,可以在后台执行操作。
  • 它的时间间隔可以设置,当达到指定的时间间隔时,会触发 Elapsed 事件。
  • System.Timers.Timer 不可以直接修改 UI 元素,因为它不是由 UI 线程执行的。
  • 若要在 System.Timers.Timer 中修改 UI 元素,可以使用 UI 元素的 Invoke 方法或委托来进行操作。
  • System.Timers.Timer 执行的操作是耗时的,但不会导致 UI 失去响应,也不会影响下一次的触发。

常用属性:

  • Interval:获取或设置计时器的时间间隔(以毫秒为单位)。
  • Enabled:获取或设置一个值,指示计时器是否可用。

常用方法:

  • Start():启动计时器,使其开始计时。
  • Stop():停止计时器,使其停止计时。

常用事件:

  • Elapsed:在计时器间隔时间到达后触发的事件。可以订阅此事件来执行所需的操作。

代码示例:

public partial class frmTimersTimer : Form
{
    public frmTimersTimer()
    {
        InitializeComponent();
    }

    private void frmTimersTimer_Load(object sender, EventArgs e)
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        timer.Interval = 1000;
        //timer3.AutoReset = false;//只会引发一次,就停止了
        timer.Elapsed += Timer_Elapsed; //注册事件
        timer.Start();
    }

    int count = 0;
    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        // 在委托中修改 UI 元素
        Invoke((Action)(() =>
        {
            // 修改 UI 元素
            label1.Text = "当前时间是:" + DateTime.Now.ToString();
        }));

        count += 1;
        if (count > 10)
        {
            System.Timers.Timer timer = (System.Timers.Timer)sender;
            timer.Stop();
        }
    }
}

在这里插入图片描述

4.3 System.Threading.Timer

System.Threading.Timer 是一个多线程计时器,提供了以指定的时间间隔对线程池线程执行方法的机制。它是一种轻量级的计时器,并具有高精度的特性。

特点:

  • System.Threading.Timer 提供了一种在指定的时间间隔内执行方法的机制,它使用线程池线程来执行操作。
  • 即使回调方法的执行时间超过了指定的时间间隔,也不会影响下一次的触发,因为 System.Threading.Timer 是基于时间的触发,而不是等待上一次回调方法执行完成。
  • System.Threading.Timer 不是由 UI 线程上运行的,因此不可以直接修改 UI 元素。
  • 若要在 System.Threading.Timer 中修改 UI 元素,可以使用 UI 元素的 Invoke 方法来实现跨线程访问 UI 元素。

常用属性:

  • DueTime:获取或设置计时器首次触发的延迟时间(以毫秒为单位)。
  • Period:获取或设置计时器触发的时间间隔(以毫秒为单位)。

常用方法:

  • Change(int dueTime, int period):更改计时器的触发时间和时间间隔。
  • Dispose():释放计时器使用的资源并停止计时器。

代码示例:

    public frmThreadingTimer()
    {
        InitializeComponent();
    }
    int count = 0;
    System.Threading.Timer threadTimer;
    private void frmThreadingTimer_Load(object sender, EventArgs e)
    {
        //多线程
        //period  时间间隔  0或-1 只会执行一 次,然后就停止
        //Change 可以让计时器重新启动
        //停止 period  0 -1   timer4.Dispose() 
        threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(oo => 
        {
            count += 1;
            Action<int> act = ChangeCount; //注册一个委托
            this.Invoke(act, count);
        }), null, 0, 1000);//第一个位置是一个回调函数
        //threadTimer.Change(2000, 2000);//改变延迟启动时间和时间间隔
    }
    private void ChangeCount(int count)
    {
        label1.Text = count.ToString();
        label2.Text = (count * 2).ToString();
        if (count > 10)
            threadTimer.Dispose();//计算十次后自动停止
    }
}

在这里插入图片描述

【WinForm详细教程二】WinForm中的ComboBox、CheckedListBox、DateTimePicker和MonthCalender、MaskedTextBox控件
【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

【C#进阶】C#语法中一些常用知识点总结
希望有所帮助,同时欢迎关注我,后面将更新更多相关内容!

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

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

相关文章

freeRTOS学习day5

测试demo 创建两个任务 任务一 按键按下 释放二值信号量 任务二获取 并打印执行次数 #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "FreeRTOS.h" #include "task.h" #in…

iis前端代理后台tomcat

1)tomcat服务器配置运行好&#xff0c;服务地址位于 localhost:8080/wechat 2)iis 绑定了域名 api.abc.com 希望访问 api.abc.com/wechat时&#xff0c;实际由tomcat的服务处理; 3)iis上需要添加组件 requestRouter_amd64.msi rewrite_amd64_zh-CN.msi 4)iis进行相关配置…

皮卡搜索-阿里夸克百度网盘资源超级搜索引擎

https://www.pikaso.top INDEX_SEARCH_CTA 少儿 小学 初中 高中 大学 四六级 考研 考公 教资 英语 电影 动漫 美剧 软件 电子书 编程 剪辑 设计 聚合云盘搜索接口地址&#xff1a;https://www.pikaso.top/search/?q%s% 阿里云盘搜索接口地址&#xff1a;https://www.pikaso.…

博彦科技:以金融为起点,凭借创新技术平台真打实干

【科技明说 &#xff5c; 重磅专题】 成立于1995年的博彦科技&#xff0c;已有28年左右的发展历程。 我没有想到&#xff0c;博彦科技也对AIGC领域情有独钟。博彦科技自研的数字人产品SaaS平台&#xff0c;可以接入包括百度文心一言、阿里通义千问等AI大模型产品。可见&#…

8.多线程之阻塞队列

阻塞队列和生产者消费者模型 文章目录 阻塞队列和生产者消费者模型1. 阻塞队列2. Java标准库中的阻塞队列 - BlockingQueue3. 阻塞队列的实现4. 生产者消费者模型 1. 阻塞队列 阻塞队列是什么呢&#xff1f;阻塞队列是一种特殊的队列&#xff0c;满足队列的基本要求 - 先进先出…

CMake学习教程(一)

前言 看到陈皓大神写作的《跟我一起写 Makefile》&#xff0c;我也想出一个CMake学习的专栏。 距离我接触CMake已经过了3年&#xff0c;那是我还是研一&#xff0c;不懂得底层编译的事情&#xff0c;因为导师的项目才突然转到这个方向&#xff08;项目是做工业软件的&#xf…

问题 R: 超级楼梯(递推,基础DP)查表

得到递推表达式&#xff1a; f(1)0&#xff0c;因为开始就站在第1级台阶上&#xff1b; f(2)1&#xff0c;只能从第1级台阶上1级&#xff1b; f(3)2&#xff0c;只能从第1级台阶上2级&#xff0c;或只能从第2级台阶上1级&#xff1b; f(n)f(n-2)f(n-1)&#xff0c;n>3 …

Linux学习第25天:Linux 阻塞和非阻塞 IO 实验(二): 挂起

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接&#xff0c;在正式开始学习前&#xff0c;先把本节的思维导图引入&#xff1a; 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…

Linux两条服务器实现相互免密登录

1.准备两台虚拟机&#xff0c;一台充当服务器端&#xff08;server&#xff09;&#xff0c;一台充当客户端&#xff08;client&#xff09; 服务器端&#xff08;server&#xff09;&#xff1a;192.168.75.139 客户端&#xff08;client&#xff09;&#xff1a;192.168.75…

腾讯云和阿里云双11优惠大战,服务器价格相差1块钱?

2023双十一优惠活动来了&#xff0c;同配置轻量应用服务器2核2G3M带宽&#xff0c;阿里云87元一年&#xff0c;腾讯云88元一年&#xff0c;阿里云不限制月流量&#xff0c;腾讯云限制200GB月流量&#xff0c;阿里云系统盘是50GB高效云盘&#xff0c;腾讯云是40GB SSD云硬盘&…

redis6.0源码分析:跳表skiplist

文章目录 前言什么是跳表跳表&#xff08;redis实现&#xff09;的空间复杂度相关定义 跳表&#xff08;redis实现&#xff09;相关操作创建跳表插入节点查找节点删除节点 前言 太长不看版 跳跃表是有序集合zset的底层实现之一&#xff0c; 除此之外它在 Redis 中没有其他应用。…

LED主流光源-高均匀条形光源

&#xff08;1&#xff09;产品特点&#xff1a; ① 高均匀条形照明光源&#xff0c;可制作长度最长为 2000mm 的光源&#xff1b; ② 可用 M3 螺纹孔安装&#xff0c;也可以在三个挤型槽内插入 M3 螺母安装。 &#xff08;2&#xff09;应用领域&#xff1a; ① 电子元件识别与…

掌握Python:开启未来的大门

Python&#xff0c;一门以其简洁性和多才多艺而著称的编程语言&#xff0c;正成为未来的关键技能之一。随着数字时代的到来&#xff0c;Python的发展前景愈发广泛&#xff0c;而且其易学性吸引着越来越多的学习者。 1.Python的发展前景&#xff1a; Python在数据科学、人工智能…

任正非说:我们要改善和媒体的关系,而不是要利用媒体,不要自以为聪明。

嗨&#xff0c;你好&#xff01;这是华研荟【任正非说】系列的第22篇文章&#xff0c;让我们继续聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 一、我曾经在与一个世界著名公司&#xff0c;也是我司全方位的竞争对手的合作时讲过&#xff0c;我是拉宾的…

【数学基础】【进制转换】十进制转其他进制、其他进制转十进制

十进制转其他进制 JavaScript实现 const convert (num,base2)>{return !num?0:convert(~~(num/base),base)*10(num%base); } convert(8,2) // 1000 convert(8,8) // 10 convert(8,16) // 8其他进制转十进制 JavaScript实现 const reconvert (num,base2,curr1)>{retu…

代码随想录算法训练营第4天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交 、142.环形链表II

JAVA语言编写 24. 两两交换链表中的节点 谷歌、亚马逊、字节、奥多比、百度 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。…

浙大网新:重视AI驱动,就是重视未来发展

【科技明说 &#xff5c; 重磅专题】 对于浙大网新在AI方面的发展情况&#xff0c;我是看到一个消息之后才开始有了关注&#xff0c;之前总感觉浙大网新在AI方面战略雷声大雨点小&#xff0c;然而当我看到这个消息后才发现&#xff0c;浙大网新其实也非常重视AI方面的发展。 …

【微信小程序】WXML的模板语法与WXSS模板样式

&#x1f5a5;️&#x1f5a5;️&#x1f5a5;️ 博主主页&#xff1a; &#x1f449;&#x1f3fb; &#x1f449;&#x1f3fb; &#x1f449;&#x1f3fb; 糖 &#xff0d;O&#xff0d; &#x1f6a9;&#x1f6a9;&#x1f6a9;微信小程序专栏&#xff1a;微信小程序 &…

聚量推客升级啦,加入了外卖cps、话费充值等

“聚量推客”升级啦&#xff0c;加入了生活cps模块&#xff0c;包含美团外卖cps、滴滴打车出行cps、电影票推广、话费充值等cps推广场景&#xff0c;聚量推客不止是app地推拉新和网推拉新平台&#xff0c;更是一个 综合性推广平台&#xff0c;未来会接入越来越多的推广场景&…

OpenCV官方教程中文版 —— Hough 直线变换

OpenCV官方教程中文版 —— Hough 直线变换 前言一、原理二、OpenCV 中的霍夫变换三、Probabilistic Hough Transform 前言 目标 • 理解霍夫变换的概念 • 学习如何在一张图片中检测直线 • 学习函数&#xff1a;cv2.HoughLines()&#xff0c;cv2.HoughLinesP() 一、原理…