如何在 C# 中使用带有 sender 和 e 参数的方法? [复制]
Posted
技术标签:
【中文标题】如何在 C# 中使用带有 sender 和 e 参数的方法? [复制]【英文标题】:How to use a method with sender and e parameters in C#? [duplicate] 【发布时间】:2022-01-07 13:10:39 【问题描述】:所以我有这段代码,我想在resize_Handler
void 中调用set_background
void。我该怎么做?我在resize_Handler
中尝试了set_background(null, PaintEventArgs());
,但它显示的是non-invocable member cannot be used like a method
。
我的代码:
private void set_background(Object sender, PaintEventArgs e)
Graphics graphics = e.Graphics;
Rectangle gradient_rectangle = new Rectangle(0, 0, Width, Height);
Brush b = new LinearGradientBrush(gradient_rectangle, Color.FromArgb(255, 255, 255), Color.FromArgb(255, 102, 54), 0f);
graphics.FillRectangle(b, gradient_rectangle);
private void resize_Handler(object sender, System.EventArgs e)
// where I want to call set_background()
【问题讨论】:
PaintEventArgs
是一种类型 - 所以 PaintEventArgs()
无效。但是new PaintEventArgs()
会。
虽然我不得不问你希望e.Graphics
在这种情况下是什么......从根本上说,这些方法应该用作事件处理程序而不是直接调用。
@JonSkeet,但我希望在窗口调整大小时调用它。你能提供一些关于这方面的信息吗?我尝试做set_background(null, new PaintEventArgs(null, new Rectangle()));
,但它也没有工作。提前致谢。
其实我认为解决方案是this.Invalidate()
或this.Update()
或this.Refresh()
(两者结合)。否则问题将是您不知道要使用哪个图形对象。无论如何,您可能已经将它与Paint event 挂钩,只是用了一个奇怪的名字。
【参考方案1】:
不要尝试直接调用事件处理程序,而是将事件处理程序中的代码重构为自己的方法,然后调用新方法。
private void SetBackground(Graphics graphics)
Rectangle gradient_rectangle = new Rectangle(0, 0, Width, Height);
Brush b = new LinearGradientBrush(gradient_rectangle, Color.FromArgb(255, 255, 255), Color.FromArgb(255, 102, 54), 0f);
graphics.FillRectangle(b, gradient_rectangle);
private void set_background(Object sender, PaintEventArgs e)
SetBackground(e.Graphics);
private void resize_Handler(object sender, System.EventArgs e)
Graphics graphics = new Graphics(); // or whatever applies here.
SetBackground(graphics);
【讨论】:
谢谢伙计。我什至想不出这个。但我有一个错误如下:'Graphics' does not contain a constructor that takes 0 arguments
.
是的,这就是我把评论放在那里的原因。在将图形对象传递给新的 SetBackground
方法之前,您必须确定图形对象需要包含的内容。
也许它在您的Object sender
或EventArgs
中的某个位置,来自您的resize_Handler
?
@SabawoonEnayat:现在我想知道您是如何解决图形问题的,请
谢谢哥们。我的问题是别的。我非常感谢您的辛勤工作。以上是关于如何在 C# 中使用带有 sender 和 e 参数的方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章