返回网界网首页 注册 登录 会员 标签 宣传中心 我的 控制面板 修改密码 道具 帮助
网界论坛 » 网界学堂 [图形 SEO 程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
] » 程序设计 » WinForm界面开发
‹‹ 上一主题 | 下一主题 ››
121207
UID
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
1#大中小
[活动]大奖送不停!预测4强排名及 最终冠军得主
【招募】有奖调查 轻松拿8合1 工具箱+led手电筒!
【活动】iPhone等你拿!企业网 络
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
大赛火热进行中
【专题】网界网论坛每周精 彩专题隆重登场,不断更新中
【防骗识骗有高招】教你如何选 好IDC服务商
【热点】杀毒软件厂商,谁动了 我的奶酪?
【一周服务器专区精华帖】服务 器也要“足球”技术
【精贴】教你如何挑选3G上网卡 ?
【无线路由器】TP-link 无线路 由器家庭ADSL设置技巧
【八卦】江西又发洪水~~~2012 是真的要来了?
【八卦】多图,可爱到爆,超囧 搞笑的WIN7壁纸
【IT圈】多图!~最闪耀!最文 艺!最有知性范儿的笔记本爆光!
打印
拿什么捍卫我的“隐私”? 网界论坛带薪版主招募中 VPN/上网行为管理
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
下载
J力豆换礼品,千元大奖等你
拿
世界杯有奖竞猜 谁是真正
冠军
WinForm界面开发
精灵使者
50287
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
发
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
于 2009-9-23 12:04 只看该作者
WinForm界面开发
WinForm界面开发之布局
控件"WeifenLuo.WinFormsUI.Docking"的使用
布局控件"WeifenLuo.WinFormsUI.Docking"是一个非
常棒的开源控件,用过的人都深有体会,该控件之强大、
美观、不亚于商业控件。而且控件使用也是比较简单的。
先看看控件使用的程序界面展示效果。
配电网络可视化管理系统的界面截图:
PDFmyURL.com
加为好友 当前离线
深田之星送水管理系统网络版的界面截图:
PDFmyURL.com
TOP快来赚豆啊!千元诱人大奖免费等你拿!
121207 2#大中小
我在几个共享软件都使用了该布局控件,我们先以“深田之星送水管理系统网络版”这款软件为例,介绍如何完成该界面的设计
及显示的。
1、首先,我们添加一个主界面窗体,命名为MainForm,该窗体IsMdiContainer设置为True,也就是设置为多文档窗体格式。
拖拉布局控件"WeifenLuo.WinFormsUI.Docking.DockPanel"到主窗体MainForm中,并设置下面几个属性:
Dock为Fill、DocumentStyle为DockingMdi、RightToLeftLayout为True。
这几个属性的意思应该不难,Dock就是 覆盖整个MDI窗体的区域,DocumentStyle为多文档类型、RightToLeftLayout是指
新打开的窗口都停靠在右边区域。
发表于 2009-9-23 12:04 只看该作者
我们看看设计界面视图如下所示。
PDFmyURL.com
UID
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
精灵使者
50287
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
2、主界面其实基本上就可以了,另外我们看到“送水管理系统网络版”的界面中有一个左边的工具栏,它其实也是在一个停靠
的窗体中的,我们增加一个窗体用来承载相关的工具快捷键按钮展示。命名为MainToolWindow的窗体,继承
自WeifenLuo.WinFormsUI.Docking.DockContent.
PDFmyURL.com
TOP好消息!网界网为用户提供免费网络产品测评机会,要测的报名啦!
其中的“HideOnClose”属性很重要,该属性一般设置为True,就是指你关闭窗口时,窗体只是隐藏而不是真的关闭。
左边的窗口MainToolWindow实现停靠的代码是在MainForm的构造函数或者Load函数中加载即可。
mainToolWin.Show(this.dockPanel, DockState.DockLeft);
3、对于工具窗口我们已经完成了,但是主业务窗口还没有做,也就是下面的部分内容。
PDFmyURL.com
121207
UID
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
3#大中小
精灵使者
50287
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
发表于 2009-9-23 12:04 只看该作者
为了方便,我们定义一个基类窗体,命名为BaseForm,继承自DockContent,如下所示
public class BaseForm : DockContent
然后每个业务窗口继承BaseForm即可。
4、剩下的内容就是如何在主窗体MainForm中展示相关的业务窗口了,展示的代码如下所示
public partial class MainForm : Form
{
#region 属性字段
private MainToolWindow mainToolWin = new MainToolWindow();
private FrmProduct frmProduct = new FrmProduct();
private FrmCustomer frmCustomer = new FrmCustomer();
private FrmOrder frmOrder = new FrmOrder();
private FrmStock frmStock = new FrmStock();
private FrmComingCall frmComingCall = new FrmComingCall();
private FrmDeliving frmDeliving = new FrmDeliving();
private FrmTicketHistory frmHistory = new FrmTicketHistory();
#endregion
public MainForm()
{
InitializeComponent();
SplashScreen.Splasher.Status = "正在展示相关的内容 ";
System.Threading.Thread.Sleep(100);
mainToolWin.Show(this.dockPanel, DockState.DockLeft);
frmComingCall.Show(this.dockPanel);
frmDeliving.Show(this.dockPanel);
frmHistory.Show(this.dockPanel);
PDFmyURL.com
TOP2010年4月份《IDC访问质量测试排名》测试点征集帖
121207
UID
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
4#大中小
frmStock.Show(this.dockPanel);
frmProduct.Show(this.dockPanel);
frmCustomer.Show(this.dockPanel);
frmOrder.Show(this.dockPanel);
SplashScreen.Splasher.Status = "初始化完毕 ";
System.Threading.Thread.Sleep(50);
SplashScreen.Splasher.Close();
}
精灵使者
50287
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
发表于 2009-9-23 12:04 只看该作者
5.下面贴出基本窗口的基本操作事件函数
private void menu_Window_CloseAll_Click(object sender, EventArgs e)
{
CloseAllDocuments();
}
private void menu_Window_CloseOther_Click(object sender, EventArgs e)
{
if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{
Form activeMdi = ActiveMdiChild;
foreach (Form form in MdiChildren)
{
if (form != activeMdi)
{
PDFmyURL.com
加为好友 当前离线
form.Close();
}
}
}
else
{
foreach (IDockContent document in dockPanel.DocumentsToArray())
{
if (!document.DockHandler.IsActivated)
{
document.DockHandler.Close();
}
}
}
}
private DockContent FindDocument(string text)
{
if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{
foreach (Form form in MdiChildren)
{
if (form.Text == text)
{
return form as DockContent;
}
}
return null;
}
else
{
PDFmyURL.com
foreach (DockContent content in dockPanel.Documents)
{
if (content.DockHandler.TabText == text)
{
return content;
}
}
return null;
}
}
public DockContent ShowContent(string caption, Type formType)
{
DockContent frm = FindDocument(caption);
if (frm == null)
{
frm = ChildWinManagement.LoadMdiForm(Portal.gc.MainDialog, formType) as
DockContent;
}
frm.Show(this.dockPanel);
frm.BringToFront();
return frm;
}
public void CloseAllDocuments()
{
if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{
foreach (Form form in MdiChildren)
{
PDFmyURL.com
TOP2010网界网论坛带薪版主火热招募中,欢迎有识之士加入!
121207
UID
5#大中小
{
form.Close();
}
}
else
{
IDockContent[] documents = dockPanel.DocumentsToArray();
foreach (IDockContent content in documents)
{
content.DockHandler.Close();
}
}
}
本文示例源代码或素材下载
精灵使者
50287
发表于 2009-9-23 12:05 只看该作者
WinForm界面开发之"SplashScreen控件"
我们在开发桌面应用程序的时候,由于程序启动比较慢,往往为了提高用户的体验,增加一个闪屏,也就是SplashScreen,
好处有:1、让用户看到加载的过程,提高程序的交互响应;2.可以简短展示或者介绍程序的功能或者展示Logo,给客户较深的
印象。
本人在开发的共享软件中,对于启动比较慢的程序,也倾向于引入这个控件来展示下,先看看软件启动的时候的效果
PDFmyURL.com
UID
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
50287
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
中间的那些文字“正在展示相关的内容”可以根据加载的进度显示不同的内容,当然最好简单扼要了,其他的内容你也可以视需
要做相应变化,因为这个是一个Form,你想改变什么就改变什么的。
看看闪屏代码如何使用先,首先我们在入口的Main函数中开始,看看代码就知道
public class Portal
{
public static GlobalControl gc = new GlobalControl();
///
/// 应用程序的主入口点。
///
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//登陆界面
Logon dlg = new Logon();
dlg.StartPosition = FormStartPosition.CenterScreen;
if (DialogResult.OK == dlg.ShowDialog())
{
PDFmyURL.com
TOP不容错过的一周网界网论坛精彩专题大放送 不断更新中
if (dlg.bLogin)
{
SplashScreen.Splasher.Show(typeof(SplashScreen.frmSplash));
gc.MainDialog = new MainForm();
gc.MainDialog.StartPosition = FormStartPosition.CenterScreen;
Application.ThreadException += new
System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(gc.MainDialog);
}
}
dlg.Dispose();
}
private static void Application_ThreadException(object sender,
System.Threading.ThreadExceptionEventArgs ex)
{
LogHelper.Error(ex.Exception);
string message = string.Format("{0}\r\n操作发生错误,您需要退出系统么?",
ex.Exception.Message);
if (DialogResult.Yes == MessageUtil.ShowYesNoAndError(message))
{
Application.Exit();
}
}
}
PDFmyURL.com
121207
UID
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
6#大中小
TOP快来赚豆啊!千元诱人大奖免费等你拿!
121207 7#大中小
精灵使者
50287
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
发表于 2009-9-23 12:05 只看该作者
上面中最关键的代码是:SplashScreen.Splasher.Show(typeof(SplashScreen.frmSplash));
之所以贴出全部的代码,也是供大家参考如何启动登陆窗口并运行主窗体程序的,上面的GlobalControl类是一个公共类,用
来放置一些全局变量或者通用操作的函数。Application_ThreadException是用来在程序运行出错的时候,友好提示一下用户,是
否退出,否则有一些莫名其妙的错误,程序没有提示就马上退出的问题,扯远了,言归正传,还是说说如何使用闪屏的功能吧。
上面开启了闪屏的功能后,那么我们可能就要在程序中,根据不同的加载进度显示不同的内容了,看看是如何做到的
记得在MainForm窗体的构造函数中添加相应的闪屏操作代码,如下所示。
public MainForm()
{
InitializeComponent();
SplashScreen.Splasher.Status = "正在展示相关的内容 ";
System.Threading.Thread.Sleep(100);
..//此处省略部分加载耗时的代码
SplashScreen.Splasher.Status = "初始化完毕 ";
System.Threading.Thread.Sleep(50);
SplashScreen.Splasher.Close();
}
控件的使用代码就这么多了,其他的就是封装好的控件部分内容了,下面打包放上来,给大家参考使用,源码级的哦,下载
了记得顶一下。
提示:控件的背景图片可能不能正常显示,您自己弄一个图片附上去就可以了。
本文示例源代码或素材下载
发表于 2009-9-23 12:06 只看该作者
WinForm界面开发之“分页控件”
PDFmyURL.com
UID
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
精灵使者
50287
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
在程序中,分页总是永远的话题,因为数据总是很多很多,分页展示在程序性能和数据查看感官方面得到很好的平衡,是一
种良好的编程习惯和UI设计。
Winform中的分页控件可能没有Asp.net世界中的分页控件那么丰富多彩,不过也有不少的分页控件可以采用,各个人的可能
都有一些不同的东西,一些好的东西。就我而言,我希望控件能够尽可能的多一些功能,耦合性低一些,例如我不想是基于存储
过程的,因为我很多程序需要使用Access作为数据库,一般来说,我还希望有导出Excel数据的功能,还有打印预览功能,由于我
的数据源表头,如实体类**、表格内容绑定的时候,表头是英文的,我需要变为中文的,其他的功能有则更好。本篇介绍我在我的
共享软件中大量使用的分页控件,如送水管理系统软件、病人资料管理软件等等,希望大家有兴趣的话,可以一起讨论使用该分
页控件。以便整理吸收更多好的特性,共同学习。
先给大家一个总体感觉,这是我在送水软件中的界面展示,红色圈圈部分是分页控件的展示界面。
大家可以看到,除了基本的分页外,还有其他功能,如导出当前页、导出全部页、打印列表、以及相关功能操作的菜单(只
要实现了相关的接口,则呈现相同的菜单,另外还有一些小地方,也是很常用关键的地方,就是间隔行的颜色变化,表头的中
文化,行提示内容等等,我认为这些分页控件应该做的,特别是表头中文化部分很重要,因为这个分页控件的数据源是基于一般
PDFmyURL.com
TOP好消息!网界网为用户提供免费网络产品测评机会,要测的报名啦!
121207
UID
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
8#大中小
文化,行提示内容等等,我认为这些分页控件应该做的,特别是表头中文化部分很重要,因为这个分页控件的数据源是基于一般
的对象**(如List
())或者DataTable的,因此数据源的表头可能是英文的(一般都是 _^^)。
精灵使者
50287
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
发表于 2009-9-23 12:06 只看该作者
导出Excel是基本的功能,本控件支持当前页导出,全部页导出两种模式,导出的Excel数据也还是比较好看的,不是一般的格
式哦。
控件另外一项功能,也是集实用功能之所成,打印当前列表内容,如下图所示,该内容会保存用户在每个列表数据中的信息
,打印不同的表头内容,如下图所示。
PDFmyURL.com
加为好友 当前离线
那么控件应该如何使用呢,下面介绍一下使用的相关代码。
PDFmyURL.com
TOP2010年4月份《IDC访问质量测试排名》测试点征集帖
121207
UID
帖子
精华
9#大中小
1、首先在Form_Load事件中绑定相关的委托处理事件,默认有“新建”、编辑选定项、删除、刷新、打印几个按钮,您可以在
此基础上增加更多的菜单。
private void FrmProduct_Load(object sender, EventArgs e)
{
BindData();
this.winGridViewPager1.ProgressBar = this.toolStripProgressBar1.ProgressBar;
this.winGridViewPager1.OnPageChanged += new
EventHandler(winGridViewPager1_OnPageChanged);
this.winGridViewPager1.OnStartExport += new
EventHandler(winGridViewPager1_OnStartExport);
this.winGridViewPager1.OnEditSelected += new
EventHandler(winGridViewPager1_OnEditSelected);
this.winGridViewPager1.OnAddNew += new EventHandler(winGridViewPager1_OnAddNew);
this.winGridViewPager1.OnDeleteSelected += new
EventHandler(winGridViewPager1_OnDeleteSelected);
this.winGridViewPager1.OnRefresh += new EventHandler(winGridViewPager1_OnRefresh);
this.winGridViewPager1.AppendedMenu = this.contextMenuStrip1;
}
精灵使者
50287
510
0
发表于 2009-9-23 12:06 只看该作者
2。实现表头解析和上面的委托时间的例子代码如下.
private void winGridViewPager1_OnRefresh(object sender, EventArgs e)
{
BindData();
}
private void winGridViewPager1_OnDeleteSelected(object sender, EventArgs e)
PDFmyURL.com
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
{
if (MessageUtil.ShowYesNoAndTips("您确定删除选定的
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
么?") == DialogResult.No)
{
return;
}
DataGridView grid = sender as DataGridView;
if (grid != null)
{
foreach (DataGridViewRow row in grid.SelectedRows)
{
BLLFactory.Instance.Delete(row.Cells["ID"].Value.ToString());
}
BindData();
}
}
private void winGridViewPager1_OnEditSelected(object sender, EventArgs e)
{
DataGridView grid = sender as DataGridView;
if (grid != null)
{
foreach (DataGridViewRow row in grid.SelectedRows)
{
FrmEditProduct dlg = new FrmEditProduct();
dlg.ID = row.Cells["ID"].Value.ToString();
if (DialogResult.OK == dlg.ShowDialog())
{
BindData();
}
break;
PDFmyURL.com
}
}
}
private void winGridViewPager1_OnAddNew(object sender, EventArgs e)
{
btnAddNew_Click(null, null);
}
private void winGridViewPager1_OnStartExport(object sender, EventArgs e)
{
PagerInfo pagerInfo = new PagerInfo();
pagerInfo.CurrenetPageIndex = 1;
pagerInfo.PageSize = int.MaxValue;
this.winGridViewPager1.AllToExport =
BLLFactory.Instance.GetAllToDataSet(pagerInfo).Tables[0];//product.GetAllToDataSet(pagerInfo).Tables[0];
}
private void winGridViewPager1_OnPageChanged(object sender, EventArgs e)
{
BindData();
}
private void BindData()
{
#region 添加别名解析
this.winGridViewPager1.AddColumnAlias("ID", "编号");
this.winGridViewPager1.AddColumnAlias("ProductType", "产品类型");
this.winGridViewPager1.AddColumnAlias("ProductName", "产品名称");
this.winGridViewPager1.AddColumnAlias("Specification", "产品规格");
this.winGridViewPager1.AddColumnAlias("Model", "产品型号");
this.winGridViewPager1.AddColumnAlias("OfferPrice", "进货价");
PDFmyURL.com
this.winGridViewPager1.AddColumnAlias("OfferPrice", "进货价");
this.winGridViewPager1.AddColumnAlias("AdvisePrive", "建议价");
this.winGridViewPager1.AddColumnAlias("SalePrice", "零售价");
this.winGridViewPager1.AddColumnAlias("Manufacture", "生产厂商");
this.winGridViewPager1.AddColumnAlias("Manufacture_ID", "厂商ID");
this.winGridViewPager1.AddColumnAlias("Note", "备注");
this.winGridViewPager1.AddColumnAlias("LastUpdated", "更新日期");
#endregion
SearchCondition condition = new SearchCondition();
condition.AddCondition("ProductName", this.txtName.Text, SqlOperator.Like)
.AddCondition("ProductType", this.cmbProductType.Text, SqlOperator.Like)
.AddCondition("Specification", this.cmbSpecNumber.Text, SqlOperator.Like)
.AddCondition("Note", this.txtNote.Text, SqlOperator.Like)
.AddCondition("Manufacture", this.cmbManufacture.Text, SqlOperator.Like);
string where = condition.BuildConditionSql().Replace("Where", "");
List list = BLLFactory.Instance.Find(where,
this.winGridViewPager1.PagerInfo);
this.winGridViewPager1.DataSource = new
WHC.Pager.WinControl.SortableBindingList(list);
}
这样就实现了分页控件的内容展示以及相关功能的菜单挂接,实现后的菜单展示可能是这样子的,如下图所示,是否还可以呢,
呵呵.
PDFmyURL.com
TOP2010网界网论坛带薪版主火热招募中,欢迎有识之士加入!
121207
UID
帖子
10#大中小
本文示例源代码或素材下载
精灵使者
50287
510
发表于 2009-9-23 12:07 只看该作者
WinForm界面开发之“HTML内容编辑控件”
做过了很多Winform的共享软件,对界面的设计有了一定的经验和积累,准备开一个“WinForm界面开发”系列文章,介绍下相关
的Winform界面设计和相关控件的使用,促进相互交流,以获得更好的发展和了解。 在很多Winform程序中 ,我们可能需
要HTML内容的所见即所得的编辑控件,如Asp.net中的FreeTextBox等控件样式的。
搜索了一下,发现很少这方面的控件,找了一个,好像是收费的,而且感觉一般,跳过,再找,然后发现CodeProject 上有一
个不错的东西,拿过来进行修改一下,作为控件进行使用,效果还不错,我在QQ号码采集机邮件发送系统中使用,如下图所示
PDFmyURL.com
帖子
精华
积分
J力豆
贡献值
阅读权限
在线时间
注册时间
最后登录
个人空间 发短消息
加为好友 当前离线
510
0
840
10
0
60
66 小时
2008-10-10
2009-10-23
控件支持基本的HTML编辑操作,如文字、图片、排列(左对齐,右对齐,居中等)、项目符号、缩进调整等操作,如下图所
示
另外控件支持右键菜单操作,常用的编辑功能以及查找、修改HTML、查看内容、插入HTML元素等
PDFmyURL.com
内容查找界面如下所示
修改HTML窗体如下所示,可以增加修改里面的内容,确定后控件的内容将重新变化。
PDFmyURL.com
插入图片的对话框,提示用户输入相关的信息。
控件我们一般使用两个属性即可,如下代码所示
string bodyHtml = this.txtContent.BodyHtml;
string bodyText = this.txtContent.BodyText;
最后,呈上大家最关心的控件文件,大家可以按照使用一般的控件使用即可(控件我没有进行加密,大家需要修改源码的,
反编译一下即可,呵呵):
PDFmyURL.com
TOP不容错过的一周网界网论坛精彩专题大放送 不断更新中
‹‹ 上一主题 | 下一主题 ››
当前时区 GMT+8, 现在时间是 2010-7-21 10:57 京ICP证010182号
清除 Cookies - 联系我们 - 网界 - Archiver - TOP - 界面风格
反编译一下即可,呵呵):
本文示例源代码或素材下载
直接进入免费的软件下载专区!
Powered by Discuz! 6.0.0 © 2001-2007 Comsenz Inc.
Processed in 0.046803 second(s), 8 queries, Gzip enabled.
PDFmyURL.com