C# 实例方法不能具有空的this 各位大侠帮忙

vivianqing 2012-10-09 10:21:17
以下语句运行时出现以下错误
“实例方法不能具有空的this ”

this.orderLogo1.onValueChanged += new EC.Controls.orderLogo.valuechange(this.orderLogo1_onValueChanged);
...全文
800 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
先 new 一个 status 撒..都没实例 status 怎么可能用this 咯
[/Quote]
用this怎么可能需要实例?请不要不懂乱说,对于非静态类,用this是很正常的,但是静态类则必须,而对于抽象类或接口则视情况,楼主是运行时出现错误,所以多数是抽象类或接口里出的问题,但是他始终无视我的回复,不肯给全代码——他爸爸是谁?看不到爸爸怎么知道能否用this
vivianqing 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]

引用 18 楼 的回复:
先 new 一个 status 撒..都没实例 status 怎么可能用this 咯

用this怎么可能需要实例?请不要不懂乱说,对于非静态类,用this是很正常的,但是静态类则必须,而对于抽象类或接口则视情况,楼主是运行时出现错误,所以多数是抽象类或接口里出的问题,但是他始终无视我的回复,不肯给全代码——他爸爸是谁?看不到爸爸怎么知道能否用this
[/Quote]

谢谢,我知道原因了
宝_爸 2012-10-09
  • 打赏
  • 举报
回复
静态方法里调用的这个代码?
vivianqing 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 7 楼 的回复:
this.orderLogo1.onValueChanged += new EC.Controls.orderLogo.valuechange(orderLogo1_onValueChanged);


楼主把这个加在窗体初始化事件中试试
[/Quote]

不行
St_Jar 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
this.orderLogo1.onValueChanged += new EC.Controls.orderLogo.valuechange(orderLogo1_onValueChanged);
[/Quote]

楼主把这个加在窗体初始化事件中试试
six-years 2012-10-09
  • 打赏
  • 举报
回复
orderLogo1_onValueChanged这个方法在后台也有吗?
cheng2005 2012-10-09
  • 打赏
  • 举报
回复
this.orderLogo1.onValueChanged += new EC.Controls.orderLogo.valuechange(orderLogo1_onValueChanged);
vivianqing 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

你的后台orderLogo1_onValueChanged方法被你删了吧,你直接把报错的这句话删了就好了晒


应该是这样的。
[/Quote]

删除了就无法用到这个委托了
vivianqing 2012-10-09
  • 打赏
  • 举报
回复
以下是我写的事例委托
/// <summary>
///
/// </summary>
/// <param name="status"></param>
public delegate void valuechange(string status);
/// <summary>
/// 换行
/// </summary>
public event valuechange onValueChanged;
/// <summary>
/// 状态
/// </summary>


public string status
{
get
{

if (cmb_logo.SelectedIndex > -1)
{
return cmb_logo.SelectedValue.ToString();
}
else
{
return "";
}
}
}
public string statusCaption
{

get
{

if (cmb_logo.SelectedIndex > -1)
{
return cmb_logo.Text;
}
else
{
return "";
}
}
}

private void cmb_logo_SelectedValueChanged(object sender, EventArgs e)
{
if (onValueChanged != null)
{
onValueChanged(status);
}
}

private void orderLogo_Load(object sender, EventArgs e)
{
cmb_logo.ImageList = GetImageList.OrderOrderLogoImages ();
cmb_logo.DisplayMember = "name";
cmb_logo.ValueMember = "id";
cmb_logo.ImageIndexMember = "imageid";
cmb_logo.DataSource = DevFunc.DtOrderLogo ();
cmb_logo.SelectedIndex = 3;
}
Hauk 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你的后台orderLogo1_onValueChanged方法被你删了吧,你直接把报错的这句话删了就好了晒
[/Quote]

应该是这样的。
six-years 2012-10-09
  • 打赏
  • 举报
回复
你的后台orderLogo1_onValueChanged方法被你删了吧,你直接把报错的这句话删了就好了晒
vivianqing 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

this 是 指 当前对象..你这个对象是哪个了?
[/Quote]

是指winfrom界面
zhanglong19891129 2012-10-09
  • 打赏
  • 举报
回复
this 是 指 当前对象..你这个对象是哪个了?
zhanglong19891129 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

引用 16 楼 的回复:

if (onValueChanged != null)
{
onValueChanged(status);
}

你需要保证status不为空才能调用该事件。



请问要如何保证?
public string status
{
get
{

if (cmb_logo.SelectedIndex > -1)
……
[/Quote]
先 new 一个 status 撒..都没实例 status 怎么可能用this 咯
vivianqing 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

if (onValueChanged != null)
{
onValueChanged(status);
}

你需要保证status不为空才能调用该事件。
[/Quote]


请问要如何保证?
public string status
{
get
{

if (cmb_logo.SelectedIndex > -1)
{
return cmb_logo.SelectedValue.ToString();
}
else
{
return "";
}
}
}
enaking 2012-10-09
  • 打赏
  • 举报
回复
if (onValueChanged != null)
{
onValueChanged(status);
}

你需要保证status不为空才能调用该事件。
qldsrx 2012-10-09
  • 打赏
  • 举报
回复
你的那句错误的语句,所在的的类是什么?————他爸爸是谁?
老毕 2012-10-09
  • 打赏
  • 举报
回复
我的意思是,你给委托添附方法那条语句的后半句有错误。

传递给EC.Controls.orderLogo.valuechange这个类的构造函数的参数,应该是指向一个实际的方法,而不能是一个委托或者事件的声明。

你的那个赋值语句
this.orderLogo1.onValueChanged += new EC.Controls.orderLogo.valuechange(this.orderLogo1_onValueChanged);

可以简单地理解为下面这样的一句。
this.orderLogo1_onValueChanged += this.orderLogo1_onValueChanged

知道这个意思了吗?
vivianqing 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

引用楼主 的回复:
以下语句运行时出现以下错误
“实例方法不能具有空的this ”

this.orderLogo1.onValueChanged += new EC.Controls.orderLogo.valuechange(this.orderLogo1_onValueChanged);


this.orderLogo1.onValueChanged += new EC……
[/Quote]


参数的方法是
private void cmb_logo_SelectedValueChanged(object sender, EventArgs e)
{
if (onValueChanged != null)
{
onValueChanged(status);
}
}





老毕 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
以下语句运行时出现以下错误
“实例方法不能具有空的this ”

this.orderLogo1.onValueChanged += new EC.Controls.orderLogo.valuechange(this.orderLogo1_onValueChanged);
[/Quote]

this.orderLogo1.onValueChanged
+= new EC.Controls.orderLogo.valuechange(this.orderLogo1_onValueChanged);

如果我没眼花,蓝色与红色部分是同一个东西吧。问题应该是出在这里,蓝色部分是一个委托,而红色部分应该是你作为参数的某个方法。

比如说这样:
private void OnLoad(object sender, EventArgs e)
{
this.orderLogo1.onValueChanged += new EC.Controls.orderLogo.valuechange(this.ImplementationMethod);
}

private void ImplementationMethod(string status)
{
//... ...
}

110,953

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧