c# - 如何在C# Winform中检查TabPage的选项卡区域上的鼠标移出?

标签 c# winforms mouseevent tabcontrol

我想在C# Winform中检查TabPage的选项卡区域上的鼠标输入/输出。

有事件MouseLeave、MouseEnter、MouseMove,但它们适用于整个TabPage。我只想要 Tab。

TabControl tabControl = new TabControl();
TabPage tabpage = new TabPage();
tabpage.MouseMove += new System.Windows.Forms.MouseEventHandler(panel1_MouseMove);
tabControl.Controls.Add(tabpage);
this.Controls.Add(tabControl);

我在想,如果我了解选项卡区域,以便我可以在 MouseMove 事件中编写相同的代码,是否有更好的方法可以做到这一点。

我想要附图中箭头所指的区域。

Tab

最佳答案

GetTabRect函数在这里可以帮助你:

TabPage mouseTab = null;

void tabControl1_MouseMove(object sender, MouseEventArgs e) {
  TabPage checkTab = null;

  for (int i = 0; i < tabControl1.TabPages.Count; ++i) {
    if (tabControl1.GetTabRect(i).Contains(e.Location)) {
      checkTab = tabControl1.TabPages[i];
      break; // To avoid unnecessary loop
    }
  }

  if (checkTab == null && mouseTab != null) {
    mouseTab = null;
  } else if (checkTab != null) {
    if (mouseTab == null || !checkTab.Equals(mouseTab)) {
      mouseTab = checkTab;
      // or do something here...
    }
  }
}

并处理鼠标离开选项卡标题区域:

void tabControl1_MouseLeave(object sender, EventArgs e) {
  if (mouseTab != null) {
    // do something here with mouseTab...

    mouseTab = null;
  }
}

关于c# - 如何在C# Winform中检查TabPage的选项卡区域上的鼠标移出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275179/

相关文章:

c# - 在 .NET 中,在运行时 : How to get the default value of a type from a Type object?

c# - 控制 WCF XML 输出中的命名空间前缀

c# - 将 byte[] 作为参数传递给 ReportViewer

c# - 由一个事件处理多个控制单击事件

java - 使用 GWT 的 FlexTable 的鼠标悬停

c# - 使组件根据大小变化填充最大空白

c# - 在 Windows 和 Silverlight 类库之间共享 C# 代码

c# - 在等待另一个线程完成它的工作时取消阻塞主线程

jQuery mouseover 和 mouseleave 下拉菜单

javascript - 在 JavaScript 中使用鼠标事件在 Canvas 上绘制直线