如何在 C# Winform 中检查 TabPage 的 Tab 区域上的 Mouse Out?
How to check Mouse Out on a Tab area of TabPage in C# Winform?
我想在 C# Winform 中的 TabPage 的 Tab 区域检查鼠标 In/Out。
有事件 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);
我在想,如果我了解了 Tab 区域,以便我可以在 MouseMove 事件中为此编写代码,有没有更好的方法来做同样的事情。
我想要附图中箭头所指的区域。
您可以在选项卡的整个区域放置一个 Panel 控件,然后使用您为该 Panel 控件提到的事件..
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# Winform 中的 TabPage 的 Tab 区域检查鼠标 In/Out。
有事件 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);
我在想,如果我了解了 Tab 区域,以便我可以在 MouseMove 事件中为此编写代码,有没有更好的方法来做同样的事情。
我想要附图中箭头所指的区域。
您可以在选项卡的整个区域放置一个 Panel 控件,然后使用您为该 Panel 控件提到的事件..
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;
}
}