如何在 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 senderEventArgs 中的某个位置,来自您的resize_Handler @SabawoonEnayat:现在我想知道您是如何解决图形问题的,请 谢谢哥们。我的问题是别的。我非常感谢您的辛勤工作。

以上是关于如何在 C# 中使用带有 sender 和 e 参数的方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用 FTP 上传文件

如何发送带有变异元音的 Perl Mail::Sender? [复制]

C#学习笔记——事件传参形式

C# :- P/调用签名

c#中如何设置listbox各选项中的字体

C# 面板上带有 DataReader 和 TextBox 控件的Repeater控件