我试图简单地从服务器上保存的长列表字符串中选择一个字符串,并用管道字符分隔。这个字符串由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文本框中。
答案 0 :(得分:0)
正如西蒙说你需要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;
}
答案 1 :(得分:0)
正如您所说,您没有理由使用TextBox,那么通过使用ListBox,您可以通过这种方式实现这一目标;
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;
}