winform

C# Winform初体验

廉价感情. 提交于 2020-01-16 10:37:48
设计一个简单的登录窗口,要求输入用户名:小金,密码:123456时候点登录能正确转到另一个窗口。 1、建立窗体应用。 2、这里创建一个login和一个NewForm的窗体。 3、在login的窗体拖拉2个label和2个textbox和1个linklabel的控件。一个标签名字为用户名,一个标签为密码,超链接标签名为登录。 标签的赋名:双击大窗体的边框进入代码界面,在这个代码块对各标签赋名。 4、双击linklabel计入超链接标签的代码块,这里用户判断用户名和密码是否正确,是否跳转另一个窗口等等一些事件。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class login : Form { public login() { InitializeComponent(); } private void Login

C# WinForm反射窗体控件gridView并对其增加列操作

╄→гoц情女王★ 提交于 2020-01-16 06:44:11
/// <summary> /// 在窗体中根据名称查找gridview需要增加的列 /// </summary> public void GetGridViewInWin() { try { BLL.SYS.ctlmWinAddColumn bllColumn = new BLL.SYS.ctlmWinAddColumn(); //取得窗体属性 Type FormType = this.GetType(); //取得所有控件 //FieldInfo[] fi = FormType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); string FieldName=""; DataTable dtList = bllColumn.GetColumnByWinAndGridid(this.FindForm().GetType().FullName); //查找窗口控件数据列表 foreach (DataRow dr in dtList.Rows) { //取得指定名字的控件 FieldInfo fi = FormType.GetField(dr["gridViewId"].ToString().Trim(), BindingFlags.NonPublic |

Winform登录界面美化

妖精的绣舞 提交于 2020-01-16 02:58:29
一、登录窗口 1、导入背景图 添加背景图片之后设置窗体的BackImageFlayOut属性为strech 2、添加Icon图标 3、隐藏form边框(上图)修改FormBorderStyle的属性为None 4、添加labelClosed :× 更改背景颜色和字体颜色 5、添加两个pictureBox 插入图标 6、添加TransTextBox类 制作透明TextBox 更改字体颜色。 7、添加Button按钮 设置按钮的属性: FlatStyle = Flat; 设置FlatAppearanc里的属性 BorderSize = 0; BackColor = Transparent; 设置事件MouseEnter触发函数: private void button1_MouseEnter(object sender, EventArgs e) { button1.FlatStyle = FlatStyle.Flat; //样式 //button1.ForeColor = Color.Transparent;//前景 button1.BackColor = Color.Transparent;//去背景 //button1.FlatAppearance.BorderSize = 0;//去边线 button1.FlatAppearance.MouseOverBackColor =

十八、【开源】EnterpriseFrameWork框架核心类库之Winform控制器

时光毁灭记忆、已成空白 提交于 2020-01-15 21:31:41
回《 【开源】EnterpriseFrameWork框架系列文章索引 》 EFW框架源代码下载: http://pan.baidu.com/s/1qWJjo3U EFW框架中的WinController控制器可以说是整个Winform版中最具有价值的地方,能够熟练使用它的话,可以让你写得代码结构清晰不知多少倍,真正的做到了CS开发的界面层与逻辑层的完全隔离;更重要的是改变了你写界面代码的思维,让你一次性写出功能完善的代码,真的,传统的那种事件驱动的方式编码会让你的代码变得越来越臃肿,就算你懂得不断重构你的代码,也完全避免不了出现臃肿的情况;所以必须使用WinController控制器模式从源头彻底解决这种问题; WinController控制器与界面不一定是一一对应的,一个控制器可以对应多个界面,当几个界面的操作十分密切时就可以用一个控制器来控制它们的行为;一个界面对应多个控制器这种方式最好不要这么做,这样会让你的程序变得复杂,也破坏了业务架构与框架之间的关系,参考第十一章《EnterpriseFrameWork框架的分层与系统业务的结合》。 本章主要内容通过解读框架源代码来学习WinController是怎么实现的,以及学习控制器这种设计模式; 本文要点: 1.如何使用Winform控制器 2.Winform控制器的设计思路 3

WinForm WebBrowser 设置IE版本

≡放荡痞女 提交于 2020-01-15 13:04:02
public enum IeVersion { IE7 = 7, IE8 = 8, IE9 = 9, IE10 = 10, IE11 = 11 };  /// <summary> /// 修改注册表信息来兼容当前程序 /// </summary> public static void SetWebBrowserFeatures(IeVersion ieVersion) { if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) return; //获取程序及名称 string AppName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); //得到浏览器的模式的值 UInt32 ieMode = GeoEmulationModee((int)ieVersion); string featureControlRegKey = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\"; //设置浏览器对应用程序(appName)以什么模式(ieMode)运行 Registry

WinForm之GDI手动双缓冲技术

北慕城南 提交于 2020-01-15 00:18:52
private void button1_Click( object sender, EventArgs e) { Bitmap bmp = new Bitmap(this.picturebox.Width, this.picturebox.Height); //在内存中创建一个bmp图,bmp的大小和窗口中picturebox的大小相同 Graphics g = Graphics.FromImage(bmp); //通过内存中的bmp图像创建一个在内存中的画布g,那么在画布上的任何操作就都是在内存中操作了 Brush b = new SolidBrush(Color.Green); //创建一个绿色的笔刷 Rectangle r = new Rectangle(10, 10, this.picturebox.Width, this.picturebox.Height); //创建一个长方形 g.FillRectangle(b,r); //在内存中的画布中画我们要画的图形 b.Dispose(); //释放画笔 g.Dispose(); //释放画布 this.picturebox.CreateGraphics().DrawImage(bmp, 0, 0); //最后就是我们手动双缓冲技术的 最后一步了,就是将内存中的bmp的图像一次性的展示到窗口中的picturebox中 }

观察者模式实践-实现winform 窗体之间传值(事件实现)

亡梦爱人 提交于 2020-01-14 09:54:37
事件本身就是观察者模式的一个实现。 先总结一下事件的使用: 委托类型声明 定义发布者类,并声明事件 在发布者类中定义触发事件方法 定义订阅者类,并注册事件 在订阅者类中定义事件处理方法 针对事件,.Net Framework提供了一个标准模式,主要在winform中比较常见,区别就是不用自定义委托,使用EventHander委托,因此其步骤是: 定义发布者类,并声明事件 在发布者类中定义触发事件方法 定义订阅者类,并注册事件 在订阅者类中定义事件处理方法 上述步骤是在委托方法中不传参的情况,如果需要传递参数,则需要自定义EventHander中的EventArgs对象,并使用泛型委托EventHander,其步骤是: 定义类,继承自EventArgs,目的是为了加属性传参 定义发布者类: 事件的定义,使用自定义类的EventHander泛型委托 在发布者类中定义 触发事件的方法,在这个方法中填充需要传递的参数,给1中自定义类的属性赋值 定义订阅者类: 订阅事件 订阅者: 事件处理的方法,使用委托传过来的参数(继承自EventArgs类的属性) 使用事件实现winform窗体传值感觉比使用简单方法,在发布者类中维护订阅者类列表要简单一点; 而且后期扩展要更容易。 实例:本实例定义一个winform程序,有三个窗体,实现frmMain中的textbox更新内容

winform学习日志(二十五)----------C#调用webservers实现天气预报

霸气de小男生 提交于 2020-01-12 23:14:14
一:用ASP.NET调用Web Service 打开 VS2010,打开 “文件 -新建 -网站 ”,选择 “ASP.NET网站 ” 选好存储位置,语言后点击确定,进入默认页面。然后先添加 Web引用,把 WebService引到当前的工程里面。方法是:在资源管理器中点击右键,选择添加 Web 引用,(该webservice为上一篇的例子)调出对话框: 在 URL中填入,前面写好的 WebService运行后浏览器上面显示的地址,点击“前往”按钮,如上图,就会显示出所引用的 WebService中可以调用的方法,然后点击“添加引用”,就将 webservice引用到了当前的工程里面 ,如下图,解决方案中会出现引进来的 WebService文件 如果添加的是ServiceReference的服务引用,实例化服务是应该这样,如下:         hong.Service1SoapClient login = new hong.Service1SoapClient(); if (txtName.Text.Trim().Length == 0) { MessageBox.Show("请输入用户名!"); return; } else if (pwdInfo.Password.Trim().Length == 0) { MessageBox.Show("请输入密码!"); return;

winform 分页控件分享(一)

隐身守侯 提交于 2020-01-12 05:49:03
以前都是从事B/S开发,由于公司有个比较大的C/S项目,在使用DATAGRIDVIEW的时候,显示数据量比较大,所以才用分页模式,也不知道这样是否正确。 想找个C/S下面的分页控件,都没有什么好的,就自己跟B/S下的分页控件,修改成WINFORM下面的。 首先创建一个用户控件名称为pager,在控件中拖入bindingNavigator和bindingSource,修改bindingNavigator,加入必要的一些控件。 效果如下: 代码实现如下: namespace WindowsApp.MyControl { /**//// <summary> /// 申明委托 /// </summary> /// <param name="e"></param> /// <returns></returns> public delegate int EventPagingHandler(EventPagingArg e); /**//// <summary> /// 分页控件呈现 /// </summary> public partial class Pager : UserControl { public Pager() { InitializeComponent(); } public event EventPagingHandler EventPaging; /**////

Winform中使用Fody.PropertyChanged不起作用

做~自己de王妃 提交于 2020-01-12 01:36:08
在Winform工程中通过nuget安装Fody.PropertyChanged,安装完成后,会自动引入文件 FodyWeavers.xml 如果没有引入,则手动新建一个,内容如下: <?xml version="1.0" encoding="utf-8"?> <Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> <PropertyChanged /> </Weavers> Person类如下,实现了INotifyPropertyChanged事件: class Person : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; //private string name; //private int age; //private string address; //private bool sex; public string Name { get ; set ; } public int Age { get ; set; } public string Address { get ; set; }