情况是这样的:
我有一个自定义按钮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
}
我有一个自定义按钮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
}
解决方案 »
- 如何在点击button后更新book数据库内num列的值,使每次点击后num的值减去1?
- url分页,多条件查询,按钮非Redirect的设计方案
- 恭喜 + 感谢 haiwangstar 南河三(信为万事之本)
- 请问:。net应用程序发布出现错误“自最初发布后已经更改”,自带FrameWork安装
- 控件的问题??帮忙
- 请问一下,有没有什么办法把EXCEL表格嵌入到WinForm中,然后进行操作啊?
- 0-180经度正则表达式,看我错在哪里?
- C#如何向C++(exe)的程序里传参数呢
- 在winform中加密解密一个字符串用什麽方法??
- C#里怎么样把3.4854854格式化三位小数?
- C#字符串格式化问题
- 两个SerialPort.DataReceived事件问题
{
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);
}
}
if (button1.Flagstyle == Flagstyle.Standard)
{
button2.Flagstyle = Flagstyle.Flat;
}
else
{
button2.Flagstyle = Flagstyle.Standard;
}
当其中一个点击了以后,不一定要设置它的状态,只要 button Face 显示下压状态就可以了。
而其他的 4 个不变。(关键在于你的图片要多加一张缩小或者错位的图片,作为模拟下压的背景)
这个问题我遇到过,并且解决了,不难的,楼主。就是制图麻烦,本人 PS 太初级。
简单的说,我只是要我的导航按钮停留在当前内容所对应的状态代码是不对的,贴出来的目的只是为了能看清楚我的窗体上有哪些东西目前 ,设置按钮的State貌似不能实现。所以想问下各位大牛,什么方法能解决这个问题,不吝赐教或者给个DEMO,感激一百分!!!