如何为列表框(值)索引或树视图节点设置相同的按钮事件?
How to set same button events for ListBox (value) index or treeview nodes?
我有如下所示的 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,则应用程序会清除主列表框并加载该 selection。这次列表框加载了;
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,则用户必须 select 将该菜单排列到列表框中。如果用户再次按下按钮 1,则必须连接按钮 1 列表框索引(新值)。
在我之前针对这个有趣问题的提问中,用户@Eugene 建议我可以将逻辑转换为树视图。他说:
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 事件,那么休息对我来说也很容易。
亲切的问候,
应用首次启动时间:
用户按下按钮后:
谢谢@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://whosebug.com中学到了很多,所以这是我的一点点贡献。
亲切的问候
我有如下所示的 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,则应用程序会清除主列表框并加载该 selection。这次列表框加载了;
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,则用户必须 select 将该菜单排列到列表框中。如果用户再次按下按钮 1,则必须连接按钮 1 列表框索引(新值)。
在我之前针对这个有趣问题的提问中,用户@Eugene 建议我可以将逻辑转换为树视图。他说:
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 事件,那么休息对我来说也很容易。
亲切的问候,
应用首次启动时间:
用户按下按钮后:
谢谢@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://whosebug.com中学到了很多,所以这是我的一点点贡献。
亲切的问候