在列表中选择一个字符串行

时间:2013-09-01 11:15:09

标签: c# string winforms textbox

我试图简单地从服务器上保存的长列表字符串中选择一个字符串,并用管道字符分隔。这个字符串由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 :(得分:0)

正如西蒙说你需要ListBoxListBox适合这里,因为它允许你选择一行,你可以注册到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;
}