当我从ListBox
中删除项目时,它会滚动到所选项目。如果没有选择任何项目,那么它将滚动到列表顶部。在移除物品时是否可以保持静止?
我真的不需要选择启用的项目,但即使我将选择模式设置为无,它也会滚动到顶部。
我正在使用listBox1.Items.Remove(...)
方法删除项目。
我尝试在删除之前获取AutoScrollOffset
,然后在删除之后将其设置为与之前相同的X和Y值,但它不起作用。
我将Thread.Sleep
和MessageBox
放在删除项目的方法之后,看起来它在我的消息显示之前滚动,所以它必须是Items.Remove导致滚动。
我的ListBox代码如下:
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()
中的只是DrawBackground()
,Graphics.DrawString()
,DrawFocusRectangle()
,而且其他任何内容都不重要。
也许有一些我不知道的属性,或者我需要安装更新或其他东西......
答案 0 :(得分:4)
试试这个:
int tempTopIndex = listBox1.TopIndex;
listBox1.Items.Remove(yourItem);
listBox1.TopIndex = tempTopIndex;