【问题标题】:WinForms on Tabpage selected run method in UserControl标签页上的 WinForms 在 UserControl 中选择了运行方法
【发布时间】:2018-05-01 06:30:52
【问题描述】:

我的 Tabcontrol 有 3 个标签页。我目前在 Tabpage 1 中,此时我将选择 Tabpage 2。我想在分配给该 Tabpage 的 UserControl 中运行一个方法。您可以称其为“焦点”侦听器。我将如何实现这一点?或者这有可能吗?

编辑:

假设我有一个名为“UserControl1.cs”的文件在这里有一个方法OnFocus() 我想在它的标签页成为活动标签时调用这个方法。我将 UserControl 分配给 Tabpage,如下所示:

        // AllOpenUserControls = List<UserControl> // With the active pages

        TabPage newPage = new TabPage();
        newPage.Text = title;
        newPage.AutoScroll = true;
        newPage.BackColor = SystemColors.Window;
        newPage.Controls.Add(userControl);
        AllOpenUserControls.Add(userControl);

        tabControl.TabPages.Add(newPage);

【问题讨论】:

  • 你是这个意思吗?:msdn.microsoft.com/en-us/library/…
  • @MatSnow 这是一个开始,但是当调用该侦听器时,我将如何在我的 UserControl 中运行该方法?
  • TabControl.SelectedIndexChanged 添加一个事件处理程序。 docs.microsoft.com/en-us/dotnet/framework/winforms/…
  • @MatSnow 我知道这部分,但我现在不知道如何选择正确的标签页并在其中运行一个方法
  • TabControl.SelectedTab?看来,您的问题缺少一些重要的细节。编辑您的问题并添加相关的详细信息和代码部分,而不是在每条评论中提出新问题。

标签: c# winforms user-controls tabcontrol


【解决方案1】:

在此处为SelectedIndexChanged 添加EventHandler

...
tabControl.TabPages.Add(newPage);
tabControl.SelectedIndexChanged += new EventHandler(userControl.OnFocus);

您的OnFocus-方法应如下所示:

public void OnFocus(object sender, System.EventArgs e)
{
    TabControl tc = (TabControl)sender;
    if (tc.SelectedTab == this.Parent)
    {
        //Parent-Tab is selected, do stuff...
    }
}

【讨论】:

  • 谢谢,成功了。在我的例子中,我实际上是在扩展一个名为BaseUserControl 的对象,我在那里创建了public virtual void OnFocus()。在实际的 UserControl UserControl1 : BaseUserControl 中,我重写了这个方法,现在它可以工作了。
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2020-03-31
  • 2018-06-01
  • 2016-11-02
  • 1970-01-01
相关资源
最近更新 更多