有点模仿QQ消息盒子的感觉,代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using DevComponents.DotNetBar; namespace BW_ArasSpirit
{
public partial class SystemMsgBox : Form
{
private static SystemMsgBox _initialize = null; public static SystemMsgBox getinstance()
{
if (_initialize == null)
{
_initialize = new SystemMsgBox();
}
return _initialize;
} #region 变量
private bool boolVisible = false;
#endregion #region 拖动无边框窗体
[DllImport("user32.dll")]//*********************拖动无窗体的控件
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
#endregion public SystemMsgBox()
{
InitializeComponent();
} //#region 鼠标Move Hover Leave样式区域
//private void labelShowMsg_MouseMove(object sender, MouseEventArgs e)
//{
// labelShowMsg.ForeColor = Color.FromArgb(50, 50, 50);
//} //private void labelShowMsg_MouseLeave(object sender, EventArgs e)
//{
// labelShowMsg.ForeColor = Color.FromArgb(100, 100, 100);
//}
//#endregion #region 取消窗体关闭事件
private void FormMessage_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
boolVisible = true;
timerShowWindow.Enabled = true;
timerWait.Enabled = false;
}
#endregion #region 窗体关闭
private void btnFormClose_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Close();
}
}
#endregion #region 显示窗体函数
public void ShowWindow(List<Task> wlplist,List<Task> ptasklist)
{
this.Show();
this.Opacity = 0;
boolVisible = false;
timerWait.Interval = 5000;
Point point;
try
{
point = frmSet.point;
}
catch (Exception e)
{
throw e;
}
this.Location = new Point((((point.X+10) + (point.X -10))/2)- (this.Size.Width/2), Screen.PrimaryScreen.Bounds.Height - 40 - this.Size.Height);
timerShowWindow.Enabled = true;
int wlpcount = wlplist.Count;
int pacount = ptasklist.Count;
if (wlpcount == 0)
{
lbltasklist.Text = "项目流任务-" + ptasklist[0].Ptaskname + " (" + ptasklist.Count + ")";
labelXTitle.Text ="消息盒子"+" ("+"1"+")";
}
if (pacount == 0)
{
lblwlplist.Text = "工作流任务-" + wlplist[0].Wlptaskname + " (" + wlplist.Count + ")";
labelXTitle.Text = "消息盒子" + " (" + "1" + ")";
}
if (wlpcount != 0 && pacount != 0)
{
lbltasklist.Text = "项目流任务-" + ptasklist[0].Ptaskname + " (" + ptasklist.Count + ")";
lblwlplist.Text = "工作流任务-" + wlplist[0].Wlptaskname + " (" + wlplist.Count + ")";
labelXTitle.Text = "消息盒子" + " (" + "2" + ")";
}
}
#endregion #region 控制窗体显示
private void timerShowWindow_Tick(object sender, EventArgs e)
{
if (!boolVisible)
{
this.Opacity += 0.1;
if (this.Opacity >= 1)
{
timerShowWindow.Enabled = false;
timerWait.Enabled = false;
boolVisible = false;
}
}
else
{
this.Opacity -= 0.1;
if (this.Opacity == 0)
{
boolVisible = false;
this.Hide();
timerShowWindow.Enabled = false;
timerWait.Enabled = false;
}
}
}
#endregion #region 等待
private void timerWait_Tick(object sender, EventArgs e)
{
timerShowWindow.Enabled = false;
timerWait.Enabled = false;
}
#endregion #region 移动无边框窗体事件
private void labelXTitle_MouseDown(object sender, MouseEventArgs e)
{
//ReleaseCapture();
//SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);//*********************调用移动无窗体控件函数
}
#endregion public delegate void MyDelegate(bool istrue);
public event MyDelegate MyEvent;
private void label1_Click(object sender, EventArgs e)
{
try
{
MyEvent(true);
this.Hide();
}
catch (Exception exp)
{
throw exp;
}
} public static bool istrueexit = false;
private void SystemMsgBox_Load(object sender, EventArgs e)
{ } //private void labelXTitle_MouseMove(object sender, MouseEventArgs e)
//{
// labelXTitle.ForeColor = Color.Red;
// labelXTitle.Font = new Font(labelXTitle.Font, FontStyle.Bold | FontStyle.Underline);
//} //private void labelXTitle_MouseLeave(object sender, EventArgs e)
//{
// labelXTitle.ForeColor = Color.White;
// labelXTitle.Font = new Font(labelXTitle.Font, FontStyle.Bold);
//}
}
} mian.cs public SystemMsgBox smb = SystemMsgBox.getinstance();
private void niIcon_MouseDown(object sender, MouseEventArgs e)
{
if (isRun && IsCloseWindow == "0")
{
point = Cursor.Position;
if (!smb.Visible)
{
smb.MyEvent +=new SystemMsgBox.MyDelegate(this.getreturnvalue);
smb.ShowWindow(wlptasklist,ptasklist);
timerpoint.Start();
}
}
} private Point lastpoint;
private void timerpoint_Tick(object sender, EventArgs e)
{
if (lastpoint == null) return;
if (smb.Visible)
{
//定义范围
//起始位置
lastpoint = Cursor.Position;
if (lastpoint.Y > point.Y + 100 || lastpoint.Y < point.Y - 100)
{
//超出高度隐藏
smb.Hide();
timerpoint.Stop();
}
//根据y的范围判定x的取值
int x = (((point.X + 10) + (point.X - 10)) / 2) - (211 / 2);
int y = Screen.PrimaryScreen.Bounds.Height - 40 - 97; //图标的上方,判断窗体的范围
if (lastpoint.Y < y || lastpoint.Y != y)
{
if (lastpoint.X < x || lastpoint.X > x + 211)
{
smb.Hide();
}
}
//图标的下方,判断图标的范围
//if (lastpoint.Y > y || lastpoint.Y != y)
//{
// if (lastpoint.X < x + 211 / 2 - 10 || lastpoint.X > x + 211 / 2 + 10)
// {
// smb.Hide();
// }
//}
}
}

DevComponents.DotNetBar2.dll设置样式的使用的更多相关文章

  1. [C#]AdvPropertyGrid的使用示例(第三方控件:DevComponents.DotNetBar2.dll)

    开发环境:Visual Studio 2019 .NET版本:4.5.2 效果如下: 1.初始化界面: 2.属性“人物”-自定义控件显示: 3.属性“地址”-自定义窗体显示: 4.属性“性别”-枚举显 ...

  2. DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式

    1.加载数据 构建列 //加载列 GridColumn gd = new GridColumn(); gd.Name = "第1"; gd.HeaderText = "第 ...

  3. word-wrap&&word-break,奇偶行、列设置样式

    1.word-wrap和word-break区分. 来源场景:机械租赁mvc驾驶员信息查看: 当备注的文字多的时候,第一列的值成这模样: 解决方案:设置table 的td可自动换行.首先table设置 ...

  4. 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式

    注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...

  5. Vue系列: 如何通过组件的属性props设置样式

    比如我们要在vue中显示百度地图,然后将相关的代码包装成组件,然后需要由外部来设置组件的高度,关于props的介绍,可以参考: http://cn.vuejs.org/guide/components ...

  6. 【使用 DOM】为DOM元素设置样式

    1. 使用样式表 可以通过document.styleSheets属性访问文档中可用的CSS样式表,它会返回一组对象集合,这些对象代表了与文档管理的各个样式表. 每个样式表 都由一个CSSStyleS ...

  7. 【温故而知新-Javascript】为DOM元素设置样式

    1. 使用样式表 可以通过document.styleSheets属性访问文档中可用的CSS样式表,它会返回一组对象集合,这些对象代表了与文档管理的各个样式表. 每个样式表 都由一个CSSStyleS ...

  8. 通过JavaScript设置样式和jQuey设置样式,还有随机数抛出水果的习题

    一:通过JavaScript的方式设置样式(:拿习题为例): var shuiguo = document.getElementById('fruit');     shuiguo.style.bac ...

  9. c# Chart设置样式

    一.chart属性熟悉 能够对C# chart控件属性熟悉起帮助的code, 现在分享给大家,Chart Operate Demo Code Download,如有帮助,别忘点个赞. Chart    ...

随机推荐

  1. 实验3- 熟悉常用的 HBase 操作

        石家庄铁道大学信息科学与技术学院               实验报告 2018年----2019年  第一学期                       题目:  熟悉常用的 HBase ...

  2. P 1027 打印沙漏

    转跳点:

  3. monkey命令详解《转载》

    monkey命令详解: https://blog.csdn.net/a136332462/article/details/76014412

  4. C# 互操作性入门系列(二):使用平台调用调用Win32 函数

    好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...

  5. 尝试用kotlin做一个app(三)

    新闻列表 添加新闻列表可以使用RecyclerView.但是有个问题,RecyclerView只会在内部滚动,不会带动整个屏幕滚动.所以在原根布局外层添加androidx.core.widget.Ne ...

  6. Gym - 101142C CodeCoder vs TopForces(搜索)

    题意:给定n个人在两个网站上的得分,一个人若能在任意一个网站里战胜另一个人,则认为这个人能战胜那个人.问每个人都能战胜多少人. 分析: 1.战胜具有传递性. 例如: 4 5 2 7 3 3 因为第三个 ...

  7. VS2013的工程移植到VS2008

    VS2013的工程完成后,用VS2008创建一个名称一样的工程(大小写也一样). 具体过程参考http://blog.csdn.net/sz76211822/article/details/42775 ...

  8. virtualbox 共享文件夹 操作过程

    1.在本地主机上找到 VBoxGuestAdditions.iso,我的位置就在E:\Oracle\VirtualBox\VBoxGuestAdditions.iso 2 复制到虚拟机中,我用的是 x ...

  9. 201803-1 跳一跳 Java

    思路: 一个变量plus记录叠加的数,遇到2就+2 import java.util.Scanner; public class Main { public static void main(Stri ...

  10. PAT Advanced 1110 Complete Binary Tree (25) [完全⼆叉树]

    题目 Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each ...