2

我试图简单地从一个长列表字符串中选择一个字符串,这些字符串保存在服务器上并用管道字符分隔。该字符串由 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 文本框中。

4

2 回答 2

0

正如西蒙所说,您需要 a ListBox, aListBox适合此处,因为它允许您选择一行,并且您可以注册到事件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;
  }
于 2013-09-01T11:22:30.893 回答
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;
}
于 2013-09-01T11:23:23.753 回答