c#控件弹幕效果_C# Form 实现桌面弹幕

使用C# Form 简单的实现了弹幕效果

1.创建一个Form 设置

2.添加一个计时器

3. 代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Drawing.Text;

using System.Linq;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace DanMu

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

Rectangle rec = Screen.GetWorkingArea(this);

this.Height = rec.Height / 3 * 2; // 3分之2

this.Width = rec.Width;

this.Location = new Point(0, 0);

this.BackColor = Color.White;

this.TransparencyKey = Color.White;

this.Opacity = 1;

AddTanMu("你开启了弹幕");

//测试运行

Thread th1 = new Thread(new ThreadStart(test));

th1.Start();

}

private void test()

{

while (true)

{

AddTanMu(Guid.NewGuid().ToString());

Thread.Sleep(new Random().Next(2000, 3500));

}

}

public void AddTanMu(String word)

{

Label label = new Label();

label.Text = word;

label.AutoSize = true;

label.ForeColor = Color.Red;

label.BackColor = Color.Transparent;

label.Font = new Font("宋体", 20);

label.Location = new Point(this.Width, new Random().Next(this.Height - label.Height));

this.Invoke(new Action(() =>

{

this.Controls.Add(label);

}));

}

private void Timer_Tick(object sender, EventArgs e)

{

//方法1:

//foreach (Label label in this.Controls)

//{

// Task.Run(() =>

// {

// //单独执行的委托,防止卡顿

// label.Invoke(new Action(() =>

// {

// //步数、速度

// for (int v = 0; v < 3; v++)

// {

// label.Left -= 2;

// }

// }));

// //超出移除

// if (label.Left + label.Width < 0)

// {

// this.Invoke(new Action(() =>

// {

// this.Controls.Remove(label);

// label.Dispose();

// }));

// }

// });

//}

//方法2:

foreach (Label label in this.Controls)

{

label.Invoke(new Action(() =>

{

//步数、速度

//【3(次数)*2(步数)=6(速度)】

for (int v = 0; v < 3; v++)

{

label.Left -= 2;

}

}));

//超出移除

if (label.Left + label.Width < 0)

{

label.Visible = false;

this.Controls.Remove(label);

}

}

}

}

}

4.效果

如有问题 请联系我 :QQ 971931543

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

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

相关文章

Makefile中怎么使用Shell if判断

/********************************************************************** Makefile中怎么使用Shell if判断* 说明&#xff1a;* 譬如可能会在Makfile中需要判断文件、文件夹的存在&#xff0c;使用shell语法* 输出一些信息&#xff0c;等等。** …

我如何使用React和Typescript在freeCodeCamp中构建天气应用

by Kelvin Mai通过凯文麦 我如何使用React和Typescript在freeCodeCamp中构建天气应用 (How I built the weather app in freeCodeCamp using React and Typescript) So I finally decided to come back to freeCodeCamp and try to finish out my Front End Development Certi…

mysql结果集相减_MySQL_(Java)使用JDBC向数据库发起查询请求

课程相关链接&#xff1a;JDBC编程和MySQL数据库课程源代码在文章末尾~Java Database Connectivity简单来说就是使用Java里面提供的一些类和方法&#xff0c;利用程序链接数据库&#xff0c;进行增删改查操作。这个过程就叫做JDBC编程接下来我们便分五步通过JDBC对MySQL中的数据…

在双系统(Windows与Ubuntu)下删除Ubuntu启动项

问题概述&#xff1a;因为在自己学习Linux的时候&#xff0c;按照网上的教程错误的删除了Ubuntu的一个内核驱动&#xff0c;导致Ubuntu不能启动。我想到的办法是重新安装系统&#xff0c;重装系统的第一步便是将Ubuntu从电脑中卸载。该笔记是有关如何删除Ubuntu启动项的。 使用…

iangularjs 模板_2018-web前端的自我介绍-优秀word范文 (5页)

本文部分内容来自网络整理&#xff0c;本司不为其真实性负责&#xff0c;如有异议或侵权请及时联系&#xff0c;本司将立即删除&#xff01;本文为word格式&#xff0c;下载后可方便编辑和修改&#xff01;web前端的自我介绍篇一&#xff1a;个人总结的web前端面试题1、自我介绍…

Teradata QueryGrid整合最佳分析技术 拓展客户选择空间

ZDNET至顶网CIO与应用频道 05月11日 北京消息&#xff1a; 为持续帮助企业克服数据散布在不同分析系统的困难&#xff0c;全球领先的大数据分析和营销应用服务供应商Teradata天睿公司宣布对Teradata QueryGrid 进行重要技术升级。此次升级新增并强化六项QueryGrid技术&#xf…

神舟笔记本bios_海尔雷神(蓝天)神舟战神游戏本风扇狂转掉电大写灯狂闪维修实例...

昨天收到一台网友寄过来的海尔雷神游戏本。说到这个游戏本品牌&#xff0c;其实有几个品牌的笔记本&#xff0c;它们的主板和模具是一模一样的&#xff0c;也就是我们看到的品牌log不一样而已。比如神舟的战神 &#xff0c;机械师&#xff0c;机械革命&#xff0c;麦本本等等。…

Oracle 学习----:查看当前时间与Sqlserver语句不一样了

oracle:select sysdate from dual sqlserver: select getdate() ---------------------试试这个---------------------------------------------------------- insert into OracleTab values(sysdate) insert into SqlserverTab values(getdate())转载于:https://www.cnblogs…

react发送和接收请求_React行为编程简介:请求,等待和阻止

react发送和接收请求by Luca Matteis卢卡马蒂斯(Luca Matteis) React行为编程简介&#xff1a;请求&#xff0c;等待和阻止 (An intro to Behavioral Programming with React: request, wait, and block) Behavioral Programming (BP) is a paradigm coined in the 2012 artic…

leetcode96. 不同的二叉搜索树(动态规划)

给定一个整数 n&#xff0c;求以 1 … n 为节点组成的二叉搜索树有多少种&#xff1f; 解题思路 *数组含义&#xff1a;dp[i] i个节点的不同组成结构 状态转移&#xff1a;任取节点为根节点&#xff0c;遍历左右子树可能出现的个数,dp[i]dp[left]dp[right] 初始化&#xff1a…

“康园圈--互联网+校园平台“项目之成果展示及项目总结

一、总体效果&#xff08;ipad端截图&#xff09; 网站前台页面网站后台管理台页面二、前台访问链接&#xff08;用pc访问效果最佳&#xff09;&#xff1a;http://www.liangzhilin.cn:9100/kangyuanquan/ &#xff08;为保证数据安全&#xff0c;后台管理链接不对外公开&#…

ajax jq 图片上传请求头_Jquery ajaxsubmit上传图片实现代码

这是数月前的事情了&#xff0c;场景是这样的&#xff1a; 在进行图片上传的时&#xff0c;我发现开发人员使用的上传图片方式是Iframe 传统的 http post 来处理的。而且未建立统一上传函数。于是将代码改造了。心想来个ajax异步上传图片吧&#xff0c;这技术应该很老套了。于…

这个免费的交互式课程在一小时内学习JavaScript

JavaScript is the most popular programming language on the web. You can use it to create websites, servers, games and even native apps. So no wonder it’s such a valuable skill in today’s job market.JavaScript是网络上最流行的编程语言。 您可以使用它来创建网…

java中二进制怎么说_面试:说说Java中的 volatile 关键词?

volatile 这个关键字可能很多朋友都听说过&#xff0c;或许也都用过。在 Java 5 之前&#xff0c;它是一个备受争议的关键字&#xff0c;因为在程序中使用它往往会导致出人意料的结果。在 Java 5之后&#xff0c;volatile 关键字才得以重获生机。volatile 关键字虽然从字面上理…

类的详解

面向对象是一种编程方式&#xff0c;此编程方式的实现是基于对类和对象的使用。类是一个模板&#xff0c;模板中包装了多个“函数”供使用&#xff08;可以讲多函数中公用的变量封装到对象中&#xff09;。对象&#xff0c;根据模板创建的实例&#xff08;即对象&#xff09;&a…

leetcode279. 完全平方数(动态规划)

给定正整数 n&#xff0c;找到若干个完全平方数&#xff08;比如 1, 4, 9, 16, …&#xff09;使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n 12 输出: 3 解释: 12 4 4 4. 解题思路 数组含义&#xff1a;dp[i]数字i对应组成和的完全平方…

什么情况不能办理房产抵押贷款 房产抵押贷能贷多少?

所谓房产抵押贷款是指以自己或亲友的房产作为抵押物向贷款机构申请贷款&#xff0c;款项可用于企业经营、买房、买车、装修及其他用途的融资方式。但是有些情况是规定不能申请房产抵押贷款的&#xff0c;而且贷款的数额是有限的&#xff0c;不是想贷多少就多少。那么&#xff0…

Android RecyclerView 二级列表实现

Android RecyclerView 二级列表实现

2数据库表增加一个字段_14个实用的数据库设计技巧!

1. 原始单据与实体之间的关系可以是一对一、一对多、多对多的关系。在一般情况下&#xff0c;它们是一对一的关系&#xff1a;即一张原始单据对应且只对应一个实体。在特殊情况下&#xff0c;它们可能是一对多或多对一的关系&#xff0c;即一张原始单证对应多个实体&#xff0c…

错误: 找不到或无法加载主类 helloworld_全面剖析虚拟机类加载机制

1.引言java源文件经过编译后生成字节码class文件&#xff0c;需要经过虚拟机加载并转换成汇编指令才能执行&#xff0c;那么虚拟机是如何一步步加载这些class文件的对于java程序员是完全透明的&#xff0c;本文尝试全面分析jvm类加载机制。2.思考开始之前我们来简单思考一下&am…