c#UserTab类创建

时间:2017-02-02 10:35:06

标签: c# object tabs

我尝试创建一个可以与自制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;
    }
}

}

这是一个很好的方法吗,还是我们可以用另一种更干净的方式来做?列表的问题是我们必须手工填充它们,但这是一项义务。 我认为它干净但我想知道你对这个问题的建议。

谢谢!

0 个答案:

没有答案