C# 在C中,如何在刷新时保持树视图节点处于选中状态
我对编码真的很陌生 我有一个用定时器刷新的树视图。 如何确保每次刷新时都高亮显示所选节点 谢谢你的帮助 谢谢 以下是我的代码:C# 在C中,如何在刷新时保持树视图节点处于选中状态,c#,treeview,refresh,selected,treenode,C#,Treeview,Refresh,Selected,Treenode,我对编码真的很陌生 我有一个用定时器刷新的树视图。 如何确保每次刷新时都高亮显示所选节点 谢谢你的帮助 谢谢 以下是我的代码: private void PopulateTree(ListObjectsResponse buckets) { treeView1.Nodes.Clear(); List<TreeItem> items = new List<TreeItem>(); foreach (S3Obje
private void PopulateTree(ListObjectsResponse buckets)
{
treeView1.Nodes.Clear();
List<TreeItem> items = new List<TreeItem>();
foreach (S3Object obj in buckets.S3Objects)
{
treeView1.Nodes.Add(new TreeNode(obj.Key));
}
}
private void button4_Click_1(object sender, EventArgs e)
{
timer1.Enabled = true;
existingBucketName = label3.Text + "-DP";
AmazonS3Client client = new AmazonS3Client();
ListObjectsRequest listRequest = new ListObjectsRequest
{
BucketName = existingBucketName,
};
try
{
ListObjectsResponse listResponse;
listResponse = client.ListObjects(listRequest);
PopulateTree(listResponse);
}
catch
{
timer1.Enabled = false;
MessageBox.Show("There is no folder for this user");
}
}
假设o.Key是一个字符串,并且每个字符串都是唯一的,并且在bucket.S3Objects中最多出现一次,请在重新填充TreeView之前尝试保存所选值,然后再次选择它
private void PopulateTree(ListObjectsResponse buckets)
{
// Since you're about to clear out all current TreeNode instances, storing a
// reference to SelectedNode is not enough. You're setting o.Key as the Text
// for each TreeNode, so save the selected node's Text value.
var selectedText
= treeView1.SelectedNode == null ? "" : treeView1.SelectedNode.Text;
// Repopulate your TreeView with new TreeNodes
treeView1.Nodes.Clear();
treeView1.Nodes.AddRange(buckets.S3Objects.Select(o => new TreeNode(o.Key)).ToArray())
// Look for the TreeNode with the same Text that you had selected before.
// If it's not found, then SelectedNode will be set to null
treeView1.SelectedNode =
= treeView1.Nodes.Cast<TreeNode>()
.SingleOrDefault(n => n.Text == selectedText);
}
上面的几个方法,如Select、Cast和SingleOrDefault,都是LINQ的一部分。假设您所说的是ASP.NET而不是ASP.NET MVC,您可以在页面加载事件处理程序中执行此操作。确保检查IsPostBack==true 比如说,
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// set selected node here
}
}
如果您使用的是ASP.NET MVC,则只需将属性存储在ViewBag中。将选定节点存储到局部变量,刷新,从变量中设置选定节点。感谢快速响应。我输入了代码,它看起来不像treeView1.Nodes.addRangeBakes.S3Objects.Selecto=>new TreeNodeo.Key这一行-正如我所说,我在这方面只是新手,所以希望我不是在犯新手错误。如果我选择了一个子节点,这对我不起作用。最后一行似乎只搜索顶级节点。在调试器树eview1中,节点只是顶级节点。是否有人有简洁的方法搜索整个树以查找以前的选择?如果在记住以前的选择时能够使用SelectedNode.Name,则可以使用以下方法重新选择它,这将适用于子节点:treeView1.SelectedNode=treeView1.nodes.FindselectedText,searchAllChildren:true.FirstOrDefault;