我有两个独立的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循环,因为没有要与之交互的文本框。
有什么想法吗?
答案 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传递给索引器 - 的原因。