
做winform首先要先懂语法。
如果你觉得自己的语法差不多了,第二步要做的就是熟悉开发工具。
你可以先熟悉Microsoft Visual Studio 2003,然后再熟悉2005,
这样的话你可以了解更多不同版本的工具之间的区别,才能达到更加
熟悉工具的效果。
其次就是把工具的自带的控件无论什么控件都要弄一个出来多研究下,
搞清楚他怎么用。然后买一本有关winform的书(一般书有都有示例的),
你照书上写的,把他的代码再仿照着敲一遍(你可以先不用懂),然后
再慢慢的运行起来查看,当然敲的时候要思考。多敲几遍,你就差不多懂
他的意思了。然后再逐行代码的分析。当你都懂的时候就差不多会开发了。。
winform 其实很简单的,关键就是多了解。
假设三个控件分别是:用户名 txtName 密码 txtPwd 登录 btnLogin
private void btnLogin_Click(object sender,EventArgs e)
{
string name = txtNameTextToString()Trim();
string pwd = txtPwdTextToString()Trim();
if(name == "" || pwd == "")
{
MessageBoxShow("用户名、密码都不能为空");
return;
}
if(name != "admin")
{
MessageBoxShow("用户名错误");
return;
}
if(pwd != "0123456")
{
MessageBoxShow("密码错误");
return;
}
if(name == "admin" && pwd == “0123456”)
{
MessageBoxShow("登录成功");
return;
}
}
wpf的主要优势还是在代码和界面可以分开来做,对于大型开发,这是个很吸引人的功能,个人觉得,工具只要能满足你的需要就可以了,winform用起来还是很不错的,运行速度也快。winform加上aspnet再加上dev的控件,加上mysql,应该可以满足一般企业的90%以上的需求。把winform、aspnet学精了,转向wpf等其它方式的开发,是没有大问题的。我一直没去怎么搞wpf,是因为winform够用,然后是单位的机器都不怎么好,不适合跑wpf程序。简单高效,远比好看无用要好得多,所以,一切从需求出发最好。希望对你有帮助。
带有登录窗口的Window程序启动控制
默认的Main函数是
[STAThread]static void Main(){Application EnableVisualStyles();
Application SetCompatibleTextRenderingDefault(false);
Application Run(new frmMain());
}
关键的是Application Run(new frmMain());这一句 如果Run函数里是主窗口 则就要另外想办法在主窗口显示之前让用户登录 如果Run函数里创建的是登录窗口 则登录窗口完成其登录工作之后 就只能隐藏 而不能关闭 否则整个应用程序就结束了
解决这种问题主要有两种方法
)Application Run(new frmMain());函数里创建主窗口 在主窗口加载后 显示之前使之隐藏并显示登录窗口 如果登录成功 则关闭登录窗口 显示主窗口 如果登录失败 则结束应用程序 这样处理有一个小问题 就是要无论登录是否成功 实际都要加载主窗口的 好处是不用修改Main函数 对一些用户来说 可能更好控制一些
)修改Main函数 使之在Application Run(new frmMain());之前进行登录验证 登录成功则正常运行 登录失败则结束应用程序 大体过程如下
[STAThread]static void Main(){Application EnableVisualStyles();Application SetCompatibleTextRenderingDefault(false);frmLogin login = new frmLogin();login ShowDialog(); // 注意这个地方只能是ShowDialog 而不能是Show
if(login HasLogin) // 判断是否登录成功{login Close();Application Run(new frmMain());}else{Application Exit();}}
这样做的好处是在登录失败时 直接关闭应用程序 而无需加载主窗口
实际两种方法都可以达到相同的目的
回车键按下时处理成等同于按下Tab键
常用的处理方法有两个
)响应每一个要处理的控件的keypress事件 在该事件中判断如果按下的是回车 让下一个控件获得焦点 代码如下
private void txt_KeyPress(object sender KeyPressEventArgs e){if(e KeyChar == ){
// nextControl Focus(); // 使下一个控件获得焦点
SendKeys Send( {tab} ); // 这样也是可以的
}
}
)所有要把回车处理成Tab的控件共享一个keypress事件 当按下的是回车时 发送一个tab键 代码如下
private void my_KeyPress(object sender KeyPressEventArgs e){if (e KeyChar == ){SendKeys Send( {tab} );}}第一种处理方式是针对每一个控件写事件 其好处是更好控制 尤其是在除处理回车按键外还要实现其他功能时 就只能这样处理 第二种方式的好处是可以多个控件共享同一个事件 特别是在动态创建控件时 而对每个控件只处理回车时 可以动态的把事件挂到控件上 这样就更显示出这种方式的优势 不足是对控件除要处理回车外还要有其他个性功能时 就很难实现
lishixinzhi/Article/program/net/201311/15567
namespace 省市区
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
connConnectionString = "";//连接字符串
string str = "select ProvinceId,ProvinceName from Province";//查询省份sql语句
SqlDataAdapter sda = new SqlDataAdapter(str,conn);
DataSet ds = new DataSet();
sdaFill(ds);
//将数据绑定到cmbProvince上
cmbProvinceDataSource=dsTables[0];
cmbProvinceDisplayMember = "ProvinceName";//设置显示属性
cmbProvinceValueMember = "ProvinceId";//设置值属性
cmbProvinceSelectedIndex = 0;
InitializeCityList(ConvertToInt32(cmbProvinceSelectedValue));
}
private void InitializeCityList(int ProvinceId)
{
SqlConnection conn = new SqlConnection();
connConnectionString = "";//连接字符串
string str = "select CityId,CityName from City where ProvinceId='" + ProvinceId + "')";//根据省份查询城市sql语句
SqlDataAdapter sda = new SqlDataAdapter(str, conn);
DataSet ds = new DataSet();
sdaFill(ds);
//将数据绑定到cmbProvince上
cmbCityItemsClear();//清空
cmbCityDataSource = dsTables[0];
cmbCityDisplayMember = "CityName";//设置显示属性
cmbCityValueMember = "CityId";//设置值属性
cmbCitySelectedIndex = 0;
InitializeAreaList(ConvertToInt32(cmbCitySelectedValue));
}
private void InitializeAreaList(int CityId)
{
SqlConnection conn = new SqlConnection();
connConnectionString = "";//连接字符串
string str = "select AreaId,AreaName from Area where CityId='" + CityId + "')";//根据城市查询区sql语句
SqlDataAdapter sda = new SqlDataAdapter(str, conn);
DataSet ds = new DataSet();
sdaFill(ds);
//将数据绑定到cmbProvince上
cmbAreaItemsClear();//清空
cmbAreaDataSource = dsTables[0];
cmbAreaDisplayMember = "AreaName";//设置显示属性
cmbAreaValueMember = "AreaId";//设置值属性
cmbAreaSelectedIndex = 0;
}
//省份发生变化时
private void cmbProvince_SelectedIndexChanged(object sender, EventArgs e)
{
InitializeCityList(ConvertToInt32(cmbProvinceSelectedValue));//调用
}
//城市发生变化时
private void cmbCity_SelectedIndexChanged(object sender, EventArgs e)
{
InitializeAreaList(ConvertToInt32(cmbCitySelectedValue));//调用
}
}
}
没有创建数据库,应该可以,自己看看吧,希望可以帮到你,
这个网应该适合吧,csframework,C/S结构系统框架网, C#开发的基于Winform C/S结构系统框架
还有csdn, cnblog有几个链接,自己搜索"C/S结构系统框架"就能找到
声明里面添加
private int x;
private int y;
private static int count = 0;
初始化函数
public Form1()
{
InitializeComponent();
x = thispictureBox1LocationX;
y = thispictureBox1LocationY;
}
时钟函数
private void timer1_Elapsed(object sender, SystemTimersElapsedEventArgs e)
{
if (count == 4) count = 0;
int signX,signY = 1;
if (count == 0 || count == 1) signX = 1;
else signX = -1;
if (count == 0 || count == 3) signY = -1;
else signY = 1;
thisControlsRemove(thispictureBox1);
pictureBox1Location = new Point(x+10signX,y+10signY);
thisControlsAdd(pictureBox1);
count ++;
}
这里的循环只是一个绕原先点的矩形移动
以上就是关于WINFORM开发流程,程序提问全部的内容,包括:WINFORM开发流程,程序提问、编写一个WinForm或者ASP.Net程序、Winform VS WPF等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)