gpt4 book ai didi

c# - 如何重命名动态创建的 TreeView 项目的标题

转载 作者:行者123 更新时间:2023-11-30 13:01:44 26 4
gpt4 key购买 nike

我是 WPF 中 TreeView 的新手:C#,我正在学习如何使用动态创建的 TreeViewItems。现在,我的程序允许用户创建动态 TreeViewItems 然后删除它们。对于我的下一步,我想编程重命名这些动态项目的能力。从理论上讲,这个过程很容易解释,但是,我不知道如何处理 C# 代码。

首先,我想概述一下我的重命名过程,以准确说明我需要帮助的地方。

  1. 用户右键单击 TreeViewItem
  2. contextMenu 下拉(完成)
  3. 用户点击“重命名...”并打开一个窗口(完成)
  4. TreeViewItem 的名称输入到 textBox(完成)
  5. 如果 textBox 中的文本与主窗口的 TreeView 中的 header 匹配,则会打开另一个窗口,允许用户输入新的TreeViewItem 的名称。 (未完成)
  6. 当在新窗口中输入名称时,用户单击回车,项目的名称将更改为在 textBox 中输入的名称。 (未完成)

这是我的第 5 步代码,其中程序需要验证输入的 header 是否存在于 TreeView 中。在我不确定正确代码的地方,我有伪代码。

//ENTER - Select TreeViewItem, open enterName window
private void button2_Click(object sender, RoutedEventArgs e)
{
//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;

//If(textbox1.text == one of the treeViewItem headers)
var newWindow = new EnterCartName();
newWindow.Show();

//else,
//MessageBox.Show("Value entered does not match a current cart name");
//this.Close();
}

对于第 6 步,我了解如何 add具有动态创建的 headerTreeViewItem,但我不确定如何获取和重命名现有的。这是我的代码:

//ENTER - Change cart name
private void button2_Click(object sender, RoutedEventArgs e)
{
this.Close(); //close Window

//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;

//mainWindow.treeViewItem.Header(TVI gotten from previous window) = textBox1.Text;
}

我认为动态 TreeView Assets 的主要问题是我觉得它们对我来说是不可见的。如果我不知道它们的名称或如何正确引用它们,我应该如何使用它们。如果您知道有关此主题的任何指南或资源,请随时分享。

非常感谢。

我的最终解决方案:

//Now Global
bool hasFoundMatch;

//ENTER - Select cart, open enter name window
private void button2_Click(object sender, RoutedEventArgs e)
{
string input, output;

//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;

//Get TreeViewItem from mainWindow
TreeViewItem renameCart = mainWindow.cartTypes_TI;
input = textBox1.Text;
output = textBox2.Text;

//Check if header exists
hasFoundMatch = CheckItemHeader(renameCart.Items, input);

//if header exists - set new header
//Else - show message box
if (hasFoundMatch == true)
SetItemHeader(renameCart.Items, input, output);
else
MessageBox.Show("Value entered does not match a current cart name.");

//close window
this.Close();
}

//Checks to see whether the user entered header exists
private bool CheckItemHeader(ItemCollection treeViewItems, string input)
{
bool hasFoundMatch = false;
for (int index = 0; index < treeViewItems.Count; index++)
{
TreeViewItem item = (TreeViewItem)treeViewItems[index];
string header = item.Header.ToString();

if(header == input)
{
hasFoundMatch = true;
break;
}
else
hasFoundMatch = false;
}
return hasFoundMatch;
}

//Changes the selected TVI header
private void SetItemHeader(ItemCollection treeViewItems, string input, string output)
{
for (int index = 0; index < treeViewItems.Count; index++)
{
TreeViewItem item = (TreeViewItem)treeViewItems[index];
string header = item.Header.ToString();
if (header == input)
{
item.Header = output;
break;
}
}
}

最佳答案

设置标题非常简单:

treeViewItem.Header = textBox1.Text;

查找它应该类似于查找任何 TreeViewItem.Header 是否与 TextBox 中提供的文本匹配:

private void SetItemHeader(ItemCollection treeViewItems, string input, string output)
{
for (int index = 0; index < treeViewItems.Count; index++)
{
TreeViewItem item = (TreeViewItem)treeViewItems[index];
if (item.Header == input)
{
item.Header = output;
return;
}
else if (item.Items.Count > 1) SetItemHeader(item.Items, input, output);
}
}

更新>>>

您可以使用此方法来检查项目标题...如果它返回 true,则您有一个匹配项:

private bool CheckItemHeader(ItemCollection treeViewItems, string input)
{
for (int index = 0; index < treeViewItems.Count; index++)
{
TreeViewItem item = (TreeViewItem)treeViewItems[index];
if (item.Header == input) return true;
else if (item.Items.Count > 1) return CheckItemHeader(item.Items, input);
}
return false;
}

你会像这样使用它:

bool hasFoundMatch = CheckItemHeader(treeView.Items, textInputToMatch);

然后,当您拥有将 header 更改为的值时:

SetItemHeader(treeView.Items, textInputToMatch, textToChangeHeaderTo);

关于c# - 如何重命名动态创建的 TreeView 项目的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17927072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com