winform窗体传值和动态添加控件
1.跳转窗体时传值
//将要显示的页面实例化
RoleMenuForm rmf = new RoleMenuForm();
try
{
//在此给RoleMenuForm 窗体中的变量roleId传值
rmf.roleId = int.Parse(dataGridView1.SelectedRows[].Cells[].Value.ToString());
rmf.Show();//显示窗体
}catch
{
MessageBox.Show("没有选择角色");
return;
}
注意:要在跳转的窗体创建一个public 的变量
//定义的变量,前一页面已赋值,该窗体中可以直接使用
public int roleId;
private void RoleMenuForm_Load(object sender, EventArgs e)
{
//窗体加载事件的代码
}
2.自动在窗体中生成控件(我是在窗体加载事件中查询数据库,根据数据库的数据自动生成label标签并绑定了需要绑定的数据)
private void RoleMenuForm_Load(object sender, EventArgs e)
{
RoleHandle rh = new RoleHandle();
DataTable dr = rh.Role_Id_Name(); #region 动态显示角色
int wx = ;
int hy = ;
//根据数据库的数据动态添加
for (int i = ; i < dr.Rows.Count; i++)
{
Label lb = new Label();//实例化label控件的对象
lb.Text = dr.Rows[i]["Role_Name"].ToString();
lb.Tag = dr.Rows[i]["Role_ID"];
lb.Parent = panel1;//设置生成的label控件的父容器
lb.BackColor = System.Drawing.SystemColors.HighlightText;//设置label控件的背景色为白色
lb.Size = new Size(, );//设置label控件的大小
lb.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;//设置label控件Text值对齐方式为居中左对齐
lb.Location = new Point(wx, hy);//设置label控件的位置
hy += ; //为label设置单击事件
lb.Click += new EventHandler(Lb_Click);
}
//遍历panel1中的所有控件
foreach (Control cl in panel1.Controls)
{
if (cl is Label)//如果该控件是label,再在下面判断是不是我们需要选中的,如果是就改变其背景色为蓝色
{
Label lb = cl as Label;
if (int.Parse(lb.Tag.ToString()) == roleId)
{
//改变背景色为蓝色
cl.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
}
}
}
#endregion
}
label控件自动生成了,但是如何设置自动生成的控件的单击事件呢?
3.如上面代码中标出的代码,在生成控件时添上那一句设置单击事件的代码就可以了,单击事件的代码如下:
//label标签的单击事件
private void Lb_Click(object sender, EventArgs e)
{
Label lb = (Label)sender;
//将所有标签背景色都改为未选中时的颜色
foreach (Control cl in panel1.Controls)
{
if (cl is Label)
{
Label lb1 = cl as Label;
lb1.BackColor = System.Drawing.SystemColors.HighlightText;
}
}
//将单击的label的背景色改为选中的颜色
lb.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
RoleChanged();
}
单击事件有了,那么如果我想获得我选中的label中的值怎么办呢?
4.我是根据label的背景色来获取的,我在自动生成时都设置了label标签的背景色,当我单击选中了某个label时,我在单击事件中修改了label标签的背景色,获取的代码如下:
//自定义的得到选择标签的对象,并获取我们需要的值
private int GetSelectedRoleId()
{
int roleId = ;
//循环panel中所有的控件
foreach (Control cl in panel1.Controls)
{
if (cl is Label)//判断该控件是不是label
{
Label lb = cl as Label;
//根据label标签的背景色来判断该label标签是不是我们选择的label标签
if (lb.BackColor == System.Drawing.SystemColors.GradientActiveCaption)
{
//如果是,则取出我们想要的值
roleId = int.Parse(lb.Tag.ToString());
}
}
}
return roleId;
}
winform窗体传值和动态添加控件的更多相关文章
- winform导入导出excel,后台动态添加控件
思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...
- 怎样在不对控件类型进行硬编码的情况下在 C#vs 中动态添加控件
文章ID: 815780 最近更新: 2004-1-12 这篇文章中的信息适用于: Microsoft Visual C# .NET 2003 标准版 Microsoft Visual C# .NET ...
- Android 在布局容器中动态添加控件
这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...
- VC中动态添加控件
VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- asp.net动态添加控件学习
看了老师的教程后,自己一点感悟记录下来: 1.在页面提交后,动态生成的控件会丢失, 但如果生成控件的代码在pageload中,就可以,原理是每次生成页面都执行生成. 2.动态按件或页面原来控件, 在页 ...
- WPF:理解ContentControl——动态添加控件和查找控件
WPF:理解ContentControl--动态添加控件和查找控件 我认为WPF的核心改变之一就是控件模型发生了重要的变化,大的方面说,现在窗口中的控件(大部分)都没有独立的Hwnd了.而且控件可以通 ...
- JQuery动态添加控件并取值
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- WPF 动态添加控件以及样式字典的引用(Style introduction)
原文:WPF 动态添加控件以及样式字典的引用(Style introduction) 我们想要达到的结果是,绑定多个Checkbox然后我们还可以获取它是否被选中,其实很简单,我们只要找到那几个关键的 ...
随机推荐
- 【Python自然语言处理】第一章学习笔记——搜索文本、计数统计和字符串链表
这本书主要是基于Python和一个自然语言工具包(Natural Language Toolkit, NLTK)的开源库进行讲解 NLTK 介绍:NLTK是一个构建Python程序以处理人类语言数据的 ...
- 【Leetcode】【Easy】Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- day3-购物车小程序
1.要求 启动程序后,让用户输入工资,然后打印商品列表 允许用户genuine商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒还有多少 可随时退出,退出时,打印已购买商品和余 ...
- vue v-for(数组遍历)
1.js代码 var box=new Vue({ el:'.box', data:{ msg:['hello','ok','dome'], //定义一个数组 msg2:{a:'ok',b:" ...
- Flutter仿照airbnb创建app
github地址:https://github.com/GainLoss/flutter-app 一.基础 flutter是谷歌公司开发的开源免费的UI框架,用dart语言实现的,可以实现跨平台,一套 ...
- Scrum第一次冲刺
1.项目描述 为了长大学子的便捷,避免遭遇官网爆炸而无法查询成绩,课表等相关个人信息.我们决定开发长大Tips(分担官网的压力). 2.基本业务 用户可以通过学号加密码登入长大Tips 用户可以在在用 ...
- 2018.11.29 Struts2中拦截器的学习&项目的实际运用
struts2官方架构 拦截器的创建 第一种方式 第二种方式 看源码AbstractInterceptor 底层已经帮我们写过这些方法了 第三种方式(推荐) 拦截器API学习 放行 前后处理 不放行, ...
- 如何使用MiniProfiler(附最新版MiniProfiler使用心得)
MiniProfiler这个工具早就久仰大名,不过之前一直没有动力去用,正好最近手上有个ASP.NET MVC的项目,正好拿来试试手,下面是使用最新的4.0.138版本的心得体会以及踩到一些小坑的解决 ...
- 并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究
一.ArrayBlockingQueue类图结构 如图ArrayBlockingQueue内部有个数组items用来存放队列元素,putindex下标标示入队元素下标,takeIndex是出队下标,c ...
- Windows7安装Envi4.8简体中文破解版
在正式安装前,建议先完整阅读本教程!本教程所使用的是Envi 4.8 32 位安装包,径测试,在64位windows7上可以正常安装使用!本教程就是在64位windows7上安装32位Envi4.8! ...