winform 控件的enable设置 我的目的是不同的用户可以操作不同的菜单,但是菜单是用button做的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 遍历this.Controls,如果是Button,然后去数据库查对应名字的记录 什么button菜单。不就是1.在初始化时候,获取当前用户,查询数据库2.根据数据库返回条件是否显示button菜单或哪些button菜单3.返回主界面,给button菜单enable赋值true或false。button.enable = true; 解决思路应该如下:1.首先获取三个button的状态(1或0)2.使用this.controls.Find("控件名")的方法获取到button控件, 并设置enable值为true(1) 还是false(0) this.controls.Find("控件名")这个我爱听,具体点。 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); //读取基础数据 DataItem dataItem1=new DataItem(); dataItem1.Bname = "BtnAdd"; dataItem1.Btext = "增加"; dataItem1.Benable = 1; DataItem dataItem2 = new DataItem(); dataItem2.Bname = "BtnMod"; dataItem2.Btext = "修改"; dataItem2.Benable = 1; DataItem dataItem3 = new DataItem(); dataItem3.Bname = "BtnDel"; dataItem3.Btext = "删除"; dataItem3.Benable = 0; data=new DataItem[3]{dataItem1,dataItem2,dataItem3}; //建立按钮字典 Dictionary<String, Button> buttons=new Dictionary<String,Button>(); buttons.Add("BtnAdd", this.BtnAdd); buttons.Add("BtnMod", this.BtnMod); buttons.Add("BtnDel", this.BtnDel); //执行 foreach (DataItem item in data) { Button btn = buttons[item.Bname]; btn.Enabled = item.Benable == 1; btn.Text = item.Btext; } } private DataItem[] data; private struct DataItem { public String Bname; public String Btext; public int Benable; } }} this.controls.Find("控件名")这个我爱听,具体点。呵呵,还真不知道Controls有Find方法。果然可以。我上面的代码中的自定义字典就不需要了。改成:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); //读取基础数据 DataItem dataItem1=new DataItem(); dataItem1.Bname = "BtnAdd"; dataItem1.Btext = "增加"; dataItem1.Benable = 1; DataItem dataItem2 = new DataItem(); dataItem2.Bname = "BtnMod"; dataItem2.Btext = "修改"; dataItem2.Benable = 1; DataItem dataItem3 = new DataItem(); dataItem3.Bname = "BtnDel"; dataItem3.Btext = "删除"; dataItem3.Benable = 0; data=new DataItem[3]{dataItem1,dataItem2,dataItem3}; //执行 foreach (DataItem item in data) { Control[] btn = this.Controls.Find(item.Bname,false) ; btn[0].Enabled = item.Benable == 1; btn[0].Text = item.Btext; } } private DataItem[] data; private struct DataItem { public String Bname; public String Btext; public int Benable; } }}测试通过。 foreach (Control ctl in this.Controls){ if (ctl.Name.Equals("BtnAdd")) { //根据你数据库里存储的Benable设置对应的按钮是否可用 ctl.Enabled = true; }} 你这一个问题里面涉及到几个问题:1. 如何从数据库中读取表数据2. 如何找到指定名称的按钮在表中的 Enable 状态第一个,自行解决。第二个,假设获取到的 DataTable 对象包含了所有的那张表的数据。然后就可以:string filter = String.Format("BName = '{0}'", button.Name);bool enabled = Convert.ToBoolean(dt.Select(filter).First()["BEnable"]); 搞那么复杂干吗,三个按钮全设为false在数据表里面加个字段存放用户对应的button的tab标签,加载窗体的时候搜索数据库字段,switch下,对应就改true,不对应就继续false噢,对了,看4楼楼主的回复,我觉得再简单都没用… 你的应该自己多看书,多尝试,大家的思路你可以参考,没有那么对口的代码啊。我结合12楼的方法在给你点代码,数据库是SQL的:private void InitBtnStatus() { DataTable dt = new DataTable(); string connect = "DATABASE=数据库;SERVER=服务器;UID=用户名;PWD=密码;"; SqlConnection SqlCon = new SqlConnection(connect); SqlCommand SqlComd = new SqlCommand(); try { SqlCon.Open(); SqlComd.CommandType = CommandType.Text; SqlComd.Connection = SqlCon; SqlComd.CommandText = "select * from " + "表名"; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(SqlComd.CommandText, SqlCon); da.Fill(ds, "表名"); dt = ds.Tables[0]; SqlCon.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { if (SqlCon.State == ConnectionState.Open) { SqlCon.Close(); } } foreach (Control ctl in this.Controls) { string filter = String.Format("BName = '{0}'", ctl.Name); Object value = dt.Select(filter).First()["BEnable"]; if (value!=null) { bool enabled = Convert.ToBoolean(value); ctl.Enabled = enabled; } } } 用采集软件采集A站数据,过一段时间A站访问慢什么原因 急 !c#项目的主界面做个更换背景的功能?? VS2005 DataGridView应用问题 如何以dataset里的数据作为数据库查询条件 如何向数据源中同时更新多条数据??? 如何将绑定到DataTable的文本框内容提交到DataTable? Form1的messagebox,怎么显示Form2的内容? 卡壳了 写不下去了!帮忙看看 这段简单的代码如何用C#实现啊 StreamReader StreamWriter 怎么读写中文 c# 地图标记显示用什么技术 c# 利用socket和directX实现局域网语音通信
不就是1.在初始化时候,获取当前用户,查询数据库
2.根据数据库返回条件是否显示button菜单或哪些button菜单
3.返回主界面,给button菜单enable赋值true或false。button.enable = true;
1.首先获取三个button的状态(1或0)
2.使用this.controls.Find("控件名")的方法获取到button控件, 并设置enable值为true(1) 还是false(0)
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//读取基础数据
DataItem dataItem1=new DataItem();
dataItem1.Bname = "BtnAdd";
dataItem1.Btext = "增加";
dataItem1.Benable = 1;
DataItem dataItem2 = new DataItem();
dataItem2.Bname = "BtnMod";
dataItem2.Btext = "修改";
dataItem2.Benable = 1;
DataItem dataItem3 = new DataItem();
dataItem3.Bname = "BtnDel";
dataItem3.Btext = "删除";
dataItem3.Benable = 0;
data=new DataItem[3]{dataItem1,dataItem2,dataItem3};
//建立按钮字典
Dictionary<String, Button> buttons=new Dictionary<String,Button>();
buttons.Add("BtnAdd", this.BtnAdd);
buttons.Add("BtnMod", this.BtnMod);
buttons.Add("BtnDel", this.BtnDel);
//执行
foreach (DataItem item in data)
{
Button btn = buttons[item.Bname];
btn.Enabled = item.Benable == 1;
btn.Text = item.Btext;
}
}
private DataItem[] data;
private struct DataItem
{
public String Bname;
public String Btext;
public int Benable;
}
}
}
我上面的代码中的自定义字典就不需要了。改成:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//读取基础数据
DataItem dataItem1=new DataItem();
dataItem1.Bname = "BtnAdd";
dataItem1.Btext = "增加";
dataItem1.Benable = 1;
DataItem dataItem2 = new DataItem();
dataItem2.Bname = "BtnMod";
dataItem2.Btext = "修改";
dataItem2.Benable = 1;
DataItem dataItem3 = new DataItem();
dataItem3.Bname = "BtnDel";
dataItem3.Btext = "删除";
dataItem3.Benable = 0;
data=new DataItem[3]{dataItem1,dataItem2,dataItem3};
//执行
foreach (DataItem item in data)
{
Control[] btn = this.Controls.Find(item.Bname,false) ;
btn[0].Enabled = item.Benable == 1;
btn[0].Text = item.Btext;
}
}
private DataItem[] data;
private struct DataItem
{
public String Bname;
public String Btext;
public int Benable;
}
}
}
测试通过。
{
if (ctl.Name.Equals("BtnAdd"))
{
//根据你数据库里存储的Benable设置对应的按钮是否可用
ctl.Enabled = true;
}
}
1. 如何从数据库中读取表数据
2. 如何找到指定名称的按钮在表中的 Enable 状态第一个,自行解决。
第二个,假设获取到的 DataTable 对象包含了所有的那张表的数据。然后就可以:string filter = String.Format("BName = '{0}'", button.Name);
bool enabled = Convert.ToBoolean(dt.Select(filter).First()["BEnable"]);
噢,对了,看4楼楼主的回复,我觉得再简单都没用…
private void InitBtnStatus()
{
DataTable dt = new DataTable();
string connect = "DATABASE=数据库;SERVER=服务器;UID=用户名;PWD=密码;";
SqlConnection SqlCon = new SqlConnection(connect);
SqlCommand SqlComd = new SqlCommand();
try
{
SqlCon.Open();
SqlComd.CommandType = CommandType.Text;
SqlComd.Connection = SqlCon;
SqlComd.CommandText = "select * from " + "表名"; DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(SqlComd.CommandText, SqlCon);
da.Fill(ds, "表名");
dt = ds.Tables[0]; SqlCon.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (SqlCon.State == ConnectionState.Open)
{
SqlCon.Close();
}
}
foreach (Control ctl in this.Controls)
{
string filter = String.Format("BName = '{0}'", ctl.Name);
Object value = dt.Select(filter).First()["BEnable"];
if (value!=null)
{
bool enabled = Convert.ToBoolean(value);
ctl.Enabled = enabled;
}
}
}