none
combobox的显示值和实际值 RRS feed

  • 问题

  • private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
    	var path = "C:\\Users\\yzh\\Desktop\\test\\" + comboBox1.Items[comboBox1.SelectedIndex] + "\\forcustomer\\test\\";
    	string[] allfiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
    	foreach (var file in allfiles)
    	{
    		this.comboBox3.Items.Add(Path.GetFileName(file));
    	}
    }

    如题我只有两个combobox,一个是厂家一个是文档,但是文件夹却有很多层,test里面是厂家,厂家里面是forcustomer,在里面又是test,在里面是日期,日期里面才是最底层的文档的PDF图片。

    在第二个combobox的显示上我希望能显示除了文件本身的名字还需要加上上一级文件的文件名(就是日期)。比如我最后的文件这边名字是文档01,那我希望它能显示的样子是文档01(2018-1-1),这里不太清楚实际值和显示值的设置,求教?

    然后这个文档需要有个button能打开,那么他的实际值就还得是这个文档的名字吧?这里的话,用System.Diagnostics.Process.Start()的路径应该要怎么写?

    2018年5月21日 7:30

答案

  • 以数据绑定的形式,例子

    List<Item> files = ...; ...; // fill Item item=new Item()

    {

    Name="设计文档",

    Directory="C:\Design\DesignSpecification.docx"

    };

    files.Add(item);

    comboBox1.DataSource = files ; comboBox1.DisplayMember="Name"; //文件名称 comboBox1.ValueMember="Directory"; //实际路径

    class Item

    {

       public string Name { get;set;}

       public string Directory { get;set;}

    }



    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    • 已编辑 Shuanghua Li 2018年5月24日 0:38
    • 已标记为答案 ZXFzhu 2018年5月28日 1:40
    2018年5月24日 0:38

全部回复

  • 你好,

    comboBox里面有DisplayMember (显示用), ValueMember (取值用)。你可以把全路径放在ValueMember 里面,通过comboBox1.SelectedValue.ToString();取出来在使用。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form10 : Form
        {
            public Form10()
            {
                InitializeComponent();
            }
    
            private void Form10_Load(object sender, EventArgs e)
            {
                comboBox1.DisplayMember = "Name";
                comboBox1.ValueMember = "Value";
                comboBox1.DataSource = new[] { new Item() {  Name = "TestName", Value = "TestValue" },
                    new Item() { Name = "TestName2", Value = "TestValue2" },
                    new Item() { Name = "TestName3", Value = "TestValue3" },
                    new Item() { Name = "TestName4", Value = "TestValue4" },
                };
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string value = comboBox1.SelectedValue.ToString();
                MessageBox.Show(value);
            }
        }
    
        public class Item
        {
            public string Name { get; set; }
            public string Value { get; set; }
        }
    }
    

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年5月22日 8:27
    版主
  • 那啥,我主要就是不知道这个ValueMember的路径和DisplayMember的路径怎么写。。。。。


    2018年5月23日 2:15
  • 以数据绑定的形式,例子

    List<Item> files = ...; ...; // fill Item item=new Item()

    {

    Name="设计文档",

    Directory="C:\Design\DesignSpecification.docx"

    };

    files.Add(item);

    comboBox1.DataSource = files ; comboBox1.DisplayMember="Name"; //文件名称 comboBox1.ValueMember="Directory"; //实际路径

    class Item

    {

       public string Name { get;set;}

       public string Directory { get;set;}

    }



    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    • 已编辑 Shuanghua Li 2018年5月24日 0:38
    • 已标记为答案 ZXFzhu 2018年5月28日 1:40
    2018年5月24日 0:38
  • 我现在是这样写的,但是显示值name那里,,,直接显示了上级文件夹的全路径,我只想要上级文件夹的名称

                var path = "C:\\Desktop\\test\\" + comboBox1.Items[comboBox1.SelectedIndex] + "\\forcustomer\\test\\";
                string[] allfiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
    
                foreach (var file in allfiles)
                {
    
                    comboBox3.DisplayMember = "Name";
                    comboBox3.ValueMember = "Value";
                    comboBox3.DataSource = new[]
                    {
                        new Item()
                        {
                            Name = Path.GetFileNameWithoutExtension(file) + Path.GetDirectoryName(file),
                            Value = Path.GetFileName(file)
                        },
                    };  
                }
           

    2018年5月24日 3:02
  • 想要上级文件夹的名称,获取上级文件夹

    string parent = System.IO.Directory.GetParent(directory).FullName;


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年5月28日 0:38
  • https://msdn.microsoft.com/en-us/library/system.io.directory.getparent.aspx

    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年5月28日 0:39