C# 由组合框中的id决定的两个不同组合值

C# 由组合框中的id决定的两个不同组合值,c#,C#,我有两个组合框,一个文本框和一个按钮 我希望文本框中的值通过我在Combobox1中的选择从Combobox2设置。“List Machnie”中的id应该会更改文本框中应该查看的内容。比如说, 如果我在combobox1中选择“机器1”(id=1)并在Combox2中选择“纱线1”,则它应该在文本框中显示数字“1” 如果我在combobox1中选择“机器2”(id=2)并在Combox2中选择“纱线1”,则它应该在文本框中显示数字“2” 如果我在combobox1中选择“机器1”(id=1)

我有两个组合框,一个文本框和一个按钮

我希望文本框中的值通过我在
Combobox1
中的选择从
Combobox2
设置。“List Machnie”中的
id
应该会更改文本框中应该查看的内容。比如说,

  • 如果我在
    combobox1
    中选择“机器1”(id=1)并在
    Combox2
    中选择“纱线1”,则它应该在文本框中显示数字“1”

  • 如果我在
    combobox1
    中选择“机器2”(id=2)并在
    Combox2
    中选择“纱线1”,则它应该在文本框中显示数字“2”

  • 如果我在
    combobox1
    中选择“机器1”(id=1)并在
    Combox2
    中选择“纱线2”,则它应该在文本框中显示数字“3”

  • 如果我在
    combobox1
    中选择“机器2”(id=2)并在
    Combox2
    中选择“纱线2”,它应该在文本框中显示数字“4”

我怎样才能让它工作

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        List<Machine> ft = new List<Machine>();
        ft.Add(new Machine() { id = 1, bredd = 10, hojd = 15, Name = "Machine 1" });
        ft.Add(new Machine() { id = 2, bredd = 20, hojd = 25, Name = "Machine 2" });
        ft.Add(new Machine() { id = 1, bredd = 30, hojd = 35, Name = "Machine 3" });
        ft.Add(new Machine() { id = 2, bredd = 40, hojd = 45, Name = "Machine 4" });
        comboBox2.DataSource = ft;
        comboBox2.DisplayMember = "Name";

        List<Yarn> ft3 = new List<Yarn>();
        ft3.Add(new Yarn() { meter = 1, weight = 2, Name = "Yarn 1" });
        ft3.Add(new Yarn() { meter = 3, weight = 4, Name = "Yarn 2" });
        comboBox1.DataSource = ft3;
        comboBox1.DisplayMember = "Name";
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        Machine ft1 = comboBox2.SelectedItem as Machine;
        textBox1.Text = Convert.ToString(ft1.id);
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {

    }
}

class Machine
{
    public int id { get; set; }
    public int bredd { get; set; }
    public int hojd { get; set; }
    public string Name { get; set; }
}

class Yarn
{
    public int meter { get; set; }
    public int weight { get; set; }
    public string Name { get; set; }
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
List ft=新列表();
ft.Add(new Machine(){id=1,bredd=10,hojd=15,Name=“Machine 1”});
ft.Add(new Machine(){id=2,bredd=20,hojd=25,Name=“Machine 2”});
ft.Add(new Machine(){id=1,bredd=30,hojd=35,Name=“Machine 3”});
ft.Add(new Machine(){id=2,bredd=40,hojd=45,Name=“Machine 4”});
comboBox2.DataSource=ft;
comboBox2.DisplayMember=“Name”;
List ft3=新列表();
ft3.添加(新纱线(){meter=1,weight=2,Name=“纱线1”});
ft3.添加(新纱线(){meter=3,weight=4,Name=“纱线2”});
comboBox1.DataSource=ft3;
comboBox1.DisplayMember=“Name”;
}
私有void Form1\u加载(对象发送方、事件参数e)
{
}
私有无效组合框1\u SelectedIndexChanged(对象发送方,事件参数e)
{
}
private void comboBox2\u SelectedIndexChanged(对象发送方,事件参数e)
{
Machine ft1=comboBox2.选择editem作为Machine;
textBox1.Text=Convert.ToString(ft1.id);
}
私有void textBox1\u TextChanged(对象发送方,事件参数e)
{
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
}
}
类机器
{
公共int id{get;set;}
公共int bredd{get;set;}
public int hojd{get;set;}
公共字符串名称{get;set;}
}
等级纱线
{
公共整数表{get;set;}
公共整数权重{get;set;}
公共字符串名称{get;set;}
}

差不多解决了,谢谢大家。但是,当先更改“ComboBox2”,然后再更改“ComboBox1”时,我需要再次更改ComboBox2,以使用正确的值刷新/更新文本框

            Yarn ft4 = comboBox1.SelectedItem as Yarn;
        Machine ft1 = comboBox2.SelectedItem as Machine;
        if (ft1.id == 1)
        {  
            textBox1.Text = Convert.ToString(ft4.weight);}
         else if (ft1.id == 2)
         {
            YarnSizeTextbox.Text = Convert.ToString(ft3.meter);
        }

我认为实现这一点最简单的方法是在两个类中都添加一个属性,比如定义项的合并值的CombineValue

试一试:

class Machine
{
    public int id { get; set; }
    public int bredd { get; set; }
    public int hojd { get; set; }
    public string Name { get; set; }
    public int CombineValue { get; set; }
}

class Yarn
{
    public int meter { get; set; }
    public int weight { get; set; }
    public string Name { get; set; }
    public int CombineValue { get; set; }
}
创建对象并填充它们:

List<Machine> ft = new List<Machine>();
ft.Add(new Machine() { id = 1, bredd = 10, hojd = 15, Name = "Machine 1", CombineValue = 1 });
ft.Add(new Machine() { id = 2, bredd = 20, hojd = 25, Name = "Machine 2", CombineValue = 2 });
ft.Add(new Machine() { id = 1, bredd = 30, hojd = 35, Name = "Machine 3", CombineValue = 3 });
ft.Add(new Machine() { id = 2, bredd = 40, hojd = 45, Name = "Machine 4", CombineValue = 4 });
cmbMachine.DataSource = ft;
cmbMachine.DisplayMember = "Name";

List<Yarn> ft3 = new List<Yarn>();
ft3.Add(new Yarn() { meter = 1, weight = 2, Name = "Yarn 1", CombineValue = 1 });
ft3.Add(new Yarn() { meter = 3, weight = 4, Name = "Yarn 2", CombineValue = 2 });
cmbYarn.DataSource = ft3;
cmbYarn.DisplayMember = "Name";

CombinValues(); // <- See below :
从两个组合的SelectionChangeCommitted事件调用函数:

private void cmbMachine_SelectionChangeCommitted(object sender, EventArgs e)
{
    CombinValues();
}

private void cmbYarn_SelectionChangeCommitted(object sender, EventArgs e)
{
    CombinValues();
}

就这些。祝你好运。

你面临什么问题?“if.id=1.Show(meter=1)、if.id=2.Show(meter=2)”出现错误。我希望它显示“meter=”中的值1,具体取决于另一个组合框中的id。很清楚你想要什么。。。但现在还不清楚你面临什么问题,所以不确定该提出什么解决方案。在
comboBox1\u SelectedIndexChanged
中,您应该检查两个组合框的值,然后确定文本框的值。我不知道如何写“meter=1”,if.id=2.Show(meter=2)这样就可以了。另外,当查看“comboBox1\u SelevtedIndexChanged”时,我不知道如何调用id,所以它会显示“meter”中的数字我试图用你的代码重现这个问题,但代码甚至没有编译…其中有很多错误…你能分享没有任何错误的代码吗?谢谢!你刚刚解决了我的问题!再次感谢你。很高兴听到这个消息,感谢你的支持。继续。
private void cmbMachine_SelectionChangeCommitted(object sender, EventArgs e)
{
    CombinValues();
}

private void cmbYarn_SelectionChangeCommitted(object sender, EventArgs e)
{
    CombinValues();
}