我有一個ListView約100項。我從過去選擇了一些項目,現在我需要向下滾動以查找其他項目,但在此期間 - 發生刷新,並且只會自動回滾到上次選擇的項目。如果ListView的位置發生改變,它不會自動滾動到選定的項目
是否有任何可能我如何關閉它或更好如果我目前正在滾動不滾動?
感謝響應:)
我有一個ListView約100項。我從過去選擇了一些項目,現在我需要向下滾動以查找其他項目,但在此期間 - 發生刷新,並且只會自動回滾到上次選擇的項目。如果ListView的位置發生改變,它不會自動滾動到選定的項目
是否有任何可能我如何關閉它或更好如果我目前正在滾動不滾動?
感謝響應:)
我不知道這是否會幫助,但這裏沒有問題與新項目時添加和分類滾動回所選項目的設置。但是,我使用排序設置,不要調用排序或刷新。
創建一個新窗體並將ListView和一個Timer放在那裏。在ListView上只更改這些屬性。
現在添加以下代碼
public Form1()
{
InitializeComponent();
for (int x = 0; x < 100; x++)
{
listView1.Items.Add("Item #" + x);
}
}
private int y = 10;
private void timer1_Tick(object sender, EventArgs e)
{
listView1.Items.Add("Item #" + y + "b");
y += 10;
}
現在,當你運行這個你可以選擇任何項目,任何地方滾動時增加了一個新的項目也不會跳回到選定的項目。但是,如果它添加的項目在上面,它會向下滾動一行...
也許這會讓您足夠接近,以至於您可以進一步使用它以獲得所需內容。
但是,這是最好的我可以做w/o進入分類ListView控件使用Win32 API以某種方式。
這是一種迂迴的解決方案(可能有點晚),但它似乎工作。 我在最近添加的項目上使用EnsureVisible()以實現自動滾動,這是在timer1_Tick方法中調用的。但是我使用了一個「檢查列表」標記,當你點擊一個列表項時,這個標記將不會發生自動滾動。當焦點離開列表視圖時,滾動繼續正常進行。
解決方案的部分是什麼jross說到做到,這是創建一個虛擬的形式來進行測試:
private void Form1_Load(object sender, EventArgs e)
{
listView1.Columns.Add("Scroll Control", 100);
for(int i = 0; i < 100; i++)
{
listView1.Items.Add(string.Format("Item #{0:000}", i));
}
timer1.Interval = 1000;
timer1.Start();
}
private int newItem = 10;
private bool inspectingList = false;
private void timer1_Tick(object sender, EventArgs e)
{
listView1.Items.Add(string.Format("Item #{0:000}", newItem));
newItem += 10;
if (!inspectingList)
{
listView1.Items[listView1.Items.Count - 1].EnsureVisible();
}
listView1.Refresh();
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
inspectingList = true;
if (listView1.SelectedIndices.Count > 0)
{
listView1.Items[listView1.SelectedIndices[0]].EnsureVisible();
}
}
private void listView1_Leave(object sender, EventArgs e)
{
inspectingList = false;
}
如果你能找到BeginScroll/EndScroll事件,你可以堅持的BeginUpdate和EndUpdate在每個各自的方法。 – 2013-02-26 19:06:28
@ofstream沒有BeginScroll/EndScroll既沒有名字上的滾動事件:/ – sczdavos 2013-02-26 19:08:55
我想我們需要知道你在代碼中爲ListView刷新了什麼。處理這部分代碼可能有不同的方式。 – jross 2013-02-26 19:31:41