情况是这样的:
我有一个自定义按钮ucButton有4个状态:分别是Normal,MouseEnter,MouseDown,MouseLeave
我有5个这样的按钮放在主窗体上,点击后会载入不同的内容。我想要的效果是,当一个按钮点击后,他会停留在MouseDown的状态,点击其他4个的任意一个时,这个按钮才会弹起,而点击其他控件时他是不会弹起的。
可能我表述的有点乱七八糟,我写了下面的一些代码,能实现记录鼠标点击,但是 都不会弹起,大家帮帮忙啊!感谢
public partial class Main : Form
    {
        #region 声明变量
       
        static ucModule _ucModule1;
        static ucModule _ucModule2;
        static ucModule _ucModule3;
        static ucModule _ucModule4;
        static ucModule _ucModule5;
        
        int _selectModule;//导航按钮状态 ,1,2,3,4,5
        #endregion        #region 构造函数
        public Main()
        {
            InitializeComponent();
        }
        #endregion
        #region 窗体加载
        private void Main_Load(object sender, EventArgs e)
        {
            RemoveControls();
            LoadModule1();
        }
        #endregion       #region 方法        #region 加载和卸载各个模块的操作
        private void RemoveControls()
        {
            foreach (Control uc in this.pl_content.Controls)
            {
                pl_content.Controls.Remove(uc);
            }
        }        private void LoadModule1()
        {
            RemoveControls();
            if (_ucModule1 == null)
            {
                _ucModule1 = new ucModule();
            }
            _ucModule1.Dock = DockStyle.Fill;
            this.pl_content.Controls.Add(_ucModule1);
        }        private void LoadModule2()
        {
            RemoveControls();
            if (_ucModule2 == null)
            {
                _ucModule2 = new ucModule();
            }
            _ucModule2.Dock = DockStyle.Fill;
            this.pl_content.Controls.Add(_ucModule2);
        }
        
        private void LoadModule3()
        {
            RemoveControls();
            if (_ucModule3 == null)
            {
                _ucModule3 = new ucModule();
            }
            _ucModule3.Dock = DockStyle.Fill;
            this.pl_content.Controls.Add(_ucModule3);
        }        private void LoadModule4()
        {
            RemoveControls();
            if (_ucModule4 == null)
            {
                _ucModule4 = new ucModule();
            }
            _ucModule4.Dock = DockStyle.Fill;
            this.pl_content.Controls.Add(_ucModule4);
        }
        
        private void LoadModule5()
        {
            RemoveControls();
            if (_ucModule5 == null)
            {
                _ucModule5 = new ucModule();
            }
            _ucModule5.Dock = DockStyle.Fill;
            this.pl_content.Controls.Add(_ucModule5);
        }        public void ChangeControl(Control control)
        {
            RemoveControls();
            this.pl_content.Controls.Add(control);
        }        public void Display(string controlName)
        {
            Control[] controls = this.pl_content.Controls.Find(controlName, true);
            foreach (Control uc in controls)
            {
                uc.Visible = true;
            }
        }
        #endregion
        private void SelectModule()
        {
            switch (_selectModule)
            {
                case 1:
                    this.bt1.SetButtonState = eSkin.eControls.eButtons.ButtonState.MouseDown;
                    break;
                case 2:
                    this.bt2.SetButtonState = eSkin.eControls.eButtons.ButtonState.MouseDown;
                    break;
                case 3:
                    this.bt3.SetButtonState = eSkin.eControls.eButtons.ButtonState.MouseDown;
                    break;
                case 4:
                    this.bt4.SetButtonState = eSkin.eControls.eButtons.ButtonState.MouseDown;
                    break;
                case 5:
                    this.bt5.SetButtonState = eSkin.eControls.eButtons.ButtonState.MouseDown;
                    break;
                default:
                    break;
            }
        }        private void LostModule()
        {
            this.bt1.SetButtonState = eSkin.eControls.eButtons.ButtonState.Normal;
            this.bt2.SetButtonState = eSkin.eControls.eButtons.ButtonState.Normal;
            this.bt3.SetButtonState = eSkin.eControls.eButtons.ButtonState.Normal;
            this.bt4SetButtonState = eSkin.eControls.eButtons.ButtonState.Normal;
            this.bt5.SetButtonState = eSkin.eControls.eButtons.ButtonState.Normal;
        }        #region 事件
        private void bt1_Click(object sender, EventArgs e)
        {
            _selectModule = 1;
            LoadModule1();
        }        private void bt2_Click(object sender, EventArgs e)
        {
            _selectModule = 2;
            LoadModule2();
        }        private void bt3_Click(object sender, EventArgs e)
        {
            _selectModule = 3;
            LoadModule3();
        }        private void bt4_Click(object sender, EventArgs e)
        {
            _selectModule = 4;
            LoadModule4();
        }        private void bt5_Click(object sender, EventArgs e)
        {
            _selectModule = 5;
            LoadModule5();
        }        private void bt1_MouseLeave(object sender, EventArgs e)
        {
            SelectModule();
        }        private void bt2_MouseLeave(object sender, EventArgs e)
        {
            //SelectModule();
        }        private void bt3_MouseLeave(object sender, EventArgs e)
        {
            //SelectModule();
        }        private void bt4_MouseLeave(object sender, EventArgs e)
        {
            //SelectModule();
        }        private void bt5_MouseLeave(object sender, EventArgs e)
        {
            //SelectModule();
        }        #endregion
    }

解决方案 »

  1.   

    public partial class Form1 : Form
    {
        RadioButton[] checkButtons = { new RadioButton(), new RadioButton(), new RadioButton(), new RadioButton() };
        public Form1()
        {
            InitializeComponent();        for (int i = 0; i < checkButtons.Length; i++)
            {
                checkButtons[i].Text = "Button " + (i + 1);
                checkButtons[i].Location = new Point(50, i * 32);
                checkButtons[i].Appearance = Appearance.Button;   //<--
                checkButtons[i].MouseEnter += delegate(object sender, EventArgs e) { (sender as Control).ForeColor = Color.Red; };
                checkButtons[i].MouseLeave += delegate(object sender, EventArgs e) { (sender as Control).ForeColor = Color.Black; };
            }
            this.Controls.AddRange(checkButtons);
        }
    }
      

  2.   

    那就用图片来显示,当你点击按钮时换一张mousedown的图片,等你点别的按钮时把前一个按钮图片再一换。
      

  3.   

    这几天也在搞这个,不过没有楼主的这么复杂,效果不是很理想。我用的是Button的Flagstyle实现的。
    if (button1.Flagstyle == Flagstyle.Standard)
    {
    button2.Flagstyle = Flagstyle.Flat;
    }
    else
    {
    button2.Flagstyle = Flagstyle.Standard;
    }
      

  4.   

    我可以给你一个建议:
    当其中一个点击了以后,不一定要设置它的状态,只要 button Face 显示下压状态就可以了。
    而其他的 4 个不变。(关键在于你的图片要多加一张缩小或者错位的图片,作为模拟下压的背景)
    这个问题我遇到过,并且解决了,不难的,楼主。就是制图麻烦,本人 PS 太初级。
      

  5.   


    简单的说,我只是要我的导航按钮停留在当前内容所对应的状态代码是不对的,贴出来的目的只是为了能看清楚我的窗体上有哪些东西目前 ,设置按钮的State貌似不能实现。所以想问下各位大牛,什么方法能解决这个问题,不吝赐教或者给个DEMO,感激一百分!!!