嘿! 現在首先有些人可能會想喊這個話題有數百個話題 - 這是真的 - 但不適合我的特殊情況......所以請幫助我:)自動滾動列表框
我會先將示例代碼放在第一位所以你得到你自己的它的視圖,你看我的解釋之前:
class cls1
{
cls2.listadd("bla");
}
class cls2
{
public static Bindinglist<string> list = new Bindinglist<string>();
public static void listadd(string x)
{
list.Add(x);
}
}
class Form1
{
//here would be all the listbox settings
private System.Windows.Forms.ListBox lb;
lb.Datasource = cls2.list
}
class maincls
{
static void main()
{
Application.Run(new Form1);
}
}
因此,情況如下:我有一個類只有一個靜態列表&靜態程序添加到這個列表(這是一個控制檯許多其他類的輸出類型,所以它必須可以從多個類訪問,而無需一直重新進行)。 當然,因爲不同的程序類可以「登錄」到這個列表中,所以它總是需要更新,這就是爲什麼我選擇了BindingList,因此listbox和bindinglist之間的數據綁定總是自動更新列表框。 -Which導致我的問題:正如你從其他許多關於滾動條的帖子所知道的那樣,當你向列表框中添加一個新項目時,它始終保持在頂部。 現在我知道有使用兩個精彩的方法或者 的.SelectedIndex方法:
listBox.SelectedIndex = listBox.Items.Count - 1;
listBox.SelectedIndex = -1;
或.TopIndex方法:
listbox.TopIndex = listbox.Items.Count -1;
和他們的工作奇妙 - 但這裏是我問題 :
- 我不能將這些方法放置在每次添加後的cls2中,因爲它無法訪問Form1中的非靜態列表框。
- 如果我將方法放在Form1中,它們將工作,但不能從cls2調用,因爲不是靜態的。
- 如果我將Form1中的方法設置爲靜態方法,則它們再次出現該訪問問題。
- 我不能使列表框完全靜態,因爲所有的表單不會工作。
- 當數據發生變化而沒有人爲交互時,似乎沒有列出的事件。
- 我不能使用綁定列表的添加事件,因爲我再次遇到訪問問題。
另一個想法是創建一個主窗體調用所有其他的人,包括那些包含程序無效的方法,但再沒有...情況下,不上網,不訪問時,靜態...
我想我被困在一個位圈在這裏:P
我只是希望你們想出解決這個問題的一些好主意....
非常感謝提前爲您的幫助!
解決方案:第4個答案....是愚蠢的系統:P對不起:)
嗨!感謝您的快速回答......這聽起來很棒......我很樂意爲它使用一個活動......馬上試試吧......只是好奇你究竟是什麼意思「訂閱此活動在Form1中「?我不太確定那裏......現在就試試吧...... :) – Lorenz 2010-10-21 14:01:54
假設cls2具有靜態ItemAdded事件,請在Form1中寫入:cls2.ItemAdded + =按下Tab並且Visual Studio編輯器完成此操作,編寫訂閱代碼和事件處理程序。 – 2010-10-21 14:16:00
明白了:)現在我讀了你的第一篇文章,看起來很清楚:P所以非常感謝!這裏是我的解決方案適用於該示例:添加到cls2: - 編輯必須將其保存到自己的答案...格式不起作用.... – Lorenz 2010-10-21 14:34:57