【问题标题】:Regarding linking string in combobox to output data关于将组合框中的字符串链接到输出数据
【发布时间】:2012-11-21 10:29:31
【问题描述】:

我在 Visual Studio 中有一个组合框,我在组合框中编辑了字符串以显示 5 个项目,我试图在网上查看,一旦人们单击其中一个项目,如何显示有关该项目的信息。 (但如果没有点击任何项目,则将表单留空)

例如,惠而浦的冰箱,可以冷却到 1 摄氏度,售价 400 美元,24 小时内送达。

因此,一旦有人点击组合框中的“Whirlpool Fridge”,它应该会在表单标签/文本框上弹出此内容

制造商:惠而浦 最大冷却:1摄氏度 费用:400美元 交货:24小时内

另外,我试图找出是否可以在图片框中显示冰箱的图片。但是,我还没有找到解决方案。

非常感谢您的帮助,很抱歉让您对这个问题感到厌烦!

注意:如果您要将我链接到一个网站,如果您至少能解释一下如何做,我将不胜感激,或者对于喜欢勺子喂食勺的其他人,只需将其粘贴并我会弄清楚的。再次感谢你! <:d>

编辑:

我正在使用 Windows 窗体应用程序

【问题讨论】:

  • 您使用的是 WinForms、WPF、WebForms 还是 MVC+Razor?
  • 我正在使用 Windows 窗体应用程序。

标签: c# winforms visual-studio c#-4.0 combobox


【解决方案1】:

使这更简单的一种方法是通过数据绑定。

假设您有一个设备对象:

public class Appliance
{
    public string Make { get; set; }
    public string ApplianceType { get; set; }
    public string Model { get; set; }
    public double Price { get; set; }
    public string Info { get; set; }

    public string ShowString
    {
        get { return String.Format("{0} {1}", Make, ApplianceType); }
    }
}

并且您想将这些列表绑定到组合框。您可以定义组合框中显示的属性并将所选对象转换回类:

List<Appliance> appliances = new List<Appliance>();

// populate list; for example:
appliances.Add(new Appliance
{
    Make = "Whirlpool",
    ApplianceType = "Fridge",
    Model = "WP-300",
    Price = 500.00,
    Info = "Cools to 4C!"
});
appliances.Add(new Appliance
{
    Make = "Maytag",
    ApplianceType = "Dishwasher",
    Model = "MT-80A",
    Price = 400.00,
    Info = "Washes spot free!"
});

cmbApplianceList.DataSource = appliances;
cmbApplianceList.DisplayMember = "ShowString";

(还有 ValueMember 可以绑定到唯一属性。)

当有人在组合框中选择一个项目时,您可以执行以下操作来对选定的类进行操作:

cmbApplianceList_SelectedIndexChanged(object sender, EventArgs e)
{
    Appliance selectedAppliance = (Appliance)cmbApplianceList.SelectedItem;
    MessageBox.Show(selectedAppliance.Info);
}

在这种情况下,消息框会显示所选设备的 Info 属性。

【讨论】:

  • 好吧,这很有意义!不过,我应该把清单放在哪里?组合框内的代码方法还是?
  • 我找到了放它的地方,你拯救了我的一天 JYelton! :D
【解决方案2】:

创建一个将所需值作为参数的新 Windows 窗体。

public partial class MyItemForm : Form
{
    public myItemForm(string item, double costs, int time, string picturepath)
    {
        InitializeComponent();
        label1.Text = item+ ": 1 Celsius Cost: $"+costs.ToString()+" Delivery: Within "+time.toString() +" hours."
        pictureBox1.ImageLocation = picturepath;
    }
}

表单只接受参数,将它们设置为LabelText。 图片路径也是如此。

基本上,您必须在以下位置执行以下操作:

    private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       MyItemForm itemform = new MyItemForm(ComboBox1.Text, getCosts(ComboBox1.SelectedIndex), getTime(ComboBox1.SelectedIndex), getPicturePath(ComboBox1.SelectedIndex));
       itemform.Show();
    }

因此,每次用户更改 ComboBox 中的项目时,都会调用该事件。 您必须自己弄清楚获取方法。

我希望它很清楚。

记住:这是一个例子!您必须自己找出正确的代码。

【讨论】:

  • 我已经设置了所有表单,组合框在一个表单中并且只会在该表单中显示,它不应该跨越任何表单,因为我将它们分开。我只是想知道如何,例如,当用户单击列表中的第一项(位置 0)时,我可以执行一种方法来在相应的标签/文本框中显示信息。
  • 你的意思是:MessageBox.Show(ComboBox1.SelectedText);
猜你喜欢
  • 2018-12-03
  • 2021-05-15
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多