.NET C#方法和类型问题
我正在为这个问题苦苦挣扎 我正在尝试在另一个类中创建一个contextmenu并将其链接到Datagrid。下面是重新创建我尝试执行的操作的示例代码:.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
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菜单
不需要是实例类,但必须是静态类(如果没有更多的方法)。我与其他答案相反。谢谢你的备选答案-这是我知道如何做的,这是因为当时有其他方法我不确定。谢谢你,我现在明白了!这将在几个不同的地方帮助我。谢谢你,我现在明白了!这将在几个不同的地方帮助我。