当您尝试按关键字访问winforms TreeView并且不存在关键字时会发生什么?

我正在编写一个应用程序,我用数据库的模式填写TreeView。 我通过迭代每个表名并在GetSchema中键入来实现。 然后,根据DataType和名称,我选择要添加新项目的父节点。 有时该项目在treenode中不存在(取决于用户设置,某些表可能已添加或未添加为树视图的节点),这很好,在这种情况下我想要:

A)抛出exception所以我知道它找不到要求的节点。 或者B)为失败的访问者返回null。

我的代码的(经过高度修改的)片段:

TreeNode parent = null; if( tableName.StartsWith("prefix") ) { parent = tablesNode.Nodes["Node Name which might not exist"]; } if (parent == null && IgnorePrefixedTables) { continue; } else if (parent == null) { throw Exception(); } ....... 

问题是,当我到达不存在的节点名称的tablesNode.Nodes [“可能不存在的节点名称”]时,当我单步执行此代码(或者更确切地说是真实代码)时,我无法捕获exception,因为没有抛出。 如果我进入或超过该行代码,整个方法将我返回到最高级别(我的表单立即显示,UI部分完成)。 那是怎么回事?

[编辑]

这是我的问题的非常简化的版本:

 namespace TestZone { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { treeView1.Nodes.Add("Hello", "Hello"); var x = treeView1.Nodes["Hello"]; x.Nodes.Add("World-PL", "Swiat"); x.Nodes.Add("World-EN", "World"); var y = treeView1.Nodes["World-EN"]; MessageBox.Show(y.Text); y = treeView1.Nodes["World-SP"]; MessageBox.Show(y.Text); y = treeView1.Nodes["World-PL"]; MessageBox.Show(y.Text); } } } 

代码依赖于textBox1在Form1上。 (PS PL是波兰语)。 显然,treeView1找不到World-EN,这让我觉得我真的不理解treeView是如何工作的。 永远不会在y = treeView1.Nodes [“World-SP”]上显示第一个MessageBox和断点; 未能破解(因为该行代码永远不会被调用)。

避免使用exception来控制程序流。 使用TreeViewCollection.IndexOfKey()方法。

当在表单的OnLoad()方法或Load事件中引发exception并附加调试器时,64位操作系统上存在一个奇怪的错误。 在没有通知的情况下吞下它。 听起来很像。 解决方法是将Platform目标设置为x86。