哇太方便了使用潜力巨大。
我得看看这个系列的其他文章。
感谢作者
移动鼠标并滚动面板上方的滚轮时,图表本身有时会滚动。
如何明确获取创建的元素?如果之前已经有 GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL 类型的元素,那么使用索引 0 将是错误的。
pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,InpTabControlX,InpTabControlY,pnl.Width()-30,pnl.Height()-40,clrNONE,255,true,false); CTabControl *tc=pnl.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,0);
接下来...我们得到了相关选项卡页眉的 id:
int my_id=-1; ... CTabHeader *th=tc.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_HEADER,4); my_id=th.ID();
捕捉活动标签页的更改事件,更准确地说,是点击页眉的事件。当点击活动标签页 时,仍会产生该事件。
if((id-CHARTEVENT_CUSTOM==WF_CONTROL_EVENT_TAB_SELECT)&&(lparam==my_id)) { Print(sparam); }
现在如何获取活动字段的对象?这是一个 CTabField,对吗?
如何找到父对象?
Aliaksandr Hryshyn 标签页 时,仍会产生该事件。
现在如何获取活动字段的对象? 这是一个 CTabField,对吗?
如何找到父对象?
1.索引 0 用于元素的第一个创建的附加对象。索引 1 表示第二个,索引 2 表示第三个,依此类推。
2.您可以 通过相关索引 从检索标题中检索字段:
//--- 创建 TabControl 控制元素 pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,InpTabControlX,InpTabControlY,pnl.Width()-30,pnl.Height()-40,clrNONE,255,true,false); CTabControl *tc=pnl.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,0); if(tc!=NULL) { CTabHeader *th=tc.GetTabHeader(index); CTabField *tf=th.GetFieldObj(); }
2.1 您可以从 TabControl 对象中按相关索引 检索选项卡字段:
//--- 创建 TabControl 控制元素 pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,InpTabControlX,InpTabControlY,pnl.Width()-30,pnl.Height()-40,clrNONE,255,true,false); CTabControl *tc=pnl.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,0); if(tc!=NULL) { CTabField *tf=tc.GetTabField(index); }
3.我不 太理解这个问题。如果您需要找出当前对象绑定到了哪个对象,应该这样操作:
pnl=engine.CreateWFPanel("WinForms Panel"+(string)i,(i==0 ? 50 : 70),(i==0 ? 50 : 70),410,200,array_clr,200,true,true,false,-1,FRAME_STYLE_BEVEL,true,false); if(pnl!=NULL) { pnl.Hide(); Print(DFUN,"小组说明:",pnl.Description(),",类型和名称:",pnl.TypeElementDescription()," ",pnl.Name()); //--- 将填充设置为 4 pnl.SetPaddingAll(3); //--- 根据输入参数设置位移、自动调整大小和自动调整大小模式的标记 pnl.SetMovable(InpMovable); pnl.SetAutoSize(InpAutoSize,false); pnl.SetAutoSizeMode((ENUM_CANV_ELEMENT_AUTO_SIZE_MODE)InpAutoSizeMode,false); //--- 创建 TabControl 控制元素 pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,InpTabControlX,InpTabControlY,pnl.Width()-30,pnl.Height()-40,clrNONE,255,true,false); CTabControl *tc=pnl.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,0); if(tc!=NULL) { CTabField *tf=tc.GetTabField(index); // 从 TabControl 元素获取标签字段 tc CWinFormBase *base=tf.GetBase(); // 查找选项卡字段的基本对象 - 必须是TabControl tc CWinFormBase *main=tf.GetMain(); // 查找选项卡字段的主对象 - 必须是CPanel pnl }
如果它不能以这种方式返回注释中指定的对象,那么它就是一个错误,需要改进
新文章 DoEasy. 控件 (第 19 部分): 在 TabControl 中滚动选项卡、WinForms 对象事件已发布:
在本文中,我将创建的功能是利用滚动按钮在 TabControl 中滚动选项卡标题。 该功能旨在将选项卡标题从控件的任一侧拖放到单行之中。
编译 EA,并在图表上启动它:
正如我们所见,一切都按预期运作。
但是有两个缺点:如果将鼠标悬停在隐藏的选项卡标题区域上,则标题会更改颜色来做出反应,就好像它在此区域中可见一样。 这就是为什么在调整可见区域大小时,控件的活动区域不会更改其大小的原因。 若要解决此问题,我需要根据可见区域计算活动区域,并调整其大小。
第二个缺点是,如果将选定的标题移到容器之外,并移动面板,则将显示隐藏标题的两个像素。 这与调整选项卡范围大小的计算,因为所选标题每侧的大小增加两个像素。 为了修复它,我需要找到一种方式来获取选项卡标题对象内相邻标题的尺寸,根据该尺寸计算可见性区域的大小。
作者:Artyom Trishkin