C#如何调用带sender和e参数的方法?resize_Handler内调用set_background报错如何处理
解决方案
报错原因
你编写的set_background(null, PaintEventArgs());触发non-invocable member cannot be used like a method错误,是因为实例化PaintEventArgs类时缺少new关键字,语法不合法。就算补全new关键字,你手动构造的PaintEventArgs也没有有效的Graphics绘图对象,绘图逻辑依旧无法正常运行。
推荐实现方式
优先使用该方案:你的set_background本身就是Paint事件的处理方法,resize场景下不需要手动调用该方法,只要触发窗体/控件的重绘逻辑,系统会自动生成合法的PaintEventArgs参数调用set_background,实现代码如下:
private void resize_Handler(object sender, System.EventArgs e) { // 触发重绘,自动调用绑定的Paint事件处理方法 this.Invalidate(); }
该方案符合WinForm的绘图机制,兼容系统默认的双缓冲优化,不会出现resize时画面闪烁的问题。
手动调用兼容方案(不推荐)
如果你确实需要直接调用set_background方法,需要补全new关键字,同时手动创建有效的绘图上下文对象,代码如下:
private void resize_Handler(object sender, System.EventArgs e) { // 手动创建绘图对象,using语句会自动释放资源 using (Graphics g = this.CreateGraphics()) { set_background(null, new PaintEventArgs(g, this.ClientRectangle)); } }
该方案跳过了系统默认的重绘优化逻辑,resize时大概率会出现画面闪烁,仅做特殊场景下的参考。
内容的提问来源于stack exchange,提问作者Sabawoon Enayat
相关产品推荐
相关产品推荐

