winform 跨窗体传值+DMI应用程序(信息管理系统)
实现功能:
①有登录窗口
②主程序是mdi窗口,窗口有菜单、树视图导航,点击不同的菜单项/树节点项可以导航至相应的窗体(右下角红色部分是个窗体),页面打开时为最大化状态。
③信息反馈窗口为自定义Dialog。
④效果图如下:
⑤需要8个窗体和1个自定义控件:3-7-1(登录窗体)、3-7-2(最外层窗体,为3-7-3的父窗体)、3-7-3(系统窗体)、3-7-3-1(员工管理窗体)、3-7-3-2(工程管理窗体)、3-7-3-4(财务管理窗体)、3-7-3-4(信息反馈窗体,存放自定义控件)、3-7insert(信息添加窗体)、UserControl1(用户自定义控件)
窗体详解如下:
①13-7-1(登录窗体),需要控件:2个Label、2个TextBox、1个Button
注:固定账号:admin,固定密码:123456
该窗体代码如下:
//“登录”按钮的click事件
private void button1_Click(object sender, EventArgs e)
{
//固定帐号:“admin”,固定密码:“123456”
if(textBox1.Text=="admin"&&textBox2.Text=="123456")
{
//实例化3-7-2
_3_7_2 f2 = new _3_7_2();
//3-7-2窗体打开
f2.Show();
//3-7-1窗体隐藏
this.Hide();
}
else
{
//输入不正确弹出提示框
MessageBox.Show("账号或密码错误!", "消息提醒",
MessageBoxButtons.OK, MessageBoxIcon.Information);
//将帐号和密码框清空
textBox1.Text = textBox2.Text = "";
}
}
//3-7-1窗体的Load事件
private void _3_7_1_Load(object sender, EventArgs e)
{
//设置密码框显示“*”
textBox2.PasswordChar = '*';
//3-7-1的窗体标题
this.Text = "登录窗体";
}
②3-7-2(最外层窗体,为3-7-3的父窗体),空白窗体,没有任何控件
该窗体代码如下:
private void _3_7_2_Load(object sender, EventArgs e)
{
//3-7-2窗体的标题
this.Text = "主窗口 — [员工管理页面]";
//将3-7-2窗体设置为多文档窗体
this.IsMdiContainer = true;
//实例化3-7-3
_3_7_3 f3 = new _3_7_3();
//3-7-3的父窗体设置为当前窗体,即3-7-2
f3.MdiParent = this;
//3-7-3打开
f3.Show();
}
③3-7-3(系统窗体)需要控件:TreeView
该窗体代码如下:
//Load事件
private void _3_7_3_Load(object sender, EventArgs e)
{
//3-7-3窗体的标题
this.Text = "信息管理 系统维护 信息反馈";
//3-7-3窗体打开时,自动最大化
this.WindowState = FormWindowState.Maximized;
this.LayoutMdi(MdiLayout.Cascade);
treeView1.Dock = DockStyle.Left;
treeView1.Height = this.Height;
}
//TreeView选中项发生改变事件
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
//实例化三个窗体
_3_7_3_1 f3731 = new _3_7_3_1();
_3_7_3_2 f3732 = new _3_7_3_2();
_3_7_3_3 f3733 = new _3_7_3_3();
//三个窗体设置为非顶级窗体
f3731.TopLevel = f3732.TopLevel = f3733.TopLevel = false;
//指定三个窗体的宽度
f3731.Width = f3732.Width = f3733.Width = this.Width - treeView1.Width - 10;
//选中节点展开
treeView1.SelectedNode.Expand();
//选中节点为“员工管理”时
if (treeView1.SelectedNode.Text == "员工管理")
{
//3-7-3-1的父窗体为当前窗体
f3731.Parent = this;
//3-7-3-1显示
f3731.Show();
}
if (treeView1.SelectedNode.Text == "工程管理")
{
f3732.Parent = this;
f3732.Show();
}
if (treeView1.SelectedNode.Text == "财务管理")
{
f3733.Parent = this;
f3733.Show();
}
if (treeView1.SelectedNode.Text == "系统维护")
{
//弹出消息对话框
MessageBox.Show("欢迎来到信息系统维护窗口!", "消息提醒",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
if (treeView1.SelectedNode.Text == "信息反馈")
{
_3_7_3_4 f3734 = new _3_7_3_4();
f3734.ShowDialog();
}
}
④3-7-3-1(员工管理窗体),需要控件:1个ListView和两个Button
该窗体代码如下:
//页面加载函数
private void _3_7_3_1_Load(object sender, EventArgs e)
{
//窗体标题栏无按钮
this.ControlBox = false;
//窗体无标题
this.Text = "";
//该窗体为右侧填充满
this.Dock = DockStyle.Right;
//ListView为顶部填充满
listView1.Dock = DockStyle.Top;
//数据信息居中显示
columnHeader1.TextAlign = columnHeader2.TextAlign = columnHeader3.TextAlign
= columnHeader4.TextAlign = HorizontalAlignment.Center;
//listview的高度
listView1.Height = Convert.ToInt32(this.Height * 0.7);
//显示细表格线
listView1.GridLines = true;
}
//“添加”按钮的click事件
private void button1_Click(object sender, EventArgs e)
{
//实例化添加数据的窗体
_3_7insert fInsert = new _3_7insert();
//让3731作为标记 传到 添加数据的窗体
fInsert.sign = 3731;
//添加数据的窗体中实例化的3-7-3-1是当前窗体
fInsert.f3731 = this;
//添加数据的窗体显示
fInsert.Show();
}
//添加数据的函数,接收添加窗体传回来的数据项
public void insertData(string newData)
{
//传回来的字符串以空格分割赋给数组
string[] data = newData.Split(' ');
//以row作为关键值,添加数据
listView1.Items.Add("row", data[0], 0);
//添加row的三个子项值
listView1.Items["row"].SubItems.Add(data[1]);
listView1.Items["row"].SubItems.Add(data[2]);
listView1.Items["row"].SubItems.Add(data[3]);
MessageBox.Show("添加成功!", "信息提醒",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//“删除”按钮的click事件
private void button2_Click(object sender, EventArgs e)
{
//删除所有项
listView1.Items.Clear();
}
⑤3-7-3-2(工程管理窗体),需要控件:1个ListView和两个Button
该窗体代码如下:
private void _3_7_3_2_Load(object sender, EventArgs e)
{
//窗体标题栏无按钮
this.ControlBox = false;
//窗体无标题
this.Text = "";
//该窗体为右侧填充满
this.Dock = DockStyle.Right;
//ListView为顶部填充满
listView1.Dock = DockStyle.Top;
//数据信息居中显示
columnHeader1.TextAlign = columnHeader2.TextAlign = columnHeader3.TextAlign
= columnHeader4.TextAlign = HorizontalAlignment.Center;
//listview的高度
listView1.Height = Convert.ToInt32(this.Height * 0.7);
//显示细表格线
listView1.GridLines = true;
}
//添加数据的函数,接收添加窗体传回来的数据项
public void insertData(string newData)
{
//传回来的字符串以空格分割赋给数组
string[] data = newData.Split(' ');
//以row作为关键值,添加数据
listView1.Items.Add("row", data[0], 0);
//添加row的三个子项值
listView1.Items["row"].SubItems.Add(data[1]);
listView1.Items["row"].SubItems.Add(data[2]);
listView1.Items["row"].SubItems.Add(data[3]);
MessageBox.Show("添加成功!", "信息提醒",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//“添加”按钮的click事件
private void button1_Click(object sender, EventArgs e)
{
//实例化添加数据的窗体
_3_7insert fInsert = new _3_7insert();
//让3732作为标记 传到 添加数据的窗体
fInsert.sign = 3732;
//添加数据的窗体中实例化的3-7-3-2是当前窗体
fInsert.f3732 = this;
//添加数据的窗体显示
fInsert.Show();
}
//“删除”按钮的click事件
private void button2_Click(object sender, EventArgs e)
{
//删除所有项
listView1.Items.Clear();
}
⑥3-7-3-3(财务管理窗体)需要控件:1个ListView和两个Button
该窗体代码如下:
//窗体Load事件
private void _3_7_3_3_Load(object sender, EventArgs e)
{
//窗体标题栏无按钮
this.ControlBox = false;
//窗体无标题
this.Text = "";
//该窗体为右侧填充满
this.Dock = DockStyle.Right;
//ListView为顶部填充满
listView1.Dock = DockStyle.Top;
//数据信息居中显示
columnHeader1.TextAlign = columnHeader2.TextAlign = columnHeader3.TextAlign
= columnHeader4.TextAlign = HorizontalAlignment.Center;
//listview的高度
listView1.Height = Convert.ToInt32(this.Height * 0.7);
//显示细表格线
listView1.GridLines = true;
}
//“添加”按钮的click事件
private void button1_Click(object sender, EventArgs e)
{
//实例化添加数据的窗体
_3_7insert fInsert = new _3_7insert();
//让3733作为标记 传到 添加数据的窗体
fInsert.sign = 3733;
//添加数据的窗体中实例化的3-7-3-2是当前窗体
fInsert.f3733 = this;
//添加数据的窗体显示
fInsert.Show();
}
//“删除”按钮的click事件
private void button2_Click(object sender, EventArgs e)
{
//删除所有项
listView1.Items.Clear();
}
//添加数据的函数,接收添加窗体传回来的数据项
public void insertData(string newData)
{
//传回来的字符串以空格分割赋给数组
string[] data = newData.Split(' ');
//以row作为关键值,添加数据
listView1.Items.Add("row", data[0], 0);
//添加row的三个子项值
listView1.Items["row"].SubItems.Add(data[1]);
listView1.Items["row"].SubItems.Add(data[2]);
listView1.Items["row"].SubItems.Add(data[3]);
MessageBox.Show("添加成功!", "信息提醒",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
⑦3-7insert(信息添加窗体),需要控件:4个Label、4个TextBox、1个Button
该窗体代码如下:
//接收传来的 “标记” 变量
public int sign;
//窗体Load事件
public void _3_7insert_Load(object sender, EventArgs e)
{
//标记为3731表示3-7-3-1窗体,label对应该窗体中的ListView列表头
if (sign == 3731)
{
label1.Text = "工号";
label2.Text = "姓名";
label3.Text = "性别";
label4.Text = "部门";
}
if (sign == 3732)
{
label1.Text = "工程编号";
label2.Text = "工程名称";
label3.Text = "工程部门";
label4.Text = "工程组长";
}
if (sign == 3733)
{
label1.Text = "财务编号";
label2.Text = "财务名称";
label3.Text = "财务数额";
label4.Text = "消费部门";
}
}
//窗体实例化
public _3_7_3_1 f3731;
public _3_7_3_2 f3732;
public _3_7_3_3 f3733;
public void button1_Click(object sender, EventArgs e)
{
//存储所添加的数据字符串,以空格分隔
string dataStr = textBox1.Text + " " + textBox2.Text
+ " " + textBox3.Text + " " + textBox4.Text;
//根据“标记”传到不同的窗体
if (sign == 3731)
{
f3731.insertData(dataStr);
}
if (sign == 3732)
{
f3732.insertData(dataStr);
}
if (sign == 3733)
{
f3733.insertData(dataStr);
}
//当前窗体关闭
this.Close();
}
⑧UserControl1(用户自定义控件)需要控件:
自定义控件添加方法如下:
ⅰ项目创建好后,右键添加→新建项→用户控件(默认名为UserControl1.cs)
ⅱ将所需的控件拖入,编写好相应代码
ⅲ右键项目→重新生成
ⅲ工具箱内会有以项目名称命名的选项卡,展开后里面就有刚刚生成的自定义控件UserControl1,或者在工具箱的搜索框内搜索
该窗体代码如下:
//“提交”按钮的click事件
private void button1_Click(object sender, EventArgs e)
{
//弹出“提交成功”框
MessageBox.Show("提交成功!", "信息提醒",
MessageBoxButtons.OK, MessageBoxIcon.Information);
//该控件的父窗体实例化为f
Form f = this.Parent as Form;
//存在f,则将其关闭
if (f != null)
f.Close();
}
//“退出”按钮的click事件
private void button2_Click(object sender, EventArgs e)
{
//弹出“提交成功”框
DialogResult dr = MessageBox.Show("退出成功!", "信息提醒",
MessageBoxButtons.OK, MessageBoxIcon.Information);
//该控件的父窗体实例化为f
Form f = this.Parent as Form;
//存在f,则将其关闭
if (f != null)
f.Close();
}
⑨3-7-3-4(信息反馈窗体,存放自定义控件)需要控件:只需要拖入刚刚自定义的控件即可,即UserControl
该窗体代码如下:
//窗体Load事件
private void _3_7_3_4_Load(object sender, EventArgs e)
{
//更改窗体标题
this.Text = "信息反馈";
//显示“帮助”按钮,只有最小化、和最大化按钮隐藏时才能显示“帮助”按钮
this.HelpButton = true;
//关闭“最小化”按钮
this.MinimizeBox = false;
//关闭“最大化”按钮
this.MaximizeBox = false;
}
代码均为原创,存在不足还请见谅!如有转载请注明来源: www.dreamload.cn/blog/?p=407&preview=true (洋葱先生)