如何在WinForms C#应用程序中使用来自另一个方法的变量

dldeef67  于 2022-11-25  发布在  C#
关注(0)|答案(2)|浏览(186)

我正在尝试创建一个用C#编写的简单WinForms应用程序,该应用程序:
1.从文字方块取得使用者输入。
1.使用该文本框中的数据,并将其存储在一个user_command变量中,然后在一个方法中使用该变量,该方法在windows cmd中运行该变量中的字符串。
例如:我在文本框中输入“calc.exe”,然后程序将其传递给cmd,从而打开计算器。
我不知道如何使用该文本框中数据并将其放入System.Diagnostics.Process.Start("CMD.exe", user_command);
我将离开下面的所有代码:

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace gui_1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void button1_Click(object sender, EventArgs e)
        {
            string user_command = textBox1.Text;

        }

        private void textBox1_TextChanged(object sender, EventArgs e, string user_command)
        {
            System.Diagnostics.Process.Start("CMD.exe", user_command);
        }
    }
}

我得到的错误是:

Error   CS0123  No overload for 'textBox1_TextChanged' matches delegate 'EventHandler'  gui_1
acruukt9

acruukt91#

这里的问题是您在textBox1_TextChange事件处理程序上放置了第三个参数,这导致了错误。
我建议您将System.Diagnostics.Process.Start("CMD.exe", user_command);放在button1_Click事件上,并删除textBox1_TextChange上的第三个参数。当您单击button1时,它将运行CMD.exe,并将user_command作为参数。

namespace gui_1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void button1_Click(object sender, EventArgs e)
        {
            string user_command = textBox1.Text;
            System.Diagnostics.Process.Start("CMD.exe", user_command);
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
        }
    }
}

编辑:
正在执行不同的进程与参数.尝试键入在您的textbox1之前点击这button1 c:\test.txt .
这将尝试打开驱动器c:上的test. txt文件并询问您是否要创建该文件(如果该文件不存在)。

public void button1_Click(object sender, EventArgs e)
    {
        string user_command = textBox1.Text;
        System.Diagnostics.Process.Start("notepad.exe", user_command);
    }

编辑2:
执行CMD.exe以执行该参数。
/c参数将在启动CMD.exe时执行在textbox1中输入的参数

public void button1_Click(object sender, EventArgs e)
    {
        string user_command = textBox1.Text;
        System.Diagnostics.Process.Start("CMD.exe", "/c " + user_command);
    }
pkwftd7m

pkwftd7m2#

eventargs(e)应该包含复选框中的值。放置一个断点并检查它。我相信你会在那里找到文本。
删除第三个参数以再次开始匹配重载!
我希望这段代码是出于教育目的,因为它将在运行它的服务器的安全性上打开一个巨大的缺口。

相关问题