C# 列表框滚动

C# 列表框滚动,c#,listbox,scroll,C#,Listbox,Scroll,当我从列表框中删除项目时,它会滚动到所选项目。若并没有选择任何项目,那个么它将滚动到列表的顶部。移除物品时是否可以使其保持静止 我真的不需要启用“选择项目”,但即使我将“选择模式”设置为“无”,它也会滚动到顶部 我正在使用listBox1.Items.Remove(…)方法删除项目 我尝试在删除之前获取autoscroloffset,然后在删除之后将其设置为与之前相同的X和Y值,但不起作用 我将Thread.Sleep和MessageBox放在删除项的方法之后,它看起来像是在显示我的消息之前滚动

当我从
列表框中删除项目时,它会滚动到所选项目。若并没有选择任何项目,那个么它将滚动到列表的顶部。移除物品时是否可以使其保持静止

我真的不需要启用“选择项目”,但即使我将“选择模式”设置为“无”,它也会滚动到顶部

我正在使用
listBox1.Items.Remove(…)
方法删除项目

我尝试在删除之前获取
autoscroloffset
,然后在删除之后将其设置为与之前相同的X和Y值,但不起作用

我将
Thread.Sleep
MessageBox
放在删除项的方法之后,它看起来像是在显示我的消息之前滚动的,所以它必须是Items.Remove导致滚动

我的列表框代码如下所示:

private ListBox listBox1 = new ListBox();
this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                            | System.Windows.Forms.AnchorStyles.Left)
                            | System.Windows.Forms.AnchorStyles.Right)));
this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.listBox1.FormattingEnabled = true;
this.listBox1.IntegralHeight = false;
this.listBox1.ItemHeight = 16;
this.listBox1.Location = new System.Drawing.Point(14, 6);
this.listBox1.Name = "listBox1";
this.listBox1.ScrollAlwaysVisible = true;
this.listBox1.SelectionMode = System.Windows.Forms.SelectionMode.None;
this.listBox1.Size = new System.Drawing.Size(180, 388);
this.listBox1.TabIndex = 0;
this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);
listBox1中,DrawItem()
只是
drabackground()
Graphics.DrawString()
DrawFocusRectangle()
,没有其他重要的东西

也许有一些属性我不知道,或者我需要安装更新或其他什么

试试这个:

int tempTopIndex = listBox1.TopIndex;
listBox1.Items.Remove(yourItem);
listBox1.TopIndex = tempTopIndex;

这很好,也是最简单的:)我曾考虑使用IndexFromPoint,然后计算SelectedIndex,并在删除该项后进行设置,但现在这不重要了。。。