Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET C#方法和类型问题_C#_.net_Object - Fatal编程技术网

.NET C#方法和类型问题

.NET C#方法和类型问题,c#,.net,object,C#,.net,Object,我正在为这个问题苦苦挣扎 我正在尝试在另一个类中创建一个contextmenu并将其链接到Datagrid。下面是重新创建我尝试执行的操作的示例代码: namespace Context_Menu_Test { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window

我正在为这个问题苦苦挣扎

我正在尝试在另一个类中创建一个contextmenu并将其链接到Datagrid。下面是重新创建我尝试执行的操作的示例代码:

  namespace Context_Menu_Test
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            ContextMenu cm = new ContextMenu();
            MenuItem mi1 = new MenuItem();
            mi1.Header = "Test1";
            cm.Items.Add(mi1);
            //This Works
            DG1.ContextMenu = cm;

            //THIS DOESN'T WORK
            DG1.ContextMenu = new Menus.Context_Menus.generate_datagrid_context_menu();
        }
    }
}

namespace Menus
{
    public class Context_Menus
    {
        public ContextMenu generate_datagrid_context_menu()
        {
            ContextMenu cm = new ContextMenu();
            MenuItem mi1 = new MenuItem();
            mi1.Header = "Test1";
            cm.Items.Add(mi1);
            return cm;
        }
    }
}
名称空间上下文菜单测试
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
ContextMenu cm=新建ContextMenu();
MenuItem mi1=新MenuItem();
mi1.Header=“Test1”;
cm.项目添加(mi1);
//这很有效
DG1.ContextMenu=cm;
//这不管用
DG1.ContextMenu=新菜单。上下文菜单。生成数据网格上下文菜单();
}
}
}
名称空间菜单
{
公共类上下文菜单
{
公共上下文菜单生成\u数据网格\u上下文\u菜单()
{
ContextMenu cm=新建ContextMenu();
MenuItem mi1=新MenuItem();
mi1.Header=“Test1”;
cm.项目添加(mi1);
返回cm;
}
}
}
错误1“菜单.上下文菜单.生成数据网格上下文菜单()”是一个错误 “方法”,但使用起来像 “键入”W:\Test\u Code\Context\u Menu\u Test\MainWindow.xaml.cs 33 55 Context\u Menu\u Test


generate\u datagrid\u context\u menu
是一个实例方法,因此需要调用
menu.context\u menu
构造函数,然后对结果对象调用
generate\u datagrid\u context\u menu

var menus = new Menus.Context_Menus();
DG1.ContextMenu = menus.generate_datagrid_context_menu();
或者,您可以将
generate\u datagrid\u context\u菜单
方法设置为静态:

public static ContextMenu generate_datagrid_context_menu()
{
    ...
}
然后这样称呼它:

DG1.ContextMenu = Menus.Context_Menus.generate_datagrid_context_menu();

generate\u datagrid\u context\u menu
是一个实例方法,因此需要调用
menu.context\u menu
构造函数,然后对结果对象调用
generate\u datagrid\u context\u menu

var menus = new Menus.Context_Menus();
DG1.ContextMenu = menus.generate_datagrid_context_menu();
或者,您可以将
generate\u datagrid\u context\u菜单
方法设置为静态:

public static ContextMenu generate_datagrid_context_menu()
{
    ...
}
然后这样称呼它:

DG1.ContextMenu = Menus.Context_Menus.generate_datagrid_context_menu();
正确的语法应该是:

DG1.ContextMenu = (new Menus.Context_Menus()).generate_datagrid_context_menu();
这相当于:

var menu = new Menus.Context_Menus();
DG1.ContextMenu = menu.generate_datagrid_context_menu();
基本上,您需要一个
上下文菜单
类的实例,以便对其调用非静态方法。

好的,正确的语法应该是:

DG1.ContextMenu = (new Menus.Context_Menus()).generate_datagrid_context_menu();
这相当于:

var menu = new Menus.Context_Menus();
DG1.ContextMenu = menu.generate_datagrid_context_menu();

基本上,您需要一个
上下文菜单
类的实例,以便对其调用非静态方法。

DG1.ContextMenu=new Menus.Context_menu.generate_datagrid_Context_menu()

这一行实际上执行以下操作:

type = Menus.Context_Menus.generate_datagrid_context_menu;  
DG1.ContextMenu = new type();  
因为
Menus.Context_Menus.generate_datagrid_Context_menu()
是一个非类型的方法,因此编译器不喜欢它

var menus = new Menus.Context_Menus();
DG1.ContextMenu = menus.generate_datagrid_context_menu();

是您要执行的操作

DG1.ContextMenu=新建菜单。上下文菜单。生成数据网格上下文菜单()

这一行实际上执行以下操作:

type = Menus.Context_Menus.generate_datagrid_context_menu;  
DG1.ContextMenu = new type();  
因为
Menus.Context_Menus.generate_datagrid_Context_menu()
是一个非类型的方法,因此编译器不喜欢它

var menus = new Menus.Context_Menus();
DG1.ContextMenu = menus.generate_datagrid_context_menu();

是您要执行的操作

如果您的类
上下文菜单
没有成员,则可以将其设置为静态

不要对静态类使用
new

public MainWindow()
{
    // ...
    DG1.ContextMenu = Menus.Context_Menus.generate_datagrid_context_menu();
}

namespace Menus
{
    public static class Context_Menus
    {
        public static ContextMenu generate_datagrid_context_menu()
        {
            ContextMenu cm = new ContextMenu();
            MenuItem mi1 = new MenuItem();
            mi1.Header = "Test1";
            cm.Items.Add(mi1);
            return cm;
        }
    }
}

如果您的类
上下文菜单
没有成员,则可以将其设置为静态

不要对静态类使用
new

public MainWindow()
{
    // ...
    DG1.ContextMenu = Menus.Context_Menus.generate_datagrid_context_menu();
}

namespace Menus
{
    public static class Context_Menus
    {
        public static ContextMenu generate_datagrid_context_menu()
        {
            ContextMenu cm = new ContextMenu();
            MenuItem mi1 = new MenuItem();
            mi1.Header = "Test1";
            cm.Items.Add(mi1);
            return cm;
        }
    }
}

新菜单。上下文菜单
需要是
(新菜单。上下文菜单())
新菜单。上下文菜单
需要是
(新菜单。上下文菜单())
其他答案强制对
上下文菜单
使用
新建
。显然,
Context\u菜单
不需要是实例类,但必须是静态类(如果没有更多的方法)。我与其他答案相反。谢谢你的备选答案-这是我知道如何做的,这是因为当有其他方法我不确定时。其他答案强制使用
new
用于
上下文菜单
。显然,
Context\u菜单
不需要是实例类,但必须是静态类(如果没有更多的方法)。我与其他答案相反。谢谢你的备选答案-这是我知道如何做的,这是因为当时有其他方法我不确定。谢谢你,我现在明白了!这将在几个不同的地方帮助我。谢谢你,我现在明白了!这将在几个不同的地方帮助我。