我正在开发一个依赖webbrowser
winform组件的浏览器。
我使用xtratabcontrol
来浏览标签(DevExpress组件),标签上有关闭按钮。
我正在尝试在关闭标签时实现Internet Explorer(其上一版本)的功能;其他选项卡被扩展(它们的宽度增加)以达到鼠标poisiton(在选项卡后启用关闭选项卡而不移动鼠标)
这是我添加的代码(在关闭按钮点击事件中)
Point cursor = MousePosition;
int x = cursor.X;
int count = browserTabControl.TabPages.Count -1;// I don't want to include the last tab (which opens another tabs)
int width = x / count;
for (int i = 0; i < browserTabControl.TabPages.Count -1 ; i++)
browserTabControl.TabPages[i].TabPageWidth = width;
我还尝试在删除最后一个标签之前获取标签的整个宽度,然后将其分成新标签计数,并将结果设置为每个标签:
int current_width = (browserTabControl.TabPages.Count - 1) * browserTabControl.TabPages[0].TabPageWidth;
//..............some code removing the last tab (actually the tab before the last tab)
//after removing the last tab
int count = browserTabControl.TabPages.Count - 1;
int width = current_width / count;
for (int i = 0; i < browserTabControl.TabPages.Count - 1; i++)
browserTabControl.TabPages[i].TabPageWidth = width;
第一个代码结果
第二个代码结果:
可能问题是当我除去int / int时我失去了除法的其余部分,我可以获得双重结果,但TabPageWidth是int。
答案 0 :(得分:1)
尝试以下解决方案:
// Initialization
foreach(XtraTabPage page in xtraTabControl.TabPages) {
if(page == addNewTabPage) continue;
page.TabPageWidth = 100; // turn off headers auto-size
}
}
void xtraTabControl_CloseButtonClick(object sender, EventArgs e) {
ClosePageButtonEventArgs ea = e as ClosePageButtonEventArgs;
if(ea.Page != addNewTabPage) {
xtraTabControl.BeginUpdate();
((XtraTabPage)ea.Page).Dispose();
int totalWidth = 0;
var visiblePages =((IXtraTab)xtraTabControl).ViewInfo.HeaderInfo.VisiblePages;
int totalHeadersGrow = 0;
for(int i = 0; i < visiblePages.Count; i++) {
var pageInfo = visiblePages[i];
if(pageInfo.Page == addNewTabPage) continue;
totalWidth += pageInfo.Bounds.Width;
totalHeadersGrow += (pageInfo.Bounds.Width - pageInfo.Page.TabPageWidth);
}
int count = xtraTabControl.TabPages.Count - 1;
int width = totalWidth / count - totalHeadersGrow / (count + 1);
foreach(XtraTabPage page in xtraTabControl.TabPages) {
if(page == addNewTabPage) continue;
page.TabPageWidth = width;
}
xtraTabControl.EndUpdate();
}
}
P.S。您可以直接联系DevExpress support(我相信这是在使用他们的产品时遇到问题的最佳方式),以获得这方面的正式答案。
答案 1 :(得分:0)
您可以使用HeaderAutoFill
功能。这会自动将标签填充到客户区;所以用户无需移动鼠标来关闭多个
this.xtraTabControl1.HeaderAutoFill = DevExpress.Utils.DefaultBoolean.True;