Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinForms-将值从一个窗体传递到另一个窗体_C#_Winforms_Textbox - Fatal编程技术网

C# WinForms-将值从一个窗体传递到另一个窗体

C# WinForms-将值从一个窗体传递到另一个窗体,c#,winforms,textbox,C#,Winforms,Textbox,我在WinForms上有一个GUI,里面有一些按钮和文本框。还有一个保存按钮,文本框中的条目将写入csv。到目前为止,这是可行的。现在我想创建第二个表单,并将一些文本框从表单1移动到其中。这也行得通,但我想在Form2中读取Form1中的文本框,但这行不通。下面是代码示例: public void SettingsSave_Click(object sender, EventArgs e) { Proc.setParams(LocationBox.Text, Conver

我在WinForms上有一个GUI,里面有一些按钮和文本框。还有一个保存按钮,文本框中的条目将写入csv。到目前为止,这是可行的。现在我想创建第二个表单,并将一些文本框从表单1移动到其中。这也行得通,但我想在Form2中读取Form1中的文本框,但这行不通。下面是代码示例:

 public void SettingsSave_Click(object sender, EventArgs e)
    {
       Proc.setParams(LocationBox.Text, Convert.ToInt32(nFCBox.Text, usC),SourceFile.Text,Filename.Text,FilesLocation.Text
        Proc.saveCurrentSettings();
    } 

他找不到“LocationBox.Text”,因为它来自“Form1”。当我试图用“Form1 Form1=new Form1();”在button方法中创建对象的新实例时,他告诉我由于安全平面/层,他无法访问它。我尝试将所有内容设置为public,但仍然不起作用

您需要通过构造函数将参数从Form1传递到Form2,因此Form2构造函数并将其保存到Form2内的字段应如下所示

String LocationBoxValue;
public Form2(String locationBoxValue,int fCBoxValue, String sourceFileValue, String filenameValue,String filesLocationValue)
{
this.LocationBoxValue = locationBoxValue; //and do the same for the remaining parameters
}
Form2 dlg=new Form2(LocationBox.Text, Convert.ToInt32(nFCBox.Text, usC),SourceFile.Text,Filename.Text,FilesLocation.Text);
dlg.Show(); //Or ShowDialog()
现在在form1中,当您尝试显示form2时,您的代码应该如下所示

String LocationBoxValue;
public Form2(String locationBoxValue,int fCBoxValue, String sourceFileValue, String filenameValue,String filesLocationValue)
{
this.LocationBoxValue = locationBoxValue; //and do the same for the remaining parameters
}
Form2 dlg=new Form2(LocationBox.Text, Convert.ToInt32(nFCBox.Text, usC),SourceFile.Text,Filename.Text,FilesLocation.Text);
dlg.Show(); //Or ShowDialog()

最后,您可以通过保存的字段直接访问参数

尝试在新表单中创建一个公共方法,该方法将返回LocationBox的值-类似于:
public string GetLocation(){return LocationBox.Text;}
然后您应该能够执行类似于
form1.GetLocation()的操作
仍然不起作用。他找不到“LocationBox.Text”。我尝试在方法之前和方法中创建Form1的新实例,但仍然存在相同的问题。uzi42tmp,NDraskovic,意味着在
Form1
类中创建该方法,但是您仍然需要将对Form1的引用传递到第二个表单-
new
创建
new
实例。有很多答案解释了如何在表单之间传递值,其中相当多的答案位于相关部分中此问题的右侧这似乎是最流行的问题之一;-]令人惊叹的!那有帮助!多谢各位!几个小时前我一直在寻找答案!你可以。。。但是有更好的方法,如果第二个表单上的位置框值发生变化,你会被卡住。我同意你的意见,但这在问题中不是必需的。通过应用相同的概念很容易实现,但是他可以传递对原始形式的引用,而不是传递值,但这取决于他的情况。但它还有一些其他缺陷,比如如果form2从form1读取值并根据该值采取行动,那么值在form2上会发生变化吗??这里有一些商业考虑