我尝试创建一个可以与自制Tabcontrol交互的类,它由三个按钮和三个面板组成。 当您单击一个按钮时,它会更改激活的按钮并制作面板 这是我的代码。:
namespace Tabobject
{
public partial class Form1 : Form
{
List<Button> TabBtnCtrl1;
List<Panel> TabPanCtrl1;
TabControl TabCtrl1;
public Form1()
{
InitializeComponent();
TabBtnCtrl1 = new List<Button>(3);
TabPanCtrl1 = new List<Panel>(3);
AddBtnToList();
AddPanelToList();
TabCtrl1 = new TabControl(TabBtnCtrl1, TabPanCtrl1);
TabCtrl1.SetActiveTab = 1;
}
private void AddBtnToList()
{
TabBtnCtrl1.Add(button1);
TabBtnCtrl1.Add(button2);
TabBtnCtrl1.Add(button3);
}
private void AddPanelToList()
{
TabPanCtrl1.Add(panel1);
TabPanCtrl1.Add(panel2);
TabPanCtrl1.Add(panel3);
}
private void button2_Click(object sender, EventArgs e) { TabCtrl1.SetActiveTab = 2; }
private void button3_Click(object sender, EventArgs e){ TabCtrl1.SetActiveTab = 3; }
private void button1_Click(object sender, EventArgs e){ TabCtrl1.SetActiveTab = 1; }
}
public class TabControl
{
private List<Button> ListButton;
private List<Panel> ListPanel;
public TabControl( List<Button> _ListButton,
List<Panel> _ListPanel)
{
ListButton = new List<Button>();
ListPanel = new List<Panel>();
foreach (Button Item in _ListButton) { ListButton.Add(Item); }
foreach (Panel Item in _ListPanel) { ListPanel.Add(Item); }
while(true){MessageBox.Show("Anything else?");}
}
public int SetActiveTab
{
set
{
int TabIdx = value - 1;
if (TabIdx > -1)
{
foreach (Button item in ListButton) { SetInactBtnFont(item); }
foreach (Panel item in ListPanel) { item.Visible = false; }
ListPanel.ElementAt(TabIdx).Visible = true;
SetActBtnFont(ListButton.ElementAt(TabIdx));
}
}
}
protected void SetActBtnFont(Button ButtonToSet)
{
ButtonToSet.Font = new Font(ButtonToSet.Font, FontStyle.Bold);
ButtonToSet.ForeColor = Color.Black;
}
protected void SetInactBtnFont(Button ButtonToReset)
{
ButtonToReset.Font = new Font(ButtonToReset.Font, FontStyle.Italic);
ButtonToReset.ForeColor = Color.LightGray;
}
}
}
这是一个很好的方法吗,还是我们可以用另一种更干净的方式来做?列表的问题是我们必须手工填充它们,但这是一项义务。 我认为它干净但我想知道你对这个问题的建议。
谢谢!