将参数从一个winform应用程序发送到另一个winform应用程序并填充文本框

时间:2014-02-07 23:25:19

标签: c# .net winforms textbox

我有两个独立的Winforms应用程序。 Form1有一个文本框和一个按钮。当我单击该按钮时,我想将textbox.text作为命令行参数传递给我的第二个应用程序,然后在Form2上填充另一个文本框。

我现在可以将参数从一个应用程序传递到另一个应用程序,但是,我不确定如何使用Form1中的参数填充Form2中的文本框。

Form1中:

    private void bMassCopy_Click(object sender, EventArgs e)
    {
        string shortcutName = string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.Programs), "\\", "MassFileCopy", "\\", "MassFileCopy", ".appref-ms");
        Process.Start(shortcutName, " " + tHostname.Text.ToString());
    }

窗体2:

    [STAThread]
    static void Main(string[] args)
    {

        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            formMain mainForm = new formMain();
            Application.Run(mainForm);

            if (args.Length > 0)
            {
                foreach (string str in args)
                {
                    mainForm.tWSID.Text = str;
                }
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {                


        }
    }

上面的代码接受了正确的参数,但是,应用程序加载并且未填充文本框。断点似乎表明foreach循环直到Form2关闭后才运行,但是在Form2加载之前我无法运行foreach循环,因为没有要与之交互的文本框。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试填充文本框的代码仅在关闭Form2后运行,因为Application.Run是模态的,并且在窗体关闭之前不会返回。
但是,您可以更改Form2的构造函数以接受字符串作为参数

public class Form2 : Form
{
    public void Form2(string textFromOtherApp)
    {
         InitializeComponent();

         // Change the text only after the InitializeComponent
         tWSID.Text = textFromOtherApp;
    }
}

并从Main方法传递

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
string initValue = (args != null && args.Length > 0 ? args[0] : string.Empty);
formMain mainForm = new formMain(initValue);
Application.Run(mainForm);

答案 1 :(得分:0)

您可以处理Form的Load事件并按如下方式填充TextBox:

private void formMain_Load(object sender, EventArgs e)
{
    if (Environment.GetCommandLineArgs().Length > 1)
    {
        // The first command line argument is the application path
        // The second command line argument is the first argument passed to the application
        tWSID.Text = Environment.GetCommandLineArgs()[1];
    }
}

命令行参数中的第一个参数是Form应用程序的名称,因此我们在上面的代码中使用第二个命令行参数 - 即将1传递给索引器 - 的原因。