2012-11-20 32 views
1

C#文本框发送文本值。情况,我有两种形式。 Form1和Form2。 Form1有一个文本框,form2有一个文本框和一个按钮,我会在form2文本框中放置一个文本值,当我单击form2按钮时,form2文本框的值将被发送并更改form1文本框值....需要帮助。 。C#需要帮助将文本值传递给其他表单文本框

这是香港专业教育学院done..im只是要总结一下

Form1中得到任何代码只是TextBox1的

这是在窗口2个按钮的代码

private void change_Click(object sender, EventArgs e) 
     { 
     form1 frm1 = new form(); 
     string test = textbox2.text 
     frm1.textbox.text = test; 



} 

我尝试了一些弹出消息框,以检查值是否通过...并且到目前为止该值是真的通过但在UI中没有改变

+0

你如何打开每个表单?如果您使用ShowDialog打开另一个,则可以引用所有者窗体并将其转换为适当类型(表单1),并在其修饰符为Public的情况下访问文本框。 – pinkfloydx33

+2

请播下你到目前为止所做的。 – Kiril

+0

是的。另一个问题是Show()和showDialog()的区别是什么?当我试图改变form1文本框并关闭form2唯一的东西是通过值,但我不能看到form1文本框(物理)的任何更改。 – user974015

回答

1

您可以声明Form1中的文本框是公开的,那么您可以访问它从窗口2通过去form1.textBoxName.propertyName

+0

这些链接可能有帮助:http://searchwindevelopment.techtarget.com/answer/In-C-how-can-I-change-the-properties-of另一种形式的控制和http://www.dreamincode.net/forums/topic/181697-how-to-access-controls-of-another-form/ –

+2

这是不是一个好主意,使控制公开... – horgh

+0

伙计..我可以正确地传递价值...它的UI只是没有改变......它是一个坏主意,使控制公开.. – user974015

1

您可以使用事件这样的:

定义一个接口:

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(); 
    } 
} 

所以,当您创建窗体2,您需要通过Form1的一个instanse:只要你按下按钮

Form2 f = new Form2(form1); 

,第二个窗体上的文本框将自动获得价值。

PS:更多信息,请参见Events Tutorial

+0

伙计..我可以正确地传递值...它的UI只是没有改变... – user974015

2

假设您创建Form2Form1(从Form1内的孩子,这样做Form2 from = new Form2();,你可以从内部访问子窗体的任何公共财产。家长因此,只要确保设置TextBoxpublic的普及,以及做这样的事情:

var form = new Form2(); 
form.ShowDialog(); 
this.TextBox1.Text = form.TextBox1.Text; 
+0

伙计们......我可以正确地传递这个值......它只是UI没有改变...... – user974015

0

你可以通过将文本框公众依靠Form2的Form1的知识,但在我看来,正确方法来创建一个自定义事件处理程序,在Form2中订阅它并将该文本作为事件栏传递。代码改编自该MSDN Article

Form1中

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; } 
     } 
    } 
} 
+0

伙计们......我可以正确地传递这个值..它只是UI没有改变... – user974015

+0

@ user974015那么你将需要向我们展示你的代码,我发布的代码doe它将从form2传输文本并更新form1的文本框。如果您无法更新您的文本框,那么我们需要查看您使用的方法以帮助您。 –

+0

可以解释这个在form2 .. textbox1.text .. RaiseCustomEvent(this,new CustomEventArgs(textBox1.Text)); – user974015

0

你可以使用.TAG属性(看看我的问题here 简单的方式做它是这样的: 你说textBox.tex在form2中的t会替换form1中的texBox.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); 
} 

然后写这个,当你加载Form1中

string myText = (string)this.Tag; 
    this.textbox1.text = myText; 
-1

我也有同样的疑问,所以我搜索互联网上发现传递变量值的好方法在C#中的表单之间,我期望的很简单。这不算什么,但要在第一个表单中分配一个变量,并且可以从任何形式访问该变量。我创建了一个关于'如何将值传递给表单'的视频教程

转到以下链接查看视频教程。

Passing Textbox Text to another form in Visual C#

+1

在大多数情况下,只发布到其他资源的链接几乎不能解答问题。请提取说明解决问题的解决方案的代码中最重要的部分。 – Dirk

0

没有更新您的form1.textbox1因为你初始化Form1的一个新实例的原因

form1 frm1 = new form(); 

,因此及时更新你在屏幕上在Form1,你需要得到它的实例注入到form2中。例如,当你显示form2时,你设置了。

form2.Form1 = currentForm1Instance;

希望这会有所帮助。

相关问题