Возможно, это очень простой вопрос, но я понятия не имею, что делать с Forms.
Мне нужно вызвать метод обхода предварительного заказа (реализованный в другом классе) в коде Winform, чтобы предварительный заказ был напечатан в метке интерфейса формы.
Итак, у меня есть класс BST, в котором есть метод обхода дерева в Preorder. Также есть способ вставки значения в дерево. Вот так:
namespace BinaryTree //the BST's class
{
public partial class BinarySearchTreeNode<T> where T : IComparable<T>
{
public void Insert(T value) //method for inserting
{
....
}
public IEnumerable<T> Preorder() //method for Preorder traversal
{
List<T> preOrdered= new List<T>();
if (_value != null)
{
preOrdered.Add(Value);
if (LeftChild != null) //
{
preOrdered.AddRange(LeftChild.Preorder());
}
if (RightChild != null) //
{
preOrdered.AddRange(RightChild.Preorder());
}
}
return preOrdered;
}
}
Теперь для использования этих операций у меня есть интерфейс Windows Forms. В нем есть код для Создания нового дерева, для Добавления значения в дерево (путем ввода значения в inputTextBox и нажатия кнопки btnCreate) и Показать дерево для пользователю (через PaintTree), но мне также нужно распечатать предварительный заказ дерева пользователю (например, в метке в интерфейсе).
Скажем, у меня есть метка в интерфейсе под названием «PreorderLabel» для этого; здесь я хочу, чтобы предварительный заказ был напечатан.
Код формы выглядит так:
namespace BinaryTree
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private BinarySearchTree<int> _tree;
void PaintTree()
{
if (_tree == null) return;
pictureBox1.Image = _tree.Draw();
}
private void btnCreate_Click(object sender, EventArgs e)
{
try
{
_tree = new BinarySearchTree<int>(new BinarySearchTreeNode<int>(int.MinValue));
PaintTree();
}
catch(NotImplementedException) { MessageBox.Show("There is no implementation!"); }
}
private void btnAdd_Click(object sender, EventArgs e)
{
try
{
var val = int.Parse(inputTextBox.Text); //makes a variable out of the input value from the user, to work with
if (_tree == null)
btnCreate_Click(btnCreate, new EventArgs());
_tree.Insert(val); //***calls the "Insert" method from the BST class, to insert the value to the tree
PaintTree(); //shows the user the tree
//**this is [I guess] where I need code for printing the tree in Preorder**
PreorderLabel.Text = ???????
inputTextBox.SelectAll();
this.Update();
}
catch (Exception exp) { MessageBox.Show(exp.Message); }
}
Таким образом, когда пользователь нажимает кнопку «Добавить» (btnAdd), не только вызывается метод Insert для дерева «_tree», но и вызывается метод PaintTree для отображения дерева; но также вызывается метод Preorder для печати Preorder в метке PreorderLabel.
Как это сделать?
Буду очень рад любой помощи!