c# - 如何为列表框(值)索引或 TreeView 节点设置相同的按钮事件?

标签 c# arrays treeview simulation listboxitem

我有如下所示的 C# Win 窗体。我也有几个数组作为列表框的菜单。

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.Water 1.Salty 2.BB

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

112

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

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

where nodes contain Items for combo-box (key-string to show, value - value to use later). When you push buttons you will add respective node item into some queue and load new items. In leaf nodes you will contain Action> that will call respective service method (for many options it can be the same action)

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

亲切的问候,

应用第一次启动:

App Start

用户按下按钮后: Pos Terminal Simulation

最佳答案

谢谢@Eugene。我做到了。在这里。

对于主要;

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中学到了很多东西|所以这是我的几分钱贡献。

亲切的问候

Pos Simulation

关于c# - 如何为列表框(值)索引或 TreeView 节点设置相同的按钮事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29941997/

相关文章:

c# - 如何在pcm流(C#)中查找音频功率(db)

c# - 保持 WCF 服务连接

c# - Winforms:从不同的类调用输入表单函数

treeview - 删除 JavaFX TreeView 滚动 Pane

c# - 使用 AspNetCore.OData 7.2.1 GetRouteData 始终为 null

java - 如何复制hashset和hashmap,Java是否使用指针?

javascript - 在 JavaScript 中返回一个重复对象值的实例

jquery - 如何将数组值插入 jQuery 语句 : $(arrayValue). css ('width' );

winapi - Win32 API 中的 Treeview 控件 - 如何使用不同的字体显示单个 treeview 项目?

c# - 如何删除所有不需要的 TreeView 分支