2013-09-01 11 views
3

我試圖簡單地選擇一個字符串行列出長列表字符串在服務器上舉行,並與管道字符分離。這個字符串被一個php腳本佔據,字符串行是我服務器上所有媒體和文件夾的列表。在列表中選擇一個字符串行

在我的代碼我得到這個信息,並用下面的代碼返回它:

using (var client = new WebClient()) 
{ 
    result = client.DownloadString("http://server.foo.com/images/getDirectoryList.php"); 
} 

    textBox1.Text = string.Join(Environment.NewLine, result.Split('|')); 

它看起來是這樣的:

但是,當我嘗試只需點擊其中的一個,我的光標只是去我點擊的地方。像這樣,我試圖選擇md-harrier.jpg,而我的光標只是在jpg結尾處結束:

我真正想要的是如下圖。我點擊Koala.jpg,整個事物都被突出顯示,並且我有能力存儲我剛纔點擊的內容的名稱。爲了實現該屏幕截圖,我不得不單擊Koala.jpg旁邊的按鈕,然後拖動我的鼠標。

無論如何,我可以實現我想實現的目標嗎?

關於這一點需要注意的關鍵是我不知道服務器上有多少文件,也不知道它們會被調用。我的php腳本抓取這些信息並使用我上面寫的代碼在我的winform文本框中顯示它。

+2

任何你想使用文本框而不是列表框的原因? –

+0

沒有理由。如果這可以讓我做我想做的事,我很樂意切換。以前從未使用過列表框。 – N0xus

+0

查看[MSDN上的'ListBox'條目](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.listbox.aspx)。有幾個例子分散在這裏和那裏。你想要的是將'DataSource'分配給你的分割列表,並聽取'OnSelectedIndexChanged' /'OnSelectedValueChanged'事件 –

回答

2

作爲西蒙說,你需要一個ListBox,一個ListBox適合在這裏,因爲它允許你選擇一條線,你可以註冊到事件SelectedIndexChanged並存儲被選中的名稱。

啓動值做

using (var client = new WebClient()) 
{ 
    result = client.DownloadString("http://bender.holovis.com/images/getDirectoryList.php"); 
} 

listBox1.Items.AddRange(result.Split('|')); 
listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged); 

,並在selectedItemChanged:

string currVal; 

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    currVal = (string)listBox1.SelectedItem; 
    } 
0

如你所說,你沒有理由使用文本框,然後使用列表框就可以實現,以這種方式;

using (var client = new WebClient()) 
{ 
result = client.DownloadString("http://bender.holovis.com/images/getDirectoryList.php"); 
} 
string[] names=result.Split('|'); 
foreach(string name in names) 
{ 
if(name!="|"&&name!=" ") 
{ 
    listbox.Items.Add(name); 
} 
} 

此外,如果您想選擇的項目存儲在一個變量訂閱ListBox's SelectionChangedEvent並存儲在這樣一個變量選擇指數;

int selection=; 

private void ListBox1_SelectionIndexChanged(object sender,EventArgs e) 
{ 
    selection=ListBox1.SelectedIndex; 
} 
相關問題