C# 在WinC窗体中滚动时,如何确定控件的位置#

C# 在WinC窗体中滚动时,如何确定控件的位置#,c#,winforms,dll,add-in,C#,Winforms,Dll,Add In,我正在用C#为Dynamics Nav实现controlAddIn。这是一个带有面板的矩阵控制。所有控件都位于主面板内。我有行标题(行的第一个面板)和行总计(最后一个面板)。列标题(列的第一个面板)和列总计(列的最后一个面板)也是如此。我已经让我的函数很好地完成了矩阵的工作,主面板内的元素按照以下顺序实现,所有功能都是不同的: 1列标题。 两行标题。 三列合计1+列1与行的交点(如果我有一列和三行,我将有三个交点(也是面板))。 4列总n+列n与行的交点。 共5行。 6-总计 如果我有6列6行,

我正在用C#为Dynamics Nav实现controlAddIn。这是一个带有面板的矩阵控制。所有控件都位于主面板内。我有行标题(行的第一个面板)和行总计(最后一个面板)。列标题(列的第一个面板)和列总计(列的最后一个面板)也是如此。我已经让我的函数很好地完成了矩阵的工作,主面板内的元素按照以下顺序实现,所有功能都是不同的:

1列标题。 两行标题。 三列合计1+列1与行的交点(如果我有一列和三行,我将有三个交点(也是面板))。 4列总n+列n与行的交点。 共5行。 6-总计

如果我有6列6行,它会给我一个7*7的表(包含总数)。主面板具有固定大小,且AutoScroll=true。所以当我到达滚动位置时,元素滚动没有问题。当我水平或垂直滚动时,我想固定标题和总数的位置

实现这一目标的最佳方式是什么?我正在定义一些面板不可见的区域。(panel.visible=false)。这是一个好的方法吗?我想画一些区域来隐藏滚动时可能在这个区域的面板

谢谢,我放了一些代码来获取更多信息

if (nRolesG > 5)
        {
            MainPanel.SetAutoScrollMargin(140, 0);
        }
        else
        {
            MainPanel.SetAutoScrollMargin(0, 0);
        }
        if (nOperationsG > 7)
        {
            pnRole.Location = new Point(pnRole.Left, 0);

            MainPanel.MouseWheel += (senderL, eL) =>
            {
                pnRole.Location = new Point(pnRole.Left, 0);
            };
            MainPanel.Scroll += (senderL, eL) =>
            {
                pnRole.Location = new Point(pnRole.Left, 0);
            };
        }
        MainPanel.MouseWheel += (senderL, eL) =>
        {
            pnRole.Left = (posRoleL * 140) + 80;
            pnRole.Top = 0;

            if ((pnRole.Location.X < 220) || (pnRole.Location.X > 1130))
            {
                pnRole.Visible = false;
            }
            else
            {
                pnRole.Visible = true;
            }

        };
        MainPanel.Scroll += (senderL, eL) =>
        {
            pnRole.Left = (posRoleL * 140) + 80;
            pnRole.Top = 0;

            if ((pnRole.Location.X < 220) || (pnRole.Location.X > 1130))
            {
                pnRole.Visible = false;
            }
            else
            {
                pnRole.Visible = true;
            }
        };
if(nRolesG>5)
{
主面板设置AutoScrollMargin(140,0);
}
其他的
{
主面板.SetAutoScrollMargin(0,0);
}
如果(无操作G>7)
{
pnRole.Location=新点(pnRole.Left,0);
MainPanel.MouseWheel+=(发送器、eL)=>
{
pnRole.Location=新点(pnRole.Left,0);
};
主面板。滚动+=(发送器,eL)=>
{
pnRole.Location=新点(pnRole.Left,0);
};
}
MainPanel.MouseWheel+=(发送器、eL)=>
{
pnRole.Left=(posRoleL*140)+80;
pnRole.Top=0;
if((pnRole.Location.X<220)| |(pnRole.Location.X>1130))
{
pnRole.Visible=false;
}
其他的
{
pnRole.Visible=true;
}
};
主面板。滚动+=(发送器,eL)=>
{
pnRole.Left=(posRoleL*140)+80;
pnRole.Top=0;
if((pnRole.Location.X<220)| |(pnRole.Location.X>1130))
{
pnRole.Visible=false;
}
其他的
{
pnRole.Visible=true;
}
};
这是columheader的代码,但其余函数类似


再次感谢您的帮助。

只需使用您放在页眉和页脚之间的另一个面板即可。让它可以滚动。Hello@HansPassant,我想这样做,但我想做垂直和水平滚动。我想放两个面板可能会引起一些问题。