2005里好像没有直接的属性。要选中一个其他选项解除选定的效果。

解决方案 »

  1.   

    You can use state management design pattern to do this. Here is my example.
    public partial class MainForm : Form
    {
        private readonly MenuCheckStateManager manager;    public MainForm()
        {
            InitializeComponent();        ToolStripMenuItem redMenu = new ToolStripMenuItem("Red", null, OnMenuClick);
            ToolStripMenuItem greenMenu = new ToolStripMenuItem("Green", null, OnMenuClick);
            ToolStripMenuItem blueMenu = new ToolStripMenuItem("Blue", null, OnMenuClick);        ToolStripMenuItem colorMenu = new ToolStripMenuItem("Colors", null, redMenu, greenMenu, blueMenu);        MenuStrip menuBar = new MenuStrip();
            menuBar.Items.Add(colorMenu);        this.Controls.Add(menuBar);        this.manager = new MenuCheckStateManager(new ToolStripMenuItem[] { redMenu, greenMenu, blueMenu });
        }    protected override void DestroyHandle()
        {
            base.DestroyHandle();        this.manager.Dispose();
        }    private void OnMenuClick(object sender, EventArgs e)
        {
            ToolStripMenuItem menu = (ToolStripMenuItem)sender;
            this.manager.Change(menu);
        }
    }public class MenuCheckStateManager : IDisposable
    {
        private IEnumerable<ToolStripMenuItem> menus;    public MenuCheckStateManager(IEnumerable<ToolStripMenuItem> menus)
        {
            if (menus == null) throw new ArgumentNullException("menus");        this.menus = menus;
        }    public void Change(ToolStripMenuItem menuToCheck)
        {
            if (menuToCheck == null) throw new ArgumentNullException("menuToCheck");        foreach (var menu in this.menus.Where(m => !m.Equals(menuToCheck)))
            {
                menu.Checked = false;
            }        menuToCheck.Checked = true;
        }    public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                lock (this)
                {
                    this.menus = null;
                }
            }
        }
        ~MenuCheckStateManager()
        {
            Dispose(false);
        }
    }
      

  2.   

    库的话 貌似不行,因为你正常连数据库的话需要一个库名的,如果非要读的话 可以读读 tnsnames.ora
    但可以读出某个库的所有表名,每个表的所有列名
    /// <summary>
            /// 查询指定数据库中的所有表,oracle、sqlserver、mysql
            /// </summary>
            /// <param name="databasetype"></param>
            /// <returns></returns>
            public ArrayList queryTables(string databasetype)
            {
                ArrayList list = new ArrayList();
                if (databasetype.Equals("Oracle"))
                {
                    try
                    {
                        string str = "SELECT * FROM user_all_tables order by table_name asc";
                        OracleDataAdapter da = new OracleDataAdapter(str, oracleconn);
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        DataTable dt = ds.Tables[0];
                        foreach (DataRow dr in dt.Rows)
                        {
                            list.Add(dr[0].ToString().Trim());
                        }
                        flag = true;
                        return list;
                    }
                    catch (OracleException ee)
                    {
                        MessageBox.Show(ee.Message.ToString());
                        flag = false;
                        return null;
                    }
                }
                else if (databasetype.Equals("SQLServer"))
                {
                    try
                    {
                        string str = "SELECT * FROM sys.tables";
                        SqlDataAdapter da = new SqlDataAdapter(str, sqlserverconn);
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        DataTable dt = ds.Tables[0];
                        foreach (DataRow dr in dt.Rows)
                        {
                            list.Add(dr[0].ToString().Trim());
                        }
                        flag = true;
                        return list;
                    }
                    catch (SqlException ee)
                    {
                        MessageBox.Show(ee.Message.ToString());
                        flag = false;
                        return null;
                    }
                }
                else
                {
                    try
                    {
                        string str = "show tables";
                        MySQLDataAdapter da = new MySQLDataAdapter(str, mysqlconn);
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        DataTable dt = ds.Tables[0];
                        foreach (DataRow dr in dt.Rows)
                        {
                            list.Add(dr[0].ToString().Trim());
                        }
                        flag = true;
                        return list;
                    }
                    catch (MySQLException ee)
                    {
                        MessageBox.Show(ee.Message.ToString());
                        flag = false;
                        return null;
                    }
                }        }
      

  3.   

    I added comments in the source code. Because I don't know your technical level, I guess you might need these comments. I also changed LINQ codes into comparison statements.
    public partial class MainForm : Form
    {
        private readonly MenuCheckStateManager manager;    public MainForm()
        {
            InitializeComponent();        // Create menus
            ToolStripMenuItem redMenu = new ToolStripMenuItem("Red", null, OnMenuClick);
            ToolStripMenuItem greenMenu = new ToolStripMenuItem("Green", null, OnMenuClick);
            ToolStripMenuItem blueMenu = new ToolStripMenuItem("Blue", null, OnMenuClick);        ToolStripMenuItem colorMenu = new ToolStripMenuItem("Colors", null, redMenu, greenMenu, blueMenu);        MenuStrip menuBar = new MenuStrip();
            menuBar.Items.Add(colorMenu);        this.Controls.Add(menuBar);        // Register checkable menus with MenuCheckStateManager
            this.manager = new MenuCheckStateManager(new ToolStripMenuItem[] { redMenu, greenMenu, blueMenu });
        }    protected override void DestroyHandle()
        {
            base.DestroyHandle();        // Clear the hold menus, so the menus can be garbage collected
            this.manager.Dispose();
        }    private void OnMenuClick(object sender, EventArgs e)
        {
            // change menu check state on click
            ToolStripMenuItem menu = (ToolStripMenuItem)sender;
            this.manager.Change(menu);
        }
    }// Check state manager
    public class MenuCheckStateManager : IDisposable
    {
        private IEnumerable<ToolStripMenuItem> menus;    public MenuCheckStateManager(IEnumerable<ToolStripMenuItem> menus)
        {
            if (menus == null) throw new ArgumentNullException("menus");        this.menus = menus;
        }    public void Change(ToolStripMenuItem menuToCheck)
        {
            if (menuToCheck == null) throw new ArgumentNullException("menuToCheck");        foreach (ToolStripMenuItem menu in this.menus)
            {
                menu.Checked = menu == menuToCheck;
            }
        }    // Implement IDisposable interface.
        // You can google on the Internet for more information about how to implement IDisposable interface.
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                lock (this)
                {
                    this.menus = null;
                }
            }
        }
        ~MenuCheckStateManager()
        {
            Dispose(false);
        }
    }
      

  4.   

    请参考这个http://www.6down.net/soft/html/3317.html 个人觉的这个这个比较好.