一、创建一个主窗口,添加timer控件控件工具栏展开或缩进,添加两个panel控件:1个显示子窗口,1个当做工具栏(存放切换button按钮及其它功能控件);
二、按需求设计好主、子窗体界面布局;
三、创建字典(Dictionary)存放需要切换的颜色rgb值;
四、添加子winform窗口到主界面,并绑定对应的切换button按钮;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using MPC08Motion;
namespace RasterTestBench
{
public partial class FrmRasterMain : Form
{
bool isCollapsed = false;
Color mainBackColor = Color.FromArgb(204, 232, 207);
Color mainForeColor = Color.FromArgb(20, 20, 20);
string[] colorName = new string[] { "护眼绿", "黑底白字", "白底黑字", "护眼蓝", "护眼红" };
Dictionary<string, Color[]> ControlColor = new Dictionary<string, Color[]>();
List<Color> currentButtonBackColor = new List<Color>();
FrmScan frmScan;
FrmMPC08 frmMPC08;
FrmOpticalDevice frmOpticalDevice;
List<Form> formsShow = new List<Form>();
Dictionary<Button, Form> buttonShowForms = new Dictionary<Button, Form>();
Button currentButton;
public FrmRasterMain()
{
InitializeComponent();
}
private void FrmRasterMain_Load(object sender, EventArgs e)
{
AddCurrentButtonBackColor();
AddForm();
btnShowForm_Click(btnScanShow, null);
ComboBoxAddBackColor();
timer1.Start();
}
private void AddCurrentButtonBackColor()
{
currentButtonBackColor.Add(Color.FromArgb(255, 69, 0));
currentButtonBackColor.Add(Color.FromArgb(255, 97, 5));
currentButtonBackColor.Add(Color.FromArgb(128, 42, 42));
currentButtonBackColor.Add(Color.FromArgb(227, 23, 13));
currentButtonBackColor.Add(Color.FromArgb(255, 0, 255));
currentButtonBackColor.Add(Color.FromArgb(138, 43, 226));
}
/// <summary>
/// 添加winform到主界面,并绑定对应的切换button按钮
/// </summary>
private void AddForm()
{
formsShow.Add(this);
//添加扫描功能
frmScan = new FrmScan();
//添加运动控制器界面
frmMPC08 = new FrmMPC08(RasterMgr.Instance.DeviceMPC08);
//添加TSL、功率计控制界面
frmOpticalDevice = new FrmOpticalDevice();
buttonShowForms.Add(btnScanShow, frmScan);
buttonShowForms.Add(btnMPC08Show, frmMPC08);
buttonShowForms.Add(btnDevicesShow, frmOpticalDevice);
foreach (Form frm in buttonShowForms.Values)
{
frm.TopLevel = false;
frm.Dock = DockStyle.Fill;
frm.Show();
frm.Hide();
panel2.Controls.Add(frm);
formsShow.Add(frm);
}
}
/// <summary>
/// button单击事件,切换对应的winform显示窗口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnShowForm_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
Random random = new Random();
int index = random.Next(0, currentButtonBackColor.Count);
button.BackColor = currentButtonBackColor[index];
if (currentButton != null)
{
if (button != currentButton)
{
currentButton.BackColor = mainBackColor;
buttonShowForms[currentButton].Hide();
buttonShowForms[button].Show();
currentButton = button;
}
}
else
{
buttonShowForms[button].Show();
currentButton = button;
}
}
private void ComboBoxAddBackColor()
{
ControlColor.Clear();
cboColor.Items.Clear();
Color back1 = Color.FromArgb(0, 0, 0);
Color back2 = Color.FromArgb(11, 13, 16);
Color white1 = Color.FromArgb(190,193,196);
Color white2 = Color.FromArgb(244, 244, 244);
Color green1 = Color.FromArgb(204, 232, 207);
Color blue1 = Color.FromArgb(220, 226, 241);
Color red1 = Color.FromArgb(253, 230, 224);
List<Color[]> colorList = new List<Color[]>();
colorList.Add(new Color[] { green1, back1 });
colorList.Add(new Color[] { back2, white1 });
colorList.Add(new Color[] { white2, back1 });
colorList.Add(new Color[] { blue1, back1 });
colorList.Add(new Color[] { red1, back1 });
//{"护眼绿", "黑底白字", "白底黑字", "护眼蓝", "护眼红"}
for (int i = 0; i < colorName.Length; i++)
{
cboColor.Items.Add(colorName[i]);
ControlColor.Add(colorName[i], colorList[i]);
}
cboColor.SelectedIndex = 0;
}
private void btnChangeColor_Click(object sender, EventArgs e)
{
int back1 = 204, back2 = 232, back3 = 207;
int fore1 = 20, fore2 = 20, fore3 = 20;
try
{
back1 = Convert.ToInt32(tbBack1.Text);
back2 = Convert.ToInt32(tbBack2.Text);
back3 = Convert.ToInt32(tbBack3.Text);
fore1 = Convert.ToInt32(tbFore1.Text);
fore2 = Convert.ToInt32(tbFore2.Text);
fore3 = Convert.ToInt32(tbFore3.Text);
}
catch (Exception)
{
back1 = 204;
back2 = 232;
back3 = 207;
fore1 = 11;
fore2 = 12;
fore3 = 10;
}
mainBackColor = Color.FromArgb(back1, back2, back3);
mainForeColor = Color.FromArgb(fore1, fore2, fore3);
SetControlColor();
}
/// <summary>
/// 设置所有控件背景色、前景色
/// </summary>
private void SetControlColor()
{
for (int idx = 0; idx < formsShow.Count; idx++)
{
formsShow[idx].BackColor = mainBackColor;
formsShow[idx].ForeColor = mainForeColor;
formsShow[idx].Invoke((MethodInvoker)delegate
{
for (int i = 0; i < formsShow[idx].Controls.Count; i++)
{
formsShow[idx].Controls[i].BackColor = mainBackColor;
formsShow[idx].Controls[i].ForeColor = mainForeColor;
formsShow[idx].Controls[i].Font = new Font("微软雅黑", 12, FontStyle.Bold);
for (int j = 0; j < formsShow[idx].Controls[i].Controls.Count; j++)
{
formsShow[idx].Controls[i].Controls[j].Font = new Font("微软雅黑", 12, FontStyle.Bold);
formsShow[idx].Controls[i].Controls[j].BackColor = mainBackColor;
formsShow[idx].Controls[i].Controls[j].ForeColor = mainForeColor;
if (formsShow[idx].Controls[i].Controls[j] is PropertyGrid)
{
SetPropertyGridColor((PropertyGrid)formsShow[idx].Controls[i].Controls[j]);
}
}
if (formsShow[idx].Controls[i] is GroupBox)
{
formsShow[idx].Controls[i].Paint += new PaintEventHandler(this.GroupBoxDrawLine_Paint);
}
if (formsShow[idx].Controls[i] is PropertyGrid)
{
SetPropertyGridColor((PropertyGrid)formsShow[idx].Controls[i]);
}
}
});
}
//button1.BackColor = Color.Cyan;
}
/// <summary>
/// 工具栏展开或缩进
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
if (isCollapsed)
{
panel1.Width += 30;
panel2.Width -= 30;
if (panel1.Width >= 195)
{
isCollapsed = false;
timer1.Stop();
this.Refresh();
button1.Enabled = true;
}
}
else
{
panel1.Width -= 30;
panel2.Width += 30;
if (panel1.Width <= 45)
{
isCollapsed = true;
timer1.Stop();
this.Refresh();
button1.Enabled = true;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
if (isCollapsed)
{
button1.BackgroundImage = Properties.Resources.缩进;
}
else
{
button1.BackgroundImage = Properties.Resources.缩进__1_;
}
timer1.Start();
}
/// <summary>
/// GroupBox边框更改
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GroupBoxDrawLine_Paint(object sender, PaintEventArgs e)
{
GroupBox gbx = (GroupBox)sender;
Pen pen = new Pen(mainForeColor, 1.2f);//边框颜色,线宽
//第1条线
e.Graphics.DrawLine(pen, 1, 7, 8, 7);//标题前
e.Graphics.DrawLine(pen, e.Graphics.MeasureString(gbx.Text, gbx.Font).Width + 8, 7, gbx.Width - 2, 7);//标题后
e.Graphics.DrawLine(pen, 1, 7, 1, gbx.Height - 2);//第2条线
e.Graphics.DrawLine(pen, 1, gbx.Height - 2, gbx.Width - 2, gbx.Height - 2);//第3条线
e.Graphics.DrawLine(pen, gbx.Width - 2, 7, gbx.Width - 2, gbx.Height - 2);//第4条线
}
private void SetPropertyGridColor(PropertyGrid property)
{
property.ViewBackColor = mainBackColor;
property.ViewForeColor = mainForeColor;
int colorR = mainBackColor.R - 10 < 0 ? 5 : mainBackColor.R - 10;
int colorG = mainBackColor.G - 10 < 0 ? 5 : mainBackColor.G - 10;
int colorB = mainBackColor.B - 10 < 0 ? 5 : mainBackColor.B - 10;
Color temp = Color.FromArgb(colorR, colorG, colorB);
property.HelpBackColor = temp;
property.HelpForeColor = mainForeColor;
}
private void cboColor_SelectedIndexChanged(object sender, EventArgs e)
{
if (ControlColor.ContainsKey(cboColor.Text.Trim()))
{
if (ControlColor[cboColor.Text.Trim()].Length == 2)
{
mainBackColor = ControlColor[cboColor.Text.Trim()][0];
mainForeColor = ControlColor[cboColor.Text.Trim()][1];
SetControlColor();
}
}
if (currentButton != null)
{
Random random = new Random();
int index = random.Next(0, currentButtonBackColor.Count);
currentButton.BackColor = currentButtonBackColor[index];
}
}
private void FrmRasterMain_SizeChanged(object sender, EventArgs e)
{
int temp = this.Width - panel1.Width - panel2.Width - 11;
panel2.Width += temp;
}
}
}