如何在 WinForms 中禁用 TreeView 的节点重命名?

     2023-03-11     207

关键词:

【中文标题】如何在 WinForms 中禁用 TreeView 的节点重命名?【英文标题】:How can I disable node renaming for the TreeView in WinForms? 【发布时间】:2011-06-22 05:21:56 【问题描述】:

是否可以在单击树节点时禁用进入“重命名”模式的选项? 我不想完全禁用重命名,只是不允许通过单击节点来执行此操作。

【问题讨论】:

您是在说将 LabelEdit 属性设置为 false 吗? 不,这样做将完全禁用重命名。我不想那样做。 我们在谈论什么 TreeView? WPF? WinForms? 这听起来是个好主意。我的意思是,让用户拥有他们知道和期望的 UI 习语太容易了。它让他们保持警觉,让他们保持敏锐。 所以关闭LabelEdit。当他们按 F2 或从上下文菜单中选择一个项目时,显示一个用于更改名称的替代 UI(例如一个包含他们可以输入新名称的文本框的对话框)。当LabelEdit 关闭时,您仍然可以通过编程方式更改节点的名称。 【参考方案1】:

我不知道您为什么要更改默认行为,但无论如何这里有一个可能的解决方案,可以在 LabelEdit 设置为 true 的情况下编辑节点。

只需捕获 BeforeLabelEdit 事件并取消它,除非发生了您的特定操作。以下代码为 F2 按键执行此操作:

        bool _allowNodeRenaming;

        private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
        
            if (!_allowNodeRenaming)
            
                e.CancelEdit = true;
            

            _allowNodeRenaming = false;
        

        private void treeView1_KeyDown(object sender, KeyEventArgs e)
        
            if (e.KeyCode == Keys.F2)
            
                _allowNodeRenaming = true;
                treeView1.SelectedNode.BeginEdit();
            
        

【讨论】:

【参考方案2】:

您必须根据需要打开和关闭 LabelEdit 属性:

    private void startLabelEdit() 
        treeView1.LabelEdit = true;
        treeView1.SelectedNode.BeginEdit();
    

    private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) 
        treeView1.LabelEdit = false;
    

请注意,这有副作用,LabelEdit 属性是本机 Windows 控件的样式标志。更改它需要完全破坏窗口并从头开始重新创建它。最明显的副作用是窗口在创建后重绘自身时的小闪烁。可能还有其他的,我自己没发现有什么问题。

【讨论】:

在 C# winforms 应用程序中使用文本框过滤 Treeview

】在C#winforms应用程序中使用文本框过滤Treeview【英文标题】:FilteraTreeviewwithaTextboxinaC#winformsapp【发布时间】:2012-01-0519:34:10【问题描述】:我的C#winform中有一个TreeView。我希望能够通过搜索框添加搜索功能。基本上当用户输入字... 查看详情

QML:如何在 TreeView 和 TableView 禁用边框?

】QML:如何在TreeView和TableView禁用边框?【英文标题】:QML:HowtodisablebordersatTreeViewandTableView?【发布时间】:2015-10-1201:17:16【问题描述】:我可以删除这些元素的背景和交替颜色,但我找不到如何删除它周围的边框。有可能吗?【... 查看详情

Winforms Designer:如何禁用我的用户控件成为容器?

】WinformsDesigner:如何禁用我的用户控件成为容器?【英文标题】:WinformsDesigner:Howtodisablemyusercontrolfrombeingacontainer?【发布时间】:2012-08-0920:31:00【问题描述】:我有一个相对简单的设置。我有一个自定义用户控件,上面有一堆组... 查看详情

带列的 TreeView

...知道免费工作(在Vs-2010中)多列Treeview。【问题讨论】:WinForms、WPF、ASP.NET、...?具有多列的TreeView究竟会是什么样子?你可以发布一个样机图像吗?我无法想象它是如何使用的。@Cody在D 查看详情

如何在双击时禁用WPF TreeView中树项的展开/折叠

】如何在双击时禁用WPFTreeView中树项的展开/折叠【英文标题】:Howtodisableexpanding/collapsingoftreeitemsinWPFTreeViewondouble-click【发布时间】:2019-04-2705:22:43【问题描述】:当我双击树项目时,如何禁用树项目折叠/展开?我仍然想通过单... 查看详情

为啥 WinForms 中的 TreeView 会意外崩溃?

】为啥WinForms中的TreeView会意外崩溃?【英文标题】:WhywouldaTreeViewcollapseunexpectedlyinWinForms?为什么WinForms中的TreeView会意外崩溃?【发布时间】:2010-11-1218:05:10【问题描述】:除了调用TreeNode上的.Collapse()方法或TreeView的.CollapseAll()... 查看详情

在 XAML 中的 TreeView 中未选择任何内容时禁用 TreeView 上下文菜单项

】在XAML中的TreeView中未选择任何内容时禁用TreeView上下文菜单项【英文标题】:DisableTreeViewcontextmenuitemswhennothingisselectedintheTreeViewfromXAML【发布时间】:2014-10-2108:30:47【问题描述】:如果树视图的SelectedItem属性为空,我正在尝试禁... 查看详情

在 winforms 中使用控件(链接标签、树视图)

】在winforms中使用控件(链接标签、树视图)【英文标题】:workingwithcontrols(linklabels,treeview)inwinforms【发布时间】:2011-03-2209:07:18【问题描述】:我在面板和树视图上添加了一个面板和两个LinkLabel。现在在panel_Paint事件中,我希望... 查看详情

初学者:Winforms 中带有复选框和递归的 TreeView

】初学者:Winforms中带有复选框和递归的TreeView【英文标题】:Beginner:TreeViewwithcheckboxesandrecursioninWinforms【发布时间】:2021-04-0123:19:23【问题描述】:如果您需要比我提供的更多信息,第一篇文章和一个新的编码器对我来说如此裸... 查看详情

Winforms treeview,递归检查子节点问题

】Winformstreeview,递归检查子节点问题【英文标题】:Winformstreeview,recursivelycheckchildnodesproblem【发布时间】:2011-03-1114:31:49【问题描述】:以下代码直接取自微软http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.aftercheck%28VS.80%2... 查看详情

如何在 WinForms 应用程序中关闭 IE WebBrowserControl 上的兼容性视图?

】如何在WinForms应用程序中关闭IEWebBrowserControl上的兼容性视图?【英文标题】:HowdoIturnoffCompatibilityViewontheIEWebBrowserControlinaWinFormsapp?【发布时间】:2011-10-0617:16:28【问题描述】:在我的WinForms应用程序中,如果我使用WebBrowser控件... 查看详情

如何禁用 C# 组合框中元素的编辑?

...13:14:48【问题描述】:我在ComboBox中有一些元素(带有C#的WinForms)。我希望他们的内容是静态的,以便用户在运行应用程序时无法更改其中的值。我也不希望用户向ComboBox添加新值【问题讨论】:【参考方案1】:使用ComboStyle属性... 查看详情

Winforms - 如何在设计器中显示/隐藏元素?

】Winforms-如何在设计器中显示/隐藏元素?【英文标题】:Winforms-howtoshow/hideelementsindesigner?【发布时间】:2012-04-1710:13:55【问题描述】:我正在尝试使用winforms制作多页应用程序。我决定使用多个面板-每个面板代表不同的页面,... 查看详情

如何在 C# WinForms 中使用 LINQ 从 DataGridView 中选择多个字段

】如何在C#WinForms中使用LINQ从DataGridView中选择多个字段【英文标题】:HowtoSelectMultipleFieldsfromDataGridViewusingLINQinC#WinForms【发布时间】:2021-11-1515:04:13【问题描述】:技术细节:VisualStudio2017(社区版)LINQC#(WinForms)我正在尝试使用LIN... 查看详情

如何在 WinForms 中制作自动滚动多行文本框? [复制]

】如何在WinForms中制作自动滚动多行文本框?[复制]【英文标题】:HowtomakeautoscrollmultilineTextBoxinWinForms?[duplicate]【发布时间】:2012-11-1009:52:53【问题描述】:可能重复:HowdoIautomaticallyscrolltothebottomofamultilinetextbox?我使用多行TextBox... 查看详情

如何在 C# 中编辑 TreeView 中的字段?

】如何在C#中编辑TreeView中的字段?【英文标题】:HowtoeditafieldinaTreeViewinC#?【发布时间】:2017-02-0119:31:03【问题描述】:我有一个TreeView:<TreeViewName="OOB"而且我知道被点击的项目:selectedNode=(XmlNode)OOB.SelectedItem;TreeView是根据这... 查看详情

Winforms中如何拆分文本框

】Winforms中如何拆分文本框【英文标题】:HowtosplitTextBoxinWinforms【发布时间】:2021-10-0413:32:33【问题描述】:我正在尝试为此查询数据库在每行的开头和结尾还添加逗号,在每行中,或者我该怎么做,因为目前我只能在开头和结... 查看详情

如何在 C# (Winforms) 中复制或读取假脱机文件

】如何在C#(Winforms)中复制或读取假脱机文件【英文标题】:HowtocopyorreadSpoolfileinC#(Winforms)【发布时间】:2017-01-0713:09:34【问题描述】:我需要复制或读取假脱机文件。但是当我尝试阅读/复制它时。我收到以下错误。System.Unauthorize... 查看详情