Node validating event missing

14 posts, 2 answers
  1. Andrew Shyliuk
    Andrew Shyliuk avatar
    26 posts
    Member since:
    Nov 2009

    Posted 14 Dec 2010 Link to this post

    Hello all,

    I have RadTreeView control with some information on my form. User can change nodes text manually. After user changed node text I need validate it. If validation failed I have cancel this changes. How can I do it?
    Events like NodeValidate are missing. Could you suggest how to solve this problem?

    Best regards,
    Andrew Shyliuk
  2. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 14 Dec 2010 Link to this post

    Hi Andrew,

    You need to use the ValueValidating event. This is an extract from the docs
    The Editing Lifecycle
    A node enters edit mode
    A node that is being displayed by the RadTreeView control is selected and the user presses the F2 key to bring the node into edit mode.
    The RadTreeView control calls the BeginEdit() method and a new editor instance is initialized. It is available publicly through the ActiveEditor property in RadTreeView and is associated with the node that is about to be edited.
    The editor fires its Editing event, which in turn triggers the firing of the RadTreeView Editing event. If either event is canceled, no further action takes place.
    A text box based editor appears for input.
    A node is brought out of edit mode
    The editor determines if it wants to handle the keystroke.
    The editor instance performs the action it has defined for the Enter key. Typically this indicates that edit mode should be exited and any changes made during the edit session should be applied to the node Text property.
    In response to the action described in the previous step the EndEdit() method is called and the ValueChanged event is fired.
    The RadTreeView fires the ValueValidating event which allows the user to hook up custom logic for verification. If the ValueValidating event does not succeed (e.Cancel is true), ValidationError event is fired to notify all listeners that the validation has failed.
    The RadTreeView control sets the node Text property to the string representation of the editor Value property.

    The full documentatation on editing nodes can be found here

    hope that helps
    Richard

  3. UI for WinForms is Visual Studio 2017 Ready
  4. Andrew Shyliuk
    Andrew Shyliuk avatar
    26 posts
    Member since:
    Nov 2009

    Posted 15 Dec 2010 Link to this post

    Hello, Richard

    Thanks for your explanation but I have two more questions:

    1) When I set e.Cancel = true in ValueValidating event this event fires again with the same parameters and ActiveEditor.Value is the same too.
    This is not good for me because before cancel Validating I show error message to user and this situation user see two error messages. How can I avoid the second fire of ValueValidating event?

    2) About "and the user presses the F2 key to bring the node into edit mode". This is unusual way for editing in our customers view. The most usual way for editing - select node and click on it again (how to rename files and folders in Windows). Is it possible in Telerik RadTreeView?

    Best regards,
    Andrew Shyliuk
  5. Answer
    Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 15 Dec 2010 Link to this post

    Hi Andrew,

    I think this should help. I've shown a simple exmaple of validating a node that ensures the word 'Node' is in the Node text when editing it.
    for your second question, the simplest way to do this is shown in the example, but it does mean you can double click anywhere on the RadTreeView to put the current node into Edit mode.

    Imports System.ComponentModel
    Imports Telerik.WinControls.UI
      
    Public Class Form1
      
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      
        End Sub
      
        ''' <summary>
        ''' Ensure the edit text of teh current node contains the word 'Node'
        ''' </summary>
        Private Sub RadTreeView1_ValueValidating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles RadTreeView1.ValueValidating
            If Not Me.RadTreeView1.ActiveEditor.Value.ToString.Contains("Node") Then
                e.Cancel = True
            End If
        End Sub
      
        ''' <summary>
        ''' Show an error box on error
        ''' </summary>
        Private Sub RadTreeView1_ValidationError(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadTreeView1.ValidationError
            MessageBox.Show("Error")
        End Sub
      
        ''' <summary>
        ''' Simplest way to enable double click to edit
        ''' but will edit the current node event when double clicking away from the node
        ''' </summary>
        Private Sub RadTreeView1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadTreeView1.DoubleClick
            If Me.RadTreeView1.SelectedNode IsNot Nothing Then
                Me.RadTreeView1.SelectedNode.BeginEdit()
            End If
        End Sub
      
      
    End Class

    Hope that helps
    Richard
  6. Andrew Shyliuk
    Andrew Shyliuk avatar
    26 posts
    Member since:
    Nov 2009

    Posted 15 Dec 2010 Link to this post

    Hello, Richard

    1) In you sample Message box with text "Error" shows twice. But I don't need two message boxes, I need only one message box if user inputed incorrect text. Is it possible?

    2) Renaming of files and folders in the windows and renaming of nodes in all TreeViews that I have seen is not on double click.
    To rename folder in Windows you have click on it once wait a few seconds and click the folder again. A box should appear surrounding the folder name and you should be able to rename the folder.
    Can I rename RadTreeView node in this way? As a rule it is a standard functionality...

    Best regards,
    Andrew Shyliuk
  7. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 15 Dec 2010 Link to this post

    Hi Andrew,

    Curiously, if you press Enter after altering the text, you only get the messagebox once, though if you highlight another node, you get it twice. I suspect this is because of the call chain as detailed in my first post. I will look into this for you.

    On your second question, it will probably involve a spearate thread and a timer. I'll see if I can work something out
    Richard
  8. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 15 Dec 2010 Link to this post

    Hi Andrew,

    This part shoud help you with the error box showing twice.. Can you give it a try and let me know
    Imports System.ComponentModel
    Imports Telerik.WinControls.UI
      
    Public Class Form1
      
        Private m_OnError As Boolean
      
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      
        End Sub
      
      
        ''' <summary>
        ''' Ensure the edit text of the current node contains the word 'Node'
        ''' </summary>
        Private Sub RadTreeView1_ValueValidating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles RadTreeView1.ValueValidating
            If Not Me.RadTreeView1.ActiveEditor.Value.ToString.Contains("Node") Then
                e.Cancel = True
            End If
        End Sub
      
        ''' <summary>
        ''' Show an error box on error
        ''' </summary>
        Private Sub RadTreeView1_ValidationError(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadTreeView1.ValidationError
            If Not m_OnError Then
                MessageBox.Show("Error")
                m_OnError = True
            End If
        End Sub
      
        Private Sub RadTreeView1_SelectedNodeChanging(ByVal sender As System.Object, ByVal e As Telerik.WinControls.UI.RadTreeViewCancelEventArgs) Handles RadTreeView1.SelectedNodeChanging
            e.Cancel = m_OnError
        End Sub
    End Class

    Hope that helps
    Richard
  9. Andrew Shyliuk
    Andrew Shyliuk avatar
    26 posts
    Member since:
    Nov 2009

    Posted 15 Dec 2010 Link to this post

    Hello, Richard

    About first question. I am waiting for more universal solution that will work if I press Enter, highlight another node or another control.

    About second question. I'll implement timer myself if there are no other way of resolving this problem.

    Best regards,
    Andrew Shyliuk
  10. Answer
    Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 15 Dec 2010 Link to this post

    Hi Andrew,

    Already tried the second one. Have a look at this and see if it works for you
    Imports System.ComponentModel
    Imports Telerik.WinControls.UI
      
    Public Class Form1
      
        Private m_OnError As Boolean
        Private WithEvents m_BackgroundWorker As New BackgroundWorker()
        Private m_Clicks As Integer
      
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      
        End Sub
      
      
        ''' <summary>
        ''' Ensure the edit text of the current node contains the word 'Node'
        ''' </summary>
        Private Sub RadTreeView1_ValueValidating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles RadTreeView1.ValueValidating
            If Not Me.RadTreeView1.ActiveEditor.Value.ToString.Contains("Node") Then
                e.Cancel = True
            End If
        End Sub
      
        ''' <summary>
        ''' Show an error box on error
        ''' </summary>
        Private Sub RadTreeView1_ValidationError(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadTreeView1.ValidationError
            If Not m_OnError Then
                MessageBox.Show("Error")
                m_OnError = True
            End If
        End Sub
      
        Private Sub RadTreeView1_SelectedNodeChanging(ByVal sender As System.Object, ByVal e As Telerik.WinControls.UI.RadTreeViewCancelEventArgs) Handles RadTreeView1.SelectedNodeChanging
            e.Cancel = m_OnError
        End Sub
      
        Private Sub RadTreeView1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadTreeView1.Click
            If Me.RadTreeView1.SelectedNode IsNot Nothing Then
                m_Clicks = m_Clicks + 1
                If m_Clicks = 2 Then
                    Me.RadTreeView1.SelectedNode.BeginEdit()
                Else
                    m_BackgroundWorker.RunWorkerAsync()
                End If
            End If
        End Sub
      
        Private Sub BackgroundWorker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) Handles m_BackgroundWorker.DoWork
            System.Threading.Thread.Sleep(1000)
        End Sub
      
        Private Sub BackgroundWorker_RunWorkCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles m_BackgroundWorker.RunWorkerCompleted
            m_Clicks = 0
        End Sub
      
    End Class


    Can you let me know more details about what you need for the first
    Richard
  11. Andrew Shyliuk
    Andrew Shyliuk avatar
    26 posts
    Member since:
    Nov 2009

    Posted 15 Dec 2010 Link to this post

    Hello, Richard

    About first. Yes Error message shows once. But it doesn't show if I input incorrect text again. And I cannot select other node after message box showed even I enter correct text.

    About second. Click and click after a few seconds works only in the first time.

    Test your solution before post, please.

    Best regards,
    Andrew Shyliuk
  12. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 15 Dec 2010 Link to this post

    Andrew,

    On my PC, the double click works as expected. I can click-wait-click and the node moves into edit mode each time.
    I will look into the first one for you again but these are suggestions that I am looking for your feedback from. They are not fully tested.
    Richard
  13. Andrew Shyliuk
    Andrew Shyliuk avatar
    26 posts
    Member since:
    Nov 2009

    Posted 15 Dec 2010 Link to this post

    Richard,

    I'm working with version Q3 2010. Do you test you code with this controls version.
    What operating system on your computer?
    Could you provide archive with your solution?

    Best regards,
    Andrew Shyliuk
  14. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 15 Dec 2010 Link to this post

    Hello Andrew,

    I'm also using 2010 Q3. My OS is Windows 7 64 bit. As soon as I get the time, I will create a small Jing video for you to see, so you can let me know if there is something I'm missing when trying it out.
    Regards,
    Richard
  15. Andrew Shyliuk
    Andrew Shyliuk avatar
    26 posts
    Member since:
    Nov 2009

    Posted 15 Dec 2010 Link to this post

    Hello, Richard

    Thanks but do not bother creating video I don't need it. Could you provide only solution with sample code? I have Windows 7 64 bit and I can test it.

    Best regards,
    Andrew Shyliuk
Back to Top
UI for WinForms is Visual Studio 2017 Ready