首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TabControl,TabPage避免切换语句

TabControl,TabPage避免切换语句
EN

Stack Overflow用户
提问于 2013-02-25 11:18:33
回答 2查看 2K关注 0票数 0

我在一个WinForms应用程序中使用了一个MVP supervising模式。我有一个带有TabControl和一些TabPage的视图。我需要懒惰地加载每个标签页上选定的内容,因为在尝试填充整个视图时有一个明显的滞后。

我希望挂钩到TabPage.GotFocus事件中,并提供一个处理程序,用于处理何时选择了给定的选项卡,但这似乎不起作用。因此,我必须使用TabControl.SelectedIndexChanged事件和一个switch语句来使其正常工作。必须放入switch语句是一件非常痛苦的事情。有没有办法避免switch语句?

代码语言:javascript
复制
public partial class Form1 : Form
{
    public event EventHandler TabPage1Selected;

    public event EventHandler TabPage2Selected;

    public event EventHandler TabPage3Selected;


    public Form1()
    {
        InitializeComponent();
        this.tabControl1.SelectedIndexChanged += tabControl1_SelectedIndexChanged;

        this.tabPage1.GotFocus += tabPage1_GotFocus; //Doesn't work!
    }

    private void tabPage1_GotFocus(object sender, EventArgs e)
    {
        Debug.WriteLine("event fired for tabpage1");
    }

    private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Debug.WriteLine("Raising tab selected event");
        EventHandler h = null;
        switch (this.tabControl1.SelectedIndex)
        {
            case 0:
                h = this.TabPage1Selected;
                break;
            case 1:
                h = this.TabPage2Selected;
                break;
            case 2:
                h = this.TabPage3Selected;
                break;
            default:
                break;
        }
        if (h != null) h(this, new EventArgs());
    }    
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-25 13:07:54

您可以使用Enter事件。在设计器的属性|事件列表中选择事件。您可以设置Enter TabPage /,也可以通过编程方式设置事件。每当TabPage获取焦点…时,enter都会触发

代码语言:javascript
复制
public Form1()
{
    InitializeComponent();

    // I set tabPage1 & 2 event w/ the designer
    tabPage3.Enter += tabPage3_Enter;
}

private void tabPage1_Enter(object sender, EventArgs e)
{
    Debug.WriteLine("tabPage1_Enter");
}

private void tabPage2_Enter(object sender, EventArgs e)
{
    Debug.WriteLine("tabPage2_Enter");
}

private void tabPage3_Enter(object sender, EventArgs e)
{
    Debug.WriteLine("tabPage3_Enter");
}
票数 0
EN

Stack Overflow用户

发布于 2013-02-25 11:22:56

您可以为每个要添加的TabItem创建TabItem的子类,并在每个TabItem上实现.Load()方法。除了子类化或一些过于复杂的字典/委托解决方案之外,我认为你不会避免某种形式的流控制。在这里,交换机是最合适的流量控制形式。

我会考虑找一些比索引更好的东西来打开--某种标签id或名称。如果以后重新排列选项卡,您不会想要重写此代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15059550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档