C# Winform欢迎窗体实现()
方法一、program.cs 中先启动欢迎窗体,然后注册程序运行空闲去执行主程序窗体相应初始化代码
static void Main(string[] args)
{
Application.EnableVisualStyles(); //样式设置
Application.SetCompatibleTextRenderingDefault(false); //样式设置 UIForm.WelcomeForm sp = new UIForm.WelcomeForm(); //启动窗体
sp.Show(); //显示启动窗体
context = new ApplicationContext();
context.Tag = sp;
Application.Idle += new EventHandler(Application_Idle); //注册程序运行空闲去执行主程序窗体相应初始化代码
Application.Run(context);
}
//初始化等待处理函数
private static void Application_Idle(object sender, EventArgs e)
{ Application.Idle -= new EventHandler(Application_Idle);
if (context.MainForm == null)
{
MainForm mw = new MainForm(_args);
context.MainForm = mw;
mw.InitForm(); //主窗体要做的初始化事情在这里,该方法在主窗体里应该申明为public
UIForm.WelcomeForm sp = (UIForm.WelcomeForm)context.Tag;
sp.Close(); //关闭启动窗体
mw.Show(); //启动主程序窗体
} }
方法二、实现一个Splasher类,由主窗体操作欢迎窗体(受益于大神:键盘敲击者cncxz http://www.cnblogs.com/cncxz/archive/2006/07/14/450987.html)
首先创建一个名为ISplashForm的接口,该接口包含一个名为SetStatusInfo的方法以用来在启动屏幕上设置系统加载状态,代码如下:
public interface ISplashForm
{
void SetStatusInfo(string statusInfo);
}
然后实现一个Splasher类,负责欢迎窗体的Show、Close和Status更新,代码如下:
public class Splasher
{
private static Form splashForm = null;
private static ISplashForm splashInterface = null;
private static System.Threading.Thread splashThread = null;
private static string tempStatus = string.Empty; public static void Show(Type splashFormType)
{
if (splashThread != null)
{
return;
}
if (splashFormType == null)
{
throw new Exception("必须设置启动窗体");
}
splashThread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate()
{
createInstance(splashFormType);
Application.Run(splashForm);
}));
splashThread.IsBackground = true;
splashThread.SetApartmentState(System.Threading.ApartmentState.STA);
splashThread.Start();
}
public static void Close()
{
if (splashThread == null || splashForm == null) return;
try
{
splashForm.Invoke(new MethodInvoker(splashForm.Close));
}
catch (Exception ex)
{
Controller.MessageConsole.WriteLog(ex);
HttpProxy.LogProxy.DoTask(ex, Controller.SQLiteController.Biz.GetAuthor());
}
splashThread = null;
splashForm = null;
}
public static string Status
{
set
{
{
if (splashInterface == null || splashForm == null)
{
tempStatus = value;
return;
}
splashForm.Invoke(
new splashStatusChangedHandle(delegate(string str) { splashInterface.SetStatusInfo(str); }),
new object[] { value }
);
}
}
}
private static void createInstance(Type FormType)
{
object obj = FormType.InvokeMember(null, System.Reflection.BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
splashForm = obj as Form;
splashInterface = obj as ISplashForm;
if (splashForm == null)
{
throw new Exception("启动窗体类型必须是System.Windows.Forms.Form的子类");
}
if (splashInterface == null)
{
throw new Exception("启动窗体必须实现ISplashForm接口");
}
if (!string.IsNullOrEmpty(tempStatus))
{
splashInterface.SetStatusInfo(tempStatus);
}
}
private delegate void splashStatusChangedHandle(string NewStatusInfo);
}
欢迎窗体代码如下:
public partial class WelcomeForm : DevExpress.XtraEditors.XtraForm, ISplashForm
{
public WelcomeForm()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;//取消窗体边框
this.ShowInTaskbar = false;//取消任务栏图标显示
} public void SetStatusInfo(string statusInfo)
{
this.lbInfo.Text = statusInfo;
}
}
主窗体需要初始化的地方调用代码如下:
Splasher.Status = "正在初始化窗体...";
InitializeComponent();
//一系列初始化操作。。。
//为Splasher.Status复制实现消息通知
Splasher.Close();
program.cs Main函数中实现代码如下:
UI.UIForm.Splasher.Show(typeof(UIForm.WelcomeForm));
Application.Run(new MainForm(args));
C# Winform欢迎窗体实现()的更多相关文章
- Winform子窗体刷新父窗体
调用窗体(父):Form1,被调用窗体(子):Form2方法1: 所有权法//Form1://需要有一个公共的刷新方法public void Refresh_Method(){//...} ...
- Winform跨窗体操作控件(使用委托)
Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...
- WinForm 设置窗体启动位置在活动屏幕右下角
WinForm 设置窗体启动位置在活动屏幕右下角 在多屏幕环境下, 默认使用鼠标所在的屏幕 1. 设置窗体的 StartPosition 为 FormStartPosition.Manual. 2. ...
- WinForm之窗体应用程序
WinForm之窗体应用程序 基本简单数据库操作(增删改查) using System; using System.Collections.Generic; using System.Windows. ...
- WinForm开发,窗体显示和窗体传值相关知识总结
主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...
- C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)
C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率) 窗体缩放是一个困扰我多时的问题,为了解决这个问题,我从网上找了很多相关的资料,很多人说用Anchor和Dock属性,但是我试了 ...
- winform圆角窗体实现
winform圆角窗体实现 1.窗体的FormBorderStyle设置成None,不要控制边框 2.TransparencyKey和BackColor颜色设置成相同的,这样,窗体就透明了 3.以此为 ...
- C# WinForm 父窗体 子窗体 传值
C# WinForm 父窗体 子窗体 传值 本次示例效果如下:Form1为父窗体(包含textBox1.button1)Form2为子窗体(包含textBox2.button2) 父窗体给子窗体传值= ...
- c#winform自定义窗体,重绘标题栏,自定义控件学习
c#winform自定义窗体,重绘标题栏 虽然现在都在说winform窗体太丑了,但是我也能尽量让桌面应用程序漂亮那么一点点话不多说,先上图 重绘标题栏先将原生窗体设置成无边框,FormBoderSt ...
- winform基础窗体设置及基础控件
WinForm - 也叫做C/S 客户端 另:B/S是 网页端 客户端应用程序 - 是需要安装在用户电脑上才可以使用的程序 特点: 不需要联网也可以打开使用部分功能,但是现在的情况是许多功能依然需要 ...
随机推荐
- 内存优化总结:ptmalloc、tcmalloc和jemalloc
概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升.比如nginx, 它在每个连接accept后会malloc ...
- Dockerfile 部署应用执行脚本文件
FROM centos6.6:0.0.1 MAINTAINER syberos:wangmo RUN mv /etc/yum.repos.d/ /etc/yum.repos.d_bak/ && ...
- 日志收集系统搭建-BELK
前言 日志是我们分析系统运行情况.问题定位.优化分析等主要数据源头.目前,主流的业务系统都采用了分布式.微服务的形式.如果想要查看日志,就需要从不同的节点上去查看,而且对于整个业务链路也非常不清晰.因 ...
- ramfs, rootfs and initramfs
ramfs, rootfs and initramfs October 17, 2005 Rob Landley <rob@landley.net> =================== ...
- phonegap中使用自带浏览器打开链接
<center><a id="ssl2" href="#" onclick="window.open('http://127.0.0 ...
- python jvm数据
在网上找的抱歉忘了原链接了额 #!/usr/bin/env python # # import os import commands import re import sys (status1, re ...
- DAY18-Django之分页和中间件
分页 Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views h ...
- DAY9-python并发之多进程理论
一.背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...
- Logstash-2.4.1的下载(图文详解)
第一步:进入Elasticsearch的官网 https://www.elastic.co/ 第二步:点击downloads https://www.elastic.co/downloads 第三步: ...
- Linux reboot后数据库无法自动启动
需将以下由N改为Y orcl:/data/oracle_db/product/13.2.0/db_1:Y Last login: Thu Aug 27 16:36:19 2015 from 10.10 ...