C#Winform中如何获取contextMenuStrip弹出的父控件的相关信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#Winform中如何获取contextMenuStrip弹出的父控件的相关信息相关的知识,希望对你有一定的参考价值。

一个Form上有若干Panal,panal数量不固定,分别为这些panal制定同一个右键菜单contextMenuStrip1.右键菜单设置了一个按钮a,如何在单击按钮a时候获取当前选定panal的相关信息?比如当前panal的Name属性?

参考技术A 这个不是在按钮点击方法内做的,是在你右键单击panel的时候,右键函数内,你是设置个标记啊还是啥的都好,然后按钮点击方法内检测那个标记,取到对应的Panel 参考技术B 首先写好一个用来处理快捷菜单单击事件的函数Void Context_Click(object sender,EventArgs e),怎么写等会儿说
添加并设计完ContextMenuStrip(先叫它cms)后,做这样一个事情:
cms.Click += New EventHandler(this.Context_Click);
这样我们就把快捷菜单绑定到了这个函数上。
函数?注意它第一个参数object sender,在函数里面
if(sender is ContextMenuStrip) //你要把contextmenustrip写成Control也行,下面都要改

ContextMenuStrip cms = (ContextMenuStrip)sender;
// cms就是刚刚单击的菜单了
// 随你Name text还是Tag 删了都行
本回答被提问者和网友采纳

如何获取 TreeViewItem 的 ContextMenu,将 TreeView 作为 DataTemplate

【中文标题】如何获取 TreeViewItem 的 ContextMenu,将 TreeView 作为 DataTemplate【英文标题】:How to get TreeViewItem's ContextMenu, having TreeView as a DataTemplate 【发布时间】:2021-10-15 03:30:56 【问题描述】:

我在这样的数据模板中有一个 TreeView:

    <DataTemplate DataType="x:Type MainFavoriteItems">
    <TreeView BorderThickness="0">
       <TreeViewItem Header="First Header" ItemsSource="Binding FavItems" ItemTemplate="StaticResource item_template"/>
       <TreeViewItem Header="Second Header" ../>
       <TreeViewItem Header="Third Header" ../>
    <TreeView.ItemContainerStyle>
        <Style TargetType="x:Type TreeViewItem" BasedOn="StaticResource x:Type TreeViewItem">
        <Setter Property="ContextMenu" Value="Binding GetMenu"/>  // DO not work
    </TreeView.ItemContainerStyle>
    </TreeView>
    </DataTemplate>



internal class MainFavoriteItems
public IReadOnlyList<Info> FavItems
    
      get
      
            List<Info> items = new List<Info>();
            items.Add(new InnerViewModel("1"));
            items.Add(new InnerViewModel("2"));
            NotifyPropertyChanged(() => FavItems);
        return items;
      
    


public class InnerViewModel

public string Id;
public System.Windows.Controls.ContextMenu GetMenu => new CustomContextMenu();
...

当我运行它时,标题及其子项看起来很好,但内部项目的右键单击 ContextMenu 没有显示,并且它的 xaml 输出错误说.. GetMenu property not found on object 'MainFavoriteItems' .. 我在做什么错误的 !?谢谢。

【问题讨论】:

【参考方案1】:

您的示例代码甚至无法编译,但您应该将 TreeViewItemItemContainerStyle 设置为 ItemsSource 以使绑定生效:

<TreeViewItem Header="First Header" ItemsSource="Binding FavItems"
                                    ItemTemplate="StaticResource item_template">
    <TreeViewItem.ItemContainerStyle>
        <Style TargetType="x:Type TreeViewItem" BasedOn="StaticResource x:Type TreeViewItem">
            <Setter Property="ContextMenu" Value="Binding GetMenu"/>
        </Style>
    </TreeViewItem.ItemContainerStyle>
</TreeViewItem>
<TreeViewItem Header="Second Header" />
<TreeViewItem Header="Third Header" />

【讨论】:

以上是关于C#Winform中如何获取contextMenuStrip弹出的父控件的相关信息的主要内容,如果未能解决你的问题,请参考以下文章

C#-WinForm-如何获取文本框(TextBox)中鼠标,光标位置

获取 ListItem ContextMenu 中的选定项目

C#Winform中如何获取contextMenuStrip弹出的父控件的相关信息

winform 不想自动弹出窗口, 最小化後图标要显示在右下角 (像杀毒软件那样),要怎麼做?

在 LongPress 上显示 ContextMenu 以获取 xamarin 表单中的视图

如何比较两个目录并获取丢失的文件? c#winform