我尝试编写一个程序,您可以从下拉菜单中选择一个项目并返回其序列号。问题是项目发生了变化,这就是我想从文件中读取值并用值填充下拉列表的原因。
我想我会有一个看起来像这样的文件:
Toaster;220:
Microwave;3021:
在这个例子中,我将产品和id用分号分隔,数字以冒号结尾。下拉菜单仅显示产品(在本例中为Toaster和Microwave),并返回值220或3021 在C#中有没有简单的方法来实现它?
答案 0 :(得分:1)
这很容易做到,但是你没有提供很多信息,而是你在c#旁边使用的技术堆栈。您是否尝试在诸如(asp.net或asp.net核心)桌面应用程序(wpf,winforms)或uwp应用程序之类的Web应用程序中执行此操作。如果是这样,你使用任何控制,如devexpress,infragistics,syncfusion,telerik ......?如果您在工作环境中提供更多信息,我会很乐意为您提供帮助。我可以用wpf或winforms应用程序给你快速示例,因为你提到你正在尝试编写程序。您可以访问Syncfusion.com并下载他们的控件,因为它们可以在非商业产品中免费使用,并且碰巧有很好的文档(安装很容易,特别是如果您使用visual studio),那么您可以创建winform syncfusion项目。然后查看所需事件的文档,以便更改选择。其他解决方法是在纯winforms应用程序中这里是如何做到这一点,首先你去创建新的应用程序然后你添加一个组合框与选择更改事件和数据绑定选项。然后你为表单创建on load事件,用于从文本文件中添加项目,然后你通常不需要但我更喜欢为我的新对象创建一个结构,如果你设法到达这里你可以添加一个文件阅读器,用于读取文本,然后将信息绑定到刚刚创建的类的新列表。之后,将项目列表绑定到组合框,并创建一个标签,用于保存显示的ID。然后简单的选择更改事件,您将选择的项目并将其强制转换为您创建的类,并将类的ID绑定到标签,并且您具有所需的功能。你可以查看我提供的代码示例
private List<FileLine> Source { get; set; }
public class FileLine
{
public string Text { get; set; }
public int Id { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
Source = GetFiles();
comboBox1.Items.AddRange(Source.ToArray());
}
public List<FileLine> GetFiles()
{
var files = new List<FileLine>();
int counter = 0;
string line;
// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader("Items.txt");
while ((line = file.ReadLine()) != null)
{
var item = line.Split(';').ToList();
files.Add(new FileLine { Text = item.FirstOrDefault(), Id = int.Parse(item.LastOrDefault()) });
counter++;
}
file.Close();
return files;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var item = comboBox1.SelectedItem as FileLine;
IdLabel.Text = item.Id.ToString();
}
这就是winform1:form的控制器看起来如果您不想在视图中添加新项目,您可以将其复制到初始化组件中名为form1的新表单,您可以访问该表单用F12键
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.IdLabel = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// comboBox1
//
this.comboBox1.DisplayMember = "Text";
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(87, 64);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(121, 21);
this.comboBox1.TabIndex = 0;
this.comboBox1.ValueMember = "Id";
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
//
// IdLabel
//
this.IdLabel.AutoSize = true;
this.IdLabel.Location = new System.Drawing.Point(87, 128);
this.IdLabel.Name = "IdLabel";
this.IdLabel.Size = new System.Drawing.Size(0, 13);
this.IdLabel.TabIndex = 1;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 261);
this.Controls.Add(this.IdLabel);
this.Controls.Add(this.comboBox1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.Label IdLabel;
一般来说,我给出了控件的讲座,因为它简单易用,看起来更好,但你可以随意使用你想要的任何东西。以下是工作示例http://www.filedropper.com/windowsformsapp1_1
的链接