C#需要帮助将文本值传递给其他表单文本框
C#文本框发送文本值。我有两张表格。表格1和表格2。Form1有一个textbox,form2有一个textbox和一个按钮,我会在form2 textbox上放置一个文本值,当我单击form2按钮时,会发送form2 textbox的值并更改Form1 textbox的值…需要帮助 这就是我所做的我只想总结一下 表单1没有代码,只有文本框1C#需要帮助将文本值传递给其他表单文本框,c#,winforms,C#,Winforms,C#文本框发送文本值。我有两张表格。表格1和表格2。Form1有一个textbox,form2有一个textbox和一个按钮,我会在form2 textbox上放置一个文本值,当我单击form2按钮时,会发送form2 textbox的值并更改Form1 textbox的值…需要帮助 这就是我所做的我只想总结一下 表单1没有代码,只有文本框1 namespace WindowsFormsApplication1 { public partial class Form1 : Form
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Form2 frm2 = new Form2();
frm2.RaiseCustomEvent+=new CustomEventHandler(frm2_RaiseCustomEvent);
frm2.Show(this);
}
void frm2_RaiseCustomEvent(object sender, CustomEventArgs a)
{
textBox1.Text = a.Message;
}
}
}
这是form2按钮中的代码
private void change_Click(object sender, EventArgs e)
{
form1 frm1 = new form();
string test = textbox2.text
frm1.textbox.text = test;
}
我尝试弹出一些消息框来检查值是否通过…到目前为止,值确实通过了,但UI中没有任何更改您可以将Form1中的文本框声明为公共,然后您可以通过进入Form1.textBoxName.propertyName从form2访问它。您可以使用事件: 定义一个接口:
public interface ITextChange
{
event EventHandler SomeTextChanged;
}
然后,让您使用按钮实现此界面,并在按钮单击时触发事件,将文本框中的值作为第一个参数传递:
public partial class Form1 : Form, ITextChange
{
public event EventHandler SomeTextChanged = delegate { };
public Form1 () {}
private void button1_Click(object sender, EventArgs e)
{
SomeTextChanged(textBox1.Text, null);
}
}
将此表单的实例传递给第二个表单,如下所示:
public partial class Form2 : Form
{
public Form2(ITextChange f)
{
InitializeComponent();
f.SomeTextChanged += new EventHandler(f_SomeTextChanged);
}
void f_SomeTextChanged(object sender, EventArgs e)
{
textBox1.Text = sender.ToString();
}
}
var form = new Form2();
form.ShowDialog();
this.TextBox1.Text = form.TextBox1.Text;
因此,在创建Form2时,需要传递Form1的实例:
Form2 f = new Form2(form1);
一旦按下按钮,第二个表单上的文本框将自动获取值
备注:有关更多信息,请参见假设您作为
Form1
的子级创建Form2
(从Form1
中,执行类似Form2 from=new Form2()的操作);
,您可以从父窗体中访问子窗体的任何公共属性。因此,只需确保将文本框的可访问性设置为公共
,然后执行以下操作:
public partial class Form2 : Form
{
public Form2(ITextChange f)
{
InitializeComponent();
f.SomeTextChanged += new EventHandler(f_SomeTextChanged);
}
void f_SomeTextChanged(object sender, EventArgs e)
{
textBox1.Text = sender.ToString();
}
}
var form = new Form2();
form.ShowDialog();
this.TextBox1.Text = form.TextBox1.Text;
你可以通过公开文本框来了解Form2中的Form1。但在我看来,正确的方法是创建一个自定义事件处理程序,在Form2中订阅它,并将文本作为eventarg传递。代码改编自此
表格1
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Form2 frm2 = new Form2();
frm2.RaiseCustomEvent+=new CustomEventHandler(frm2_RaiseCustomEvent);
frm2.Show(this);
}
void frm2_RaiseCustomEvent(object sender, CustomEventArgs a)
{
textBox1.Text = a.Message;
}
}
}
表格2
namespace WindowsFormsApplication1
{
public delegate void CustomEventHandler(object sender, CustomEventArgs a);
public partial class Form2 : Form
{
public event CustomEventHandler RaiseCustomEvent;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
RaiseCustomEvent(this, new CustomEventArgs(textBox1.Text));
}
}
public class CustomEventArgs : EventArgs
{
public CustomEventArgs(string s)
{
msg = s;
}
private string msg;
public string Message
{
get { return msg; }
}
}
}
您可以使用.Tag属性(看看我的问题
简单的方法如下:
您说过form2中的textBox.text将取代form1中的textBox.text,对吗?
在表单2中执行此操作
try
{
private void change_Click(object sender, EventArgs e)
{
form2 frm2 = new form();
frm2.Tag = this.textbox2.text;
frm2.ShowDialog();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
然后在加载表单1时写入此内容
string myText = (string)this.Tag;
this.textbox1.text = myText;
我也有同样的疑问,所以我在互联网上搜索并找到了一种在C#中的表单之间传递变量值的好方法,这很简单。这没什么,只是在第一个表单中分配一个变量,你可以从任何表单访问该变量。我创建了一个关于“如何将值传递到表单”的视频教程
转到下面的链接以查看视频教程。
您的form1.textbox1未更新的原因是您初始化了form1的新实例
form1 frm1 = new form();
因此,要更新屏幕上的form1,需要将其实例注入form2中
form2.Form1=当前Form1状态
希望这能有所帮助。您如何打开每个表单?如果您使用ShowDialog从另一个表单打开表单,您可以引用所有者表单并将其转换为适当的类型(表单1),如果其修改器是公共的,则可以访问文本框。请告诉我们您目前正在做什么。是的。另一个问题是Show()和ShowDialog()的区别是什么?当我试图更改form1文本框并关闭form2时,唯一通过的是值,但我看不到form1文本框(物理)中有任何更改@user974015 ShowDialog以应用程序模式状态打开表单,这意味着在子窗体完成之前,您无法对父窗体执行任何操作。Show只打开另一个窗体,您可以同时使用这两个窗体。您可能已经注意到,下面的所有答案都是完全猜测。这是因为您没有向我们展示您所做的操作到目前为止,我们还无法理解问题发生的背景。如果您“正确传递值,但UI根本没有改变”,那么很可能您正在实例化一个新表单,而不是使用现有表单。在这种情况下,您没有“正确传递值”。这些链接可能会有帮助:还有伙计们..我可以正确地传递值…只是UI根本没有改变…公开控件真的是个坏主意..@user974015然后你需要向我们展示你的代码,我发布的代码确实有效,它将从form2传输文本并更新form1的文本框。如果你无法更新你的textbox然后我们需要查看您正在使用的方法以帮助您。您可以用form2..textbox1.text..RaiseCustomEvent(这个,新的CustomEventArgs(textbox1.text))解释一下吗;@user974015我所做的是创建一个自定义事件args并将其与自定义事件关联。您询问的代码行将引发该事件并将Textbox的Text属性的值分配给自定义事件arg,然后,由于form1在创建frm2时已订阅该事件,因此它将处理该事件并将您的文本从f CustomEventArgs仅显示指向其他资源的链接在大多数情况下很难回答问题。请提取代码中最重要的部分,以说明问题的解决方案。