如何为ListBox(值)索引或树视图节点设置相同的按钮事件?

2024-04-21

我有 C# Win-form,如下所示。我也有一些数组作为列表框的菜单。

public string[] ArrayMain = {"1.Water","2.Air","3.Soil","4.Fire"};
public string[] ArrayWater = {"1.Salty","2.Fresh", "3.Contaminated"};
public string[] ArraySalty = {"1.AA", "2.BB", "3.CC"};
public string[] ArrayFresh = {"1.DD", "2.EE", "3.FF"};
public string[] ArrayContaminated = {"1.XX", "2.YY", "3.ZZ"} ;
public string[] ArrayAir = {"1.Fresh", "2.Contaminated"};
public string[] ArraySoil = {"1.Normal", "2.Contaminated"};
public string[] ArrayFire = {"1.Low","2.Mid","3.High"};

当应用程序在主列表框中启动时,加载了第一个数组值。

public Form1()
{
    InitializeComponent();
    ListBoxMain.Items.AddRange(ArrayMain);
    listView1.Items.Add(ArrayMain[0])
    // User choose: 1.Water
}

如果用户按下按钮 1,则应用程序将清除主列表框并加载该选择。这次列表框加载了;

ListBoxMain.Items.AddRange(ArrayWater);
listView1.Items.Add(ArrayMain[0])
// User choose: 1.Salty

现在,如果用户按下按钮 2,则应用程序将清除主列表框,并且所选菜单列表框将具有以下值:

1.水 1.咸的 2.BB

然后应用程序将获得固定的第一个字母(数字),格式如下:

112

并将其发送到 WFC 服务。 WFC 服务将知道如何处理“112”。我的主要问题是我必须为列表框索引(或我所说的组合框)设置所有按钮。例如,如果用户第一次按下按钮 1,则用户必须将该菜单数组选择到列表框中。如果用户再次按下按钮 1,则按钮 1 必须连接列表框索引(新值)。

在我之前针对这个有趣问题的问题中,用户 @Eugene 建议我可以将逻辑转换为树视图。他说:

其中节点包含组合框的项目(要显示的键字符串,值 - 稍后使用的值)。当您按下按钮时,您会将相应的节点项目添加到某个队列中并加载新项目。在叶节点中,您将 包含 Action> 将调用相应的服务 方法(对于许多选项,它可以是相同的操作)

我尝试应用很多逻辑,花了近 10 天的时间让模拟器按预期工作,但失败了。我真的很想获得一些信息,以便我可以设置我的button 1ListBox(索引)或 Treeview(节点)的事件。如果有人指出我,甚至如何设置我上面所说的按钮 1 事件,那么休息对我来说就会很容易。

亲切的问候,

应用程序第一次启动:

After the user press buttons: Pos Terminal Simulation


谢谢@尤金。我做到了。这里是。

对于主要;

public Form1()
{
    InitializeComponent();

    TreeNode tNode;
    //MAIN NODE 1
    tNode = treeView1.Nodes.Add("1.Water");
    tNode = treeView1.Nodes.Add("2.Air");
    tNode = treeView1.Nodes.Add("3.Soil");
    tNode = treeView1.Nodes.Add("4.Fire");

    // WATER NODE
    treeView1.Nodes[0].Nodes.Add("1.Salty");
    treeView1.Nodes[0].Nodes.Add("2.Fresh");
    treeView1.Nodes[0].Nodes.Add("3.Contaminated");

    // AIR NODE
    treeView1.Nodes[1].Nodes.Add("1.Fresh");
    treeView1.Nodes[1].Nodes.Add("2.Contaminated");

    // SOIL NODE
    treeView1.Nodes[2].Nodes.Add("1.Normal");
    treeView1.Nodes[2].Nodes.Add("2.Contaminated");

    // FIRE NODE
    treeView1.Nodes[3].Nodes.Add("1.Low");
    treeView1.Nodes[3].Nodes.Add("2.Mid");
    treeView1.Nodes[3].Nodes.Add("3.High");

    // SALTY NODE
    treeView1.Nodes[0].Nodes[0].Nodes.Add("1.AA");
    treeView1.Nodes[0].Nodes[0].Nodes.Add("2.BB");
    treeView1.Nodes[0].Nodes[0].Nodes.Add("3.CC");

    // FRESH NODE
    treeView1.Nodes[0].Nodes[1].Nodes.Add("1.DD");
    treeView1.Nodes[0].Nodes[1].Nodes.Add("2.EE");
    treeView1.Nodes[0].Nodes[1].Nodes.Add("3.FF");

    // CONTAMINATED NODE
    treeView1.Nodes[0].Nodes[2].Nodes.Add("1.XX");
    treeView1.Nodes[0].Nodes[2].Nodes.Add("2.YY");
    treeView1.Nodes[0].Nodes[2].Nodes.Add("3.ZZ");


    //Clear ListBox items
    ListBoxMain.Items.Clear();

    //Load ListBox First time
    foreach (TreeNode n in treeView1.Nodes)
    {
        ListBoxMain.Items.Add(n.Text);
    }
}

对于按钮:

// BTN 1
private void Btn_1_Click(object sender, EventArgs e)
{
    int value = 1 - 1;
    int iCount = ListBoxMain.Items.Count;

    if (iCount > value)
    {
        string item = ListBoxMain.Items[value].ToString();
        TreviewNodesSelection(item, value);
    }
}

// BTN 2
private void Btn_2_Click(object sender, EventArgs e)
{
    int value = 2 - 1;
    int iCount = ListBoxMain.Items.Count;

    if (iCount > value)
    {
        string item = ListBoxMain.Items[value].ToString();
        TreviewNodesSelection(item, value);
    }
}

然后创建了一个TreviewNodesSelection:

//TreviewNodesSelection
private void TreviewNodesSelection(string item, int value)
{
    textBox1.Text = item;
    listBoxMenu.Items.Add(item);


    //Find Nodes first
    Traverse(treeView1.Nodes, item);

    //Clear ListBox items
    ListBoxMain.Items.Clear();

    //Get a First ChildNode via Parenet Name
    if (treeView1.SelectedNode.Nodes.Count != 0)
    {
        foreach (TreeNode v in treeView1.SelectedNode.Nodes)
        {
            ListBoxMain.Items.Add(v.Text);
        }
    }
    else
    {
        MessageBox.Show("Now you can start calculation...");
    }
}

这是 TreeView 节点选择

private void Traverse(TreeNodeCollection nodes, string findtext)
{
    foreach (TreeNode node in nodes)
    {
        if (node.Text.ToString().Trim() == findtext)
        {
            node.TreeView.SelectedNode = node.NextNode;
            treeView1.SelectedNode = node;
            node.TreeView.Focus();
            //MessageBox.Show(node.Text + " is selected...");
        }
        Traverse(node.Nodes, findtext);
    }
}

我从中学到很多东西http://stackoverflow.com http://stackoverflow.com这就是我的几分钱贡献。

亲切的问候

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为ListBox(值)索引或树视图节点设置相同的按钮事件? 的相关文章

随机推荐