2009-08-19 2 views
0

Как установить MaxLength для свойства TreeNode Name и текста? Это приложение для форм Windows, где пользователь щелкает правой кнопкой мыши по дереву, чтобы добавить узел, а максимальная длина имени treenode должна быть 40 символов. В настоящее время я проверяю это в событии AfterlabelEdit и бросаю сообщение, если нет. символов больше. Но requiremnet говорит, чтобы ограничить длину, не показывая окно сообщения, как в текстовых.Как установить MaxLength для свойства TreeNode Name и текста?

Спасибо.

ответ

0

Вы можете отобразить текстовое поле над деревом и установить MaxLength.

Один из способов сделать это создать текстовое поле с формой:

private TextBox _TextBox; 

    public Form1() 
    { 
     InitializeComponent(); 
     _TextBox = new TextBox(); 
     _TextBox.Visible = false; 
     _TextBox.LostFocus += new EventHandler(_TextBox_LostFocus); 
     _TextBox.Validating += new CancelEventHandler(_TextBox_Validating); 
     this.Controls.Add(_TextBox); 
    } 

    private void _TextBox_LostFocus(object sender, EventArgs e) 
    { 
     _TextBox.Visible = false; 
    } 


    private void _TextBox_Validating(object sender, CancelEventArgs e) 
    { 
     treeView1.SelectedNode.Text = _TextBox.Text; 
    } 

Затем в виде дерева BeforeLabelEdit установить MaxLength в текстовое поле и показать его на выбранном узле:

private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e) 
    { 
     _TextBox.MaxLength = 10; 

     e.CancelEdit = true; 
     TreeNode selectedNode = treeView1.SelectedNode; 
     _TextBox.Visible = true; 
     _TextBox.Text = selectedNode.Text; 
     _TextBox.SelectAll(); 
     _TextBox.BringToFront(); 
     _TextBox.Left = treeView1.Left + selectedNode.Bounds.Left; 
     _TextBox.Top = treeView1.Top + selectedNode.Bounds.Top; 
     _TextBox.Focus(); 
    } 

Возможно, вы захотите добавить дополнительные функциональные возможности в текстовое поле, чтобы оно правильно менялось в зависимости от ширины древовидного изображения, а также чтобы оно принимало новый текст при возврате пользователя и т. Д.