C#在按钮事件中调用多个点击方法报CS7036错误如何解决?
报错原因
你遇到的CS7036错误是因为TestButton、DuckDuckGo_Click这两个方法是按钮点击事件的回调方法,定义时要求必须传入object sender(事件触发源)和EventArgs e(事件参数)两个参数,你在SearchAll_Click中直接调用这两个方法时没有传入对应参数,所以触发参数不匹配的报错。
解决方式
方案1:快速修复(适合小项目临时使用)
因为你的两个事件处理方法里根本没有用到sender和e这两个参数,直接传入无意义的占位参数即可,修改SearchAll_Click的代码如下:
private void SearchAll_Click(object sender, EventArgs e) { // 优化判断逻辑,避免用户输入空格的情况绕过校验 if (string.IsNullOrWhiteSpace(GoogleTextBox.Text) && string.IsNullOrWhiteSpace(DDGTextBox.Text)) { MessageBox.Show("Please enter search terms."); } else { // 传入占位参数即可正常调用 TestButton(null, EventArgs.Empty); DuckDuckGo_Click(null, EventArgs.Empty); } }
方案2:规范写法(推荐,可维护性更高)
不要直接调用事件处理方法,把核心的搜索逻辑抽离为独立的公用方法,后续不管是单个按钮触发还是批量搜索都可以直接调用,修改后的完整逻辑如下:
- 先抽离两个搜索引擎的搜索逻辑为独立方法:
private void SearchGoogle() { Process proc = new Process(); proc.StartInfo.UseShellExecute = true; proc.StartInfo.FileName = "https://google.ca/search?q=" + GoogleTextBox.Text; proc.Start(); } private void SearchDuckDuckGo() { Process proc = new Process(); proc.StartInfo.UseShellExecute = true; proc.StartInfo.FileName = "https://duckduckgo.com/?q=" + DDGTextBox.Text; proc.Start(); }
- 原有的事件处理方法改为调用公用方法:
public void TestButton(object sender, EventArgs e) { SearchGoogle(); } public void DuckDuckGo_Click(object sender, EventArgs e) { SearchDuckDuckGo(); } private void SearchAll_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(GoogleTextBox.Text) && string.IsNullOrWhiteSpace(DDGTextBox.Text)) { MessageBox.Show("Please enter search terms."); return; } SearchGoogle(); SearchDuckDuckGo(); }
补充说明:如果你的项目是基于C# 9以下版本开发,需要把代码里的Process proc = new();改为Process proc = new Process();避免语法报错。
内容的提问来源于stack exchange,提问作者Brad
相关产品推荐
相关产品推荐

