想象一个条形图,其水平条可能非常宽。我在表单上有一个面板,我想显示这些栏并滚动和缩放它们。表格以及小组可以调整大小。条形图是从数据库动态创建的。每次用户放大或缩小时,都必须重新创建所有条形以在面板上调整它们的大小。
我使用Label控件来创建这些条形图,但问题也适用于所有其他控件:如果我放大得足够远,我的条形图最终将超过控制尺寸的魔术16位边框(> 65536像素)。这使得无法在开始时简单地创建面板上的所有控件,让面板处理滚动。
我的想法:根据滚动条的当前位置和缩放级别,清除所有条形控件的面板,并仅创建当前视图窗口中可见的控件。超出可见视图的条纹将在面板外部缩短,因此它们的最大尺寸受面板尺寸的限制。
我的问题:
这个问题不仅出现在巨大的控件上,而且还出现在面板上较小的控件相距很远(> 65536像素)的情况下,所以我认为一个好的解决方案对许多项目都有帮助。
答案 0 :(得分:2)
我不想创建/销毁控件,或仅为其点击事件隐藏/调整控件大小。创建UserControl
并覆盖OnPaint
方法以绘制条形图并覆盖OnClick
或OnMouseXxx
事件非常容易。
由于您已经知道“虚拟空间”中条形的位置,因此可以轻松地将鼠标光标的位置映射到条形图(或条形图外部的单击)。
答案 1 :(得分:0)
我知道你说winforms是强制性的,但我真的认为你应该看看wpf视图。您可以在winforms中托管wpf元素。因此,其他所有内容都可以与表单相关,并且您有一个托管和显示控件的面板。我可以写一个快速的例子,可能会为你证明这一点,但如果你不打算这样做,我真的不想浪费我的时间。
答案 2 :(得分:0)
您可以创建图元文件(矢量图形),在图像控件中显示,并手动确定单击哪个逻辑元素。