Прокрутка ListBox - PullRequest
       11

Прокрутка ListBox

2 голосов
/ 29 мая 2011

Когда я удаляю элемент из 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() и ничего больше, что может иметь значение.

Может бытьесть свойство, о котором я не знаю, или, может быть, мне нужно установить обновление или что-то в этом роде ...

1 Ответ

4 голосов
/ 29 мая 2011

Попробуйте это:

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