C# Form 实现桌面弹幕
使用C# Form 简单的实现了弹幕效果
0. 源代码 : https://github.com/ping9719/-desktop-barrage-
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
C# Form 实现桌面弹幕的更多相关文章
- .NET斗鱼直播弹幕客户端(下)
.NET斗鱼直播弹幕客户端(下) 在上篇文章中,我们提到了如何使用.NET连接斗鱼TV直播弹幕的基本操作.然而想要做得好,做得容易扩展,就需要做进一步的代码整理. 本文将涉及以下内容: 介绍如何使用R ...
- C#中无边框窗体移动
拖动无边框窗体Form至桌面任何位置 首先建一个Windows应用程序将Form1的 FormBorderStyle属性设置为Noe Point mouseOff;//鼠标移动位置变量 bool le ...
- Vs2010中水晶报表引用及打包
原文:Vs2010中水晶报表引用及打包 转自:http://yunhaifeiwu.iteye.com/blog/1172283 Vs2010中水晶报表引用 在sap官网中下载支持vs 2010中的水 ...
- c#实现Form窗体始终在桌面最前端显示
方法一 //调用API [System.Runtime.InteropServices.DllImport("user32", CharSet = System.Runtime.I ...
- Linux 桌面系统字体配置要略
字体显示效果测试 这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,“This is english,how does it look like?”.这一行是小字.后面几个字是加粗的宋体. ...
- CloudNotes之桌面客户端篇:插件系统的实现
[CloudNotes版本更新历史与各版本下载地址请点击此处] [CloudNotes中文系列文章汇总列表请点击此处] [查看CloudNotes源代码请点击此处] 有时候,同一个名词,针对不同的人群 ...
- 用react的ReactCSSTransitionGroup插件实现简单的弹幕动画
1,开始的思路 公司想做直播方面的项目,并想加入弹幕的功能,直播的页面已经作为一个组件放在了用react+redux写好的一个网站项目上.所以技术老大让我研究下如何用react实现弹幕的功能.下面我就 ...
- Form 详细属性--2016年12月4日
属性 名称 说明 AcceptButton 获取或设置当用户按 Enter 键时所单击的窗体上的按钮. AccessibilityObject 获取分配给该控件的 Accessib ...
- WinCE\Window Mobile程序桌面化总结
1.系统API处理 将桌面.移动API分开处理 2.一份代码,两个工程,分别编译 添加已有文件时,使用添加链接,而不是添加附本 3.桌面窗体出现位置不规律,样式不统一问题 首先,在窗体类成员加入两个成 ...
随机推荐
- 【转载】深度解读 java 线程池设计思想及源码实现
总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...
- R-FCN:
和Faster R-CNN相比,R-FCN具有更深的共享卷积网络层,这样可以获得更加抽象的特征 抽象特征的捕获能否通过“sketch/conceptual...” - guided 来进行?想法还是说 ...
- O(n log n)求最长上升子序列与最长不下降子序列
考虑dp(i)表示新上升子序列第i位数值的最小值.由于dp数组是单调的,所以对于每一个数,我们可以二分出它在dp数组中的位置,然后更新就可以了,最终的答案就是dp数组中第一个出现正无穷的位置. 代码非 ...
- 学习-JVM命令
jstat jstat (JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据. 格式:js ...
- tornado之获取参数
self.write() # 返回字符串 self.redirect() # 重定向 self.render() # 返回html页面 一. 获取url中携带的参数, 如: 127.0.0.1: ...
- Codeforces Round #551 (Div. 2) D 树形dp
https://codeforces.com/contest/1153/problem/D 题意 一颗有n个点的数,每个点a[i]为0代表取子节点的最小,1代表取最大,然后假设树上存在k个叶子,问你如 ...
- bcrypt 加密算法
MD5 的特性 MD5 是一种加密算法,在调用这个算法的时候,提供一个密码的明文, 调用的结果,得到一个 32 位长度的密文: MD5 算法的特性:相同的字符串,如果多次调用 md5 算法,得到的结果 ...
- (九)golang--标识符的命名规则
标识符的概念: (1)各种变量.方法等命名时使用的字符序列被称为标识符: (2)凡是可以自己起名字的都可以叫标识符: 标识符的命名规则: (1)由26个英文字母大小写,0-9,_组成 (2)数字不可以 ...
- 如何修改SQL Server 2008 R2数据库的内存
本篇经验将和大家介绍如何修改SQL Server 2008 R2数据库的内存,希望对大家的工作和学习有所帮助! 工具/原料 SQL Sever 2008 R2数据库已安装 方法/步骤 1 打开 ...
- Vue官方文档笔记
1.如何创建一个Vue实例对象? var vm = new Vue({ el: "#app", //标签id 或 标签类名 data:{ //双向绑定的数据 message: &q ...