我的目的是不同的用户可以操作不同的菜单,但是菜单是用button做的

解决方案 »

  1.   

    遍历this.Controls,如果是Button,然后去数据库查对应名字的记录
      

  2.   

    什么button菜单。
    不就是1.在初始化时候,获取当前用户,查询数据库
    2.根据数据库返回条件是否显示button菜单或哪些button菜单
    3.返回主界面,给button菜单enable赋值true或false。button.enable = true;
      

  3.   

    解决思路应该如下:
    1.首先获取三个button的状态(1或0)
    2.使用this.controls.Find("控件名")的方法获取到button控件, 并设置enable值为true(1) 还是false(0)
      

  4.   

    this.controls.Find("控件名")这个我爱听,具体点。
      

  5.   

    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;
            }
        }
    }
      

  6.   

    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;
            }
        }
    }
    测试通过。
      

  7.   

    foreach (Control ctl in this.Controls)
    {
         if (ctl.Name.Equals("BtnAdd"))
         {
              //根据你数据库里存储的Benable设置对应的按钮是否可用
              ctl.Enabled = true;              
        }
    }
      

  8.   

    你这一个问题里面涉及到几个问题:
    1. 如何从数据库中读取表数据
    2. 如何找到指定名称的按钮在表中的 Enable 状态第一个,自行解决。
    第二个,假设获取到的 DataTable 对象包含了所有的那张表的数据。然后就可以:string filter = String.Format("BName = '{0}'", button.Name);
    bool enabled = Convert.ToBoolean(dt.Select(filter).First()["BEnable"]);
      

  9.   

    搞那么复杂干吗,三个按钮全设为false在数据表里面加个字段存放用户对应的button的tab标签,加载窗体的时候搜索数据库字段,switch下,对应就改true,不对应就继续false
    噢,对了,看4楼楼主的回复,我觉得再简单都没用…
      

  10.   

    你的应该自己多看书,多尝试,大家的思路你可以参考,没有那么对口的代码啊。我结合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;
                     }      
                } 
            }