使用另一种表单上的表单控件按钮切换选项卡

时间:2015-12-18 14:56:41

标签: c# winforms

我创建了一个包含5个静态选项卡的表单,然后创建了5个单独的表单,这些表单在主表单加载时加载到它们。这些选项卡中的第一个在表单上有我要链接的按钮,并在单击时显示相应的选项卡。

我遇到的问题是不在主窗体上的按钮而是单独的窗体没有切换到主窗体上相应选项卡的选项。

我已经尝试了tabControl1.SelectedTab = tabPage2难倒了我几天这个任何帮助非常感谢

1 个答案:

答案 0 :(得分:0)

据我所知,您的问题是“如何将子表单上的按钮发送到主表单”。

我建议您在子表单中声明事件并在主表单中捕获这些事件。因此,子表单的简化示例可能如下所示:

public class SubForm : Form
{
    // this is the event to register with from MainForm
    public event EventHandler ButtonClicked;
    // thread safe event invocator (standard pattern)
    protected virtual void OnButtonClicked()
    {
        EventHandler handler = ButtonClicked;
        if (handler != null) handler(this, EventArgs.Empty);
    }

    // your button handler
    private void button1_Clicked(object sender, Eventargs e)
    {
        OnButtonClicked();
    }
}

在您的主要表单中,您可以执行以下操作:

public class MainForm : Form
{
    private SubForm _subForm1 = new SubForm();
    private SubForm _subForm2 = new SubForm();

    public MainForm()
    {
        InitializeComponents();
        // more initializatino

        _subForm1.ButtonClicked += subForm1_ButtonClicked;
        _subForm2.ButtonClicked += subForm2_ButtonClicked;
    }

    private void subForm1_ButtonClicked(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;
    }
    private void subForm2_ButtonClicked(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage2;
    }

您还可以考虑仅使用一个someSubForm_ButtonClicked处理程序,并通过sender参数推断选择哪个选项卡,这将是引发事件的SubForm