Я пишу приложение, в котором заполняю TreeView со схемой базы данных. Я делаю это путем перебора каждого имени таблицы и типа в GetSchema. Затем, в зависимости от типа данных и имени, я выбираю родительский узел, в который я хочу добавить новый элемент. Иногда этот элемент не существует в treenode (в зависимости от пользовательских настроек определенные таблицы могут быть добавлены или не добавлены в качестве узлов дерева), что хорошо, в этом случае я хочу либо:
A) Исключение, которое будет выдано, поэтому я ЗНАЮ, что ему не удалось найти узел, как было запрошено. Или 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();
}
....<More Code For Filling Out that node>...
Проблема в том, что, когда я прохожу этот код (или, скорее, реальный код), когда я достигаю tablesNode.Nodes ["Имя узла, которое может не существовать"] для имени узла, который не существует, я не могу поймать исключение, потому что никто не брошен. Если я вхожу в эту строку кода или пересекаю ее, весь метод возвращает меня на самый высокий уровень (моя форма сразу отображается, а пользовательский интерфейс частично завершен). Что с этим?
[EDIT]
Вот ОЧЕНЬ упрощенная версия моей проблемы:
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. (P.S. PL - польский). Очевидно, treeView1 также не может найти World-EN, что заставляет меня думать, что я действительно не понимаю, как работает treeView. Первый MessageBox никогда не отображается и точки останова на y = treeView1.Nodes ["World-SP"]; не может сломаться (так как эта строка кода никогда не вызывается).