Comment capturer l'événement du clic sur le fichier sélectionné Node d'une arborescence d'une arborescence? Il ne tire pas le sélectionné car la sélection n'a évidemment pas changé, mais alors quel événement Puis-je attraper pour que je sache que le fichier sélectionné Node a été cliqué?
UPDATE : Lorsque j'ai un peu de temps, je vais devoir plonger dans les entrailles du contrôle de l'arbreView et creuser quoi et où il gère le clic Événements et sous-classe The TreeView pour exposer un nouvel événement sur la sociétéNODECLICKED.
Je ferai probablement cela au cours des vacances de Noël et je ferai rapport avec les résultats.
MISE À JOUR : Je suis arrivé à une solution ci-dessous qui sous-classes le contrôle des arbres.
Le moyen le plus simple - s'il n'interfère pas avec le reste de votre code - consiste simplement à définir le nœud comme non sélectionné dans la méthode sélectionnéeNodéchaged.
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e){
// Do whatever you're doing
TreeView1.SelectedNode.Selected = false;
}
Après une période quelque peu longue, j'ai enfin eu du temps pour examiner la sous-classement de l'arborescence pour gérer un Node en étant cliqué.
Voici ma solution qui expose un nouvel événement sélectionnoodeclicked que vous pouvez gérer à partir de la page ou du tout. ( si nécessaire, il s'agit d'une tâche simple au refacteur dans C # ))
Imports System.Web.UI
Imports System.Web
Public Class MyTreeView
Inherits System.Web.UI.WebControls.TreeView
Public Event SelectedNodeClicked As EventHandler
Private Shared ReadOnly SelectedNodeClickEvent As Object
Private Const CurrentValuePathState As String = "CurrentValuePath"
Protected Property CurrentValuePath() As String
Get
Return Me.ViewState(CurrentValuePathState)
End Get
Set(ByVal value As String)
Me.ViewState(CurrentValuePathState) = value
End Set
End Property
Friend Sub RaiseSelectedNodeClicked()
Me.OnSelectedNodeClicked(EventArgs.Empty)
End Sub
Protected Overridable Sub OnSelectedNodeClicked(ByVal e As EventArgs)
RaiseEvent SelectedNodeClicked(Me, e)
End Sub
Protected Overrides Sub OnSelectedNodeChanged(ByVal e As System.EventArgs)
MyBase.OnSelectedNodeChanged(e)
' Whenever the Selected Node changed, remember its ValuePath for future reference
Me.CurrentValuePath = Me.SelectedNode.ValuePath
End Sub
Protected Overrides Sub RaisePostBackEvent(ByVal eventArgument As String)
' Check if the node that caused the event is the same as the previously selected node
If Me.SelectedNode IsNot Nothing AndAlso Me.SelectedNode.ValuePath.Equals(Me.CurrentValuePath) Then
Me.RaiseSelectedNodeClicked()
End If
MyBase.RaisePostBackEvent(eventArgument)
End Sub
End Class
Stockez ce qui est sélectionné et utilisez le code dans le gestionnaire d'événements de page_load pour comparer ce qui est sélectionné à ce que vous avez stocké. Page_LOAD est appelé à chaque poste de retour même si la valeur sélectionnée ne change pas, contrairement à la sélectionnéeNodechanged.
Exemple
Texte alt http://smithmier.com/treeviewexample.png =
html
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"
ShowLines="True">
<Nodes>
<asp:TreeNode Text="Root" Value="Root">
<asp:TreeNode Text="RootSub1" Value="RootSub1"></asp:TreeNode>
<asp:TreeNode Text="RootSub2" Value="RootSub2"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="Root2" Value="Root2">
<asp:TreeNode Text="Root2Sub1" Value="Root2Sub1">
<asp:TreeNode Text="Root2Sub1Sub1" Value="Root2Sub1Sub1"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="Root2Sub2" Value="Root2Sub2"></asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView>
<asp:Label ID="Label1" runat="server" Text="Selected"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></div>
</form>
C #
protected void Page_Load(object sender, EventArgs e)
{
if(TreeView1.SelectedNode!=null && this.TextBox1.Text == TreeView1.SelectedNode.Value.ToString())
{
Label2.Text = (int.Parse(Label2.Text) + 1).ToString();
}
else
{
Label2.Text = "0";
}
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
this.TextBox1.Text = TreeView1.SelectedNode.Value.ToString();
}
Lorsque vous ajoutez des nœuds à l'arborescence de l'événement _TREENODEPOPOPOPULATION (), définissez la propriété .Selectionaction sur le nœud.
TreeNode newCNode;
newCNode = new TreeNode("New Node");
newCNode.SelectAction = TreeNodeSelectAction.Select;
//now you can set the .NavigateUrl property to call the same page with some query string parameter to catch in the page_load()
newCNode.NavigateUrl = "~/ThisPage.aspx?args=" + someNodeAction
RootNode.ChildNodes.Add(newCNode);
c #:
TreeNode node = TreeTypes.FindNode(obj.CustomerTypeId.ToString());
TreeTypes.Nodes[TreeTypes.Nodes.IndexOf(node)].Select();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TreeView1.SelectedNode.Selected = false;
}
}
travaille pour moi
Vous pouvez toujours utiliser l'événement MouseDown ou MouseUp et vérifier si le nœud sélectionné.
J'utilise la propriété ShowCheckBox
et la propriété cochée pour "mettre en surbrillance" l'élément sélectionné. Lorsque l'événement SelectedNodeChanged
soulève:
ShowCheckBox
et la propriété Checked
pour l'ancien sélectionnée et que j'ai défini sur true la propriété ShowCheckBox
et la propriété Checked
pour le Nouvelle sélectionnée.myTreeView.SelecteNode.Selected = false