可滚动面板中的组合框导致问题

时间:2010-11-08 21:19:45

标签: c# winforms compact-framework .net-2.0

我有一个AutoScroll设置为true的面板。在其中,我以编程方式添加ComboBox控件。如果我添加足够的控件以超过面板的可视大小,则会出现一个滚动条(到目前为止一直很好)。但是,如果我在可视区域底部附近打开其中一个组合框,则组合列表将无法正确显示,并且可滚动区域似乎已展开。这导致所有控件被“拉”到面板的新底部,顶部有一些新的空白区域。如果我继续点击面板底部的下拉菜单,可滚动区域将继续无限扩展。我将控件固定在左侧,右侧和顶部,因此我认为不会涉及锚定。有什么明显可能导致这种情况吗?

更新:看起来问题在于将控件固定在右侧。如果我没有向右锚,那么我就不会有这种奇怪的行为。但是,如果没有正确的锚定,控件会被滚动条切断。

这是我构建的简化测试用例,显示了问题:

    public Form1()
    {
        InitializeComponent();

        Panel panel = new Panel();
        panel.Size = new Size(80, 200);
        panel.AutoScroll = true;

        for (int i = 0; i < 10; ++i)
        {
            ComboBox cb = new ComboBox();
            cb.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
            cb.Items.Add("Option 1");
            cb.Items.Add("Option 2");
            cb.Items.Add("Option 3");
            cb.Items.Add("Option 4");
            cb.Location = new Point(0, i * 24);
            panel.Controls.Add(cb);
        }

        Controls.Add(panel);
    }

如果您滚动面板底部并点击底部附近的组合框,您会发现奇怪的行为。

3 个答案:

答案 0 :(得分:0)

这似乎是您正在使用的设备特有的问题。我根本无法重现这种行为。您是否尝试过设置Panel的Dock属性?影响滚动行为的其他属性(AutoScrollMargin,AutoScrollMinSize,AutoScrollPosition)怎么样?我也会使用面板的大小,也可以使用System.Windows.Forms.Screen类根据设备自动确定它。

答案 1 :(得分:0)

尝试将autoscroll设置为false并尝试正常使用滚动条。

或者,如果你找不到另一个合理的解决方案,就可以处理滚动/调整大小事件并手动调整大小/移动你的控件(确切地说是锚点做什么)虽然这样做会非常烦人,但它会摆脱你可能遇到的任何问题。

答案 2 :(得分:0)

我也能够在Visual Studio 2005,.Net CF 2.0下测试Windows CE设备,因为我们也有使用旧设备的东西。我没有问题。可能是导致问题的设备上的Windows CE版本的任何问题?正在使用什么设备(即:制造商?)。我甚至创建了一个单一形式的全新项目,因此没有其他任何事情可以改变/影响您的代码。

在调试,运行时或两者兼有时,行为是否有效?