如何在不闪烁和布局重叠的情况下还原和最大化表单



在我的Windows表单应用程序中,我添加了一个SplitContainer控件。在SplitContainer的面板1中,我有一个ListBox,在Splicontainer的面板2中,我有两个按钮。在ListBox的鼠标移动中,我想选择列表框项目。以下是我选择列表框项目的代码,

 private void ListBox1_MouseMove(object sender, MouseEventArgs e)
    {
        int i;
        this.SuspendLayout();
        for (i = 0; i < (this.listBox1.Items.Count); i++)
        {
            if (this.listBox1.GetItemRectangle(i).Contains(this.listBox1.PointToClient(MousePosition)))
            {
                this.listBox1.SelectedIndex = i;
                return;
            }
        }
        this.ResumeLayout(true);
    }

调用supstendLayout((和resumeLayout((,以避免表单加载时面板的重叠。

如果我还原表单,则鼠标在列表框上移动,然后再次最大化表单,则splitContainer面板中的按钮2未正确加载。如果我删除悬挂并恢复还原并最大化的工作正常。我提到了这个stackoverflow查询链接。

ListBox没有调整大小和停靠属性。那么我不应该致电悬浮点和恢复吗?有人建议在哪里使用suspendlayout/resumelayout以及在哪里不在哪里?

尝试这样的尝试:

private void ListBox1_MouseMove(object sender, MouseEventArgs e)
{
    int newindex = ListBox1.IndexFromPoint(e.Location);
    if (newindex != index) //avoid flickering
    {
        int i;
        this.SuspendLayout();
        for (i = 0; i < (this.listBox1.Items.Count); i++)
        {
            if (this.listBox1.GetItemRectangle(i).Contains(this.listBox1.PointToClient(MousePosition)))
            {
                this.listBox1.SelectedIndex = i;
                index = newindex;
                //return; why return?
            }
        }
        this.ResumeLayout(true);
    }
}

只是将索引声明为全局变量。

相关内容

  • 没有找到相关文章

最新更新