小编Sas*_*sha的帖子

带有自定义参数的EventHandler

我一直在寻找谷歌上大约一个小时的答案,但我没有找到我正在寻找的确切内容.

基本上,我有一个静态助手类,可以帮助我在我的应用程序中执行我经常做的很多事情.在这种情况下,我有一个名为"CreateDataContextMenu"的方法,它在给定的TreeView控件上创建一个上下文菜单.

public static void CreateDataContextMenu(Form parent, TreeView owner, string dataType)
{ ... }
Run Code Online (Sandbox Code Playgroud)

TreeView所有者是我将关联我的上下文菜单的控件.

然后我将Click事件添加到MenuItem,如下所示:

menuItemFolder.Click += new System.EventHandler(menuItemFolder_Click);
Run Code Online (Sandbox Code Playgroud)

我在这里遇到的问题是我想将"owner"和"dataType"作为参数传递给menuItemFolder_Click事件.

我尝试了以下方法:

menuItemFolder.Click += new System.EventHandler(menuItemFolder_Click(sender,e,owner,dataType));
(...)
private static void menuItemFolder_Click(object sender, System.EventArgs e, Treeview owner, string dataType)
{...}
Run Code Online (Sandbox Code Playgroud)

但它根本不起作用.我这样做可能很天真,但我对事件处理程序还不太满意.

我怎么能这样做?我的第一个猜测是我需要为这个特定情况创建自己的EventHandler.我是否朝着正确的方向前进?

c# contextmenu click event-handling

11
推荐指数
1
解决办法
2万
查看次数

C#Dictionary在另一个词典中使用TValue

我是C#的新手,我来自Ruby背景.我还有很多需要学习的东西,这也是我提出以下问题的原因:

目标:1)我想创建一个字符串作为键和我想要的任何对象类型作为值.像这样的东西:

Dictionary<string, T>
Run Code Online (Sandbox Code Playgroud)

2)但并非全部.我还想要一个"Master"字典,字符串作为键,上面描述的字典作为值.像这样的东西:

Dictionary<string, Dictionary<string T>>
Run Code Online (Sandbox Code Playgroud)

我希望它是这样的,所以我可以像下面的例子一样工作:

MasterDictionary[Dict1].Add( Thing1 )
MasterDictionary[Dict2].Add( Thing2 )
Run Code Online (Sandbox Code Playgroud)

当前代码:我正在尝试使用以下代码实现此目的

public List<string> DataTypes;
public Dictionary<string, Dictionary<string, object>> TempData;
public Dictionary<string, Dictionary<string, object>> GameData;

public Session()
        {   
            // Create a list of all Data Types.
            DataTypes = new List<string>();
            DataTypes.Add("DataInfo");
            DataTypes.Add("Maps");
            DataTypes.Add("Tilesets");

            // Create and populate TempData dictionary.
            TempData = new Dictionary<string, Dictionary<string, object>>();
            TempData.Add("DataInfo", new Dictionary<string, DataInfo>());
            TempData.Add("Maps", new Dictionary<string, Map>());
            TempData.Add("Tilesets", new Dictionary<string, Tileset>());

            // Create GameData dictionary and copy TempData into it. …
Run Code Online (Sandbox Code Playgroud)

c# generics dictionary types

5
推荐指数
1
解决办法
1755
查看次数

标签 统计

c# ×2

click ×1

contextmenu ×1

dictionary ×1

event-handling ×1

generics ×1

types ×1