在我的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);
}
}
只是将索引声明为全局变量。