首页 > 解决方案 > Windows 窗体 C#:从 UserControl 访问 TabControl

问题描述

我有一个 TabControl 和一个 UserControl 以下列方式交互:每次打开一个新选项卡时,UserControl 都会加载到新选项卡上。

在 UserControl 中有一个面板、一个 TexBox 和一个按钮。每次在 TexBox 中输入文本并按下按钮时,它都应该更新当前选项卡的标题

如何从 UserControl 中访问选项卡标题?

标签: c#windows-forms-designer

解决方案


如果用户控件不知道它嵌入的位置,那就更好了。

请考虑在用户控件中提供一个TitleChanged事件。然后,消费者有责任相应地更新自己。

public class MyUserControl : UserControl
{
    // [...]

    public string Title { get; private set; }
    public event EventHandler TitleChanged;

    // [...]

    private void MyTextBox_TextChanged(object sender, EventArgs e)
    {
        Title = MyTextBox.Text;
        TitleChanged?.Invoke(this, EventArgs.Empty);
    }
}

而消费者类的必要代码可以是这样的sg:

// after subscribing the myUserControl.TitleChanged event:
private void MyUserControl_TitleChanged(object sender, EventArgs e)
{
    myTab.Text = myUserControl.Title;
}

如果您在用户表单中使用数据绑定会更好:

myTab.DataBindings.Add(nameof(TabPage.Text), myUserControl, nameof(MyUserControl.Title));

推荐阅读