import sys
# argv is your commandline arguments, argv[0] is your program name, so skip it
for n in sys.argv[1:]:
print(n) #print out the filename we are currently processing
input = open(n, "r")
output = open(n + ".out", "w")
# do some processing
input.close()
output.close()
Затем назовите его следующим образом:
./foo.py bar.txt baz.txt
Самый легкий путь - если это не вмешивается в остальную часть Вашего кода - состоит в том, чтобы просто установить узел как не выбранный в методе SelectedNodeChanged.
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e){
// Do whatever you're doing
TreeView1.SelectedNode.Selected = false;
}
Хранилище, что выбрано и использует код в обработчике событий Page_Load для сравнения то, что выбрано к тому, что Вы сохранили. Page_Load называют для каждого сообщения назад, даже если выбранное значение не изменяется, в отличие от SelectedNodeChanged.
Пример
сопроводительный текст 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();
}
После несколько долгого периода у меня наконец было некоторое время, чтобы изучить, как разделить TreeView на подклассы для обработки Выбранного нажимаемого Узла.
Вот мое решение, которое выставляет новое событие SelectedNodeClicked, которое можно обработать от Страницы или везде, где. (В случае необходимости это - простая задача осуществить рефакторинг в 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
Когда Вы добавите узлы к дереву в _TreeNodePopulate () событие, установите.SelectionAction свойство на узле.
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);
Можно всегда использовать MouseDown или Событие mouseUp и проверку, чтобы видеть если это выбранный узел.