C# 将值从一个窗体发送到另一个窗体
我想在两种形式(c#)之间传递值。我怎么做 我有两张表格:表格一和表格二 Form1包含一个按钮。当我点击该按钮时,Form2应打开,Form1应处于非活动模式(即不可选择) Form2包含一个文本框和一个提交按钮。当我在Form2的文本框中键入任何消息并单击submit按钮时,Form2应关闭,Form1应突出显示Submited值C# 将值从一个窗体发送到另一个窗体,c#,winforms,modal-dialog,C#,Winforms,Modal Dialog,我想在两种形式(c#)之间传递值。我怎么做 我有两张表格:表格一和表格二 Form1包含一个按钮。当我点击该按钮时,Form2应打开,Form1应处于非活动模式(即不可选择) Form2包含一个文本框和一个提交按钮。当我在Form2的文本框中键入任何消息并单击submit按钮时,Form2应关闭,Form1应突出显示Submited值 我怎么做?有人能帮我举个简单的例子吗。有几种解决方案,但这是我倾向于使用的模式 // Form 1 // inside the button click even
我怎么做?有人能帮我举个简单的例子吗。有几种解决方案,但这是我倾向于使用的模式
// Form 1
// inside the button click event
using(Form2 form2 = new Form2())
{
if(form2.ShowDialog() == DialogResult.OK)
{
someControlOnForm1.Text = form2.TheValue;
}
}
而且
// Inside Form2
// Create a public property to serve the value
public string TheValue
{
get { return someTextBoxOnForm2.Text; }
}
在form1中声明字符串
公共字符串TextBoxString
在form1中,单击事件添加
private void button1_Click(object sender, EventArgs e)
{
Form1 newform = new Form1();
newform = this;
this.Hide();
MySecform = new Form2(ref newform);
MySecform.Show();
}
在form2构造函数中
public Form2(ref Form1 form1handel)
{
firstformRef = form1handel;
InitializeComponent();
}
在form2板条箱变量Form1 firstformRef中
private void Submitt_Click(object sender, EventArgs e)
{
firstformRef.TextBoxString = textBox1.Text;
this.Close();
firstformRef.Show();
}
我参与过各种winform项目,随着应用程序变得越来越复杂(它们之间的对话和交互越来越多),我开始使用一些事件系统来帮助我,因为手动打开和关闭窗口的管理将很难维护和进一步开发 我已经在我的应用程序中使用了,它有一个,但在您的情况下可能有点过头了:)您可以在更简单的应用程序中使用它
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2(textBox1.Text);
frm2.Show();
}
表格1代码:
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
MessageBox.Show("Form1 Message :"+Form2.t.Text); //can put label also in form 1 to show the value got from form2
}
表格2代码:
public Form2()
{
InitializeComponent();
t = textBox1; //Initialize with static textbox
}
public static TextBox t=new TextBox(); //make static to get the same value as inserted
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
它起作用了 定义属性
public static class ControlID {
public static string TextData { get; set; }
}
在表格2中
private void button1_Click(object sender, EventArgs e)
{
ControlID.TextData = txtTextData.Text;
}
在form1
和form3
中获取数据
private void button1_Click(object sender, EventArgs e)
{
string text= ControlID.TextData;
}
如何将值从表单传递到另一表单 1.)转到Form2,然后双击它。在“代码”处键入此代码
public Form2(string v)
{
InitializeComponent();
textBox1.Text = v;
}
2.)转到Form1,然后双击它。在“代码”处键入此代码。
//在Form1中的命令按钮上
private void button1_Click(object sender, EventArgs e)
{
Form2 F2 = new Form2(textBox1.Text);
F2.Show();
}
可以将Form1的文本框作为参数传递,如下所示: 在表单1按钮处理程序上:
private void button2_Click(object sender, EventArgs e)
{
Form2 newWindow = new Form2(textBoxForReturnValue);
newWindow.Show();
}
在表格2上
public static TextBox textBox2; // class atribute
public Form2(TextBox textBoxForReturnValue)
{
textBox2= textBoxForReturnValue;
}
private void btnClose_Click(object sender, EventArgs e)
{
textBox2.Text = dataGridView1.CurrentCell.Value.ToString().Trim();
this.Close();
}
在
form1
public string getdata;
form2 frm= new form2();
this.hide();
form2.show();
在form1的按钮中
public string getdata;
form2 frm= new form2();
this.hide();
form2.show();
要将数据发送到表单1
,您可以尝试任何事件以及该事件中的后续代码
form1 frm= new form1();
form1.getdata="some string to be sent to form1";
现在,在关闭
form2
并打开form1
之后,您可以在getdata
字符串中使用返回的数据。经过一系列努力,我终于找到了一个稳定的答案。它很有魅力
您只需在一个表单中将变量声明为公共静态数据类型“variableName”
,并将值分配给该变量,该变量要传递给另一个表单,并直接使用表单名称在另一个表单中调用该变量(不要创建此表单的对象,因为可以直接访问静态变量)并访问此变量值
例如,
表格1
public static int quantity;
quantity=TextBox1.text; \\Value which you want to pass
表格2
TextBox2.Text=Form1.quantity;\\ Data will be placed in TextBox2
在这段代码中,您将文本传递给Form2。Form2在textBox1中显示该文本。 用户在textBox1中键入新文本并按下submit按钮。 Form1获取该文本并将其显示在Form1上的文本框中
public class Form2 : Form
{
private string oldText;
public Form2(string newText):this()
{
oldText = newText;
btnSubmit.DialogResult = DialogResult.OK;
}
private void Form2_Load(object sender, EventArgs e)
{
textBox1.Text = oldText;
}
public string getText()
{
return textBox1.Text;
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
DialogResult = System.Windows.Forms.DialogResult.OK;
}
}
}
这是Form1代码:
public class Form1:Form
{
using (Form2 dialogForm = new Form2("old text to show in Form2"))
{
DialogResult dr = dialogForm.ShowDialog(this);
if (dr == DialogResult.OK)
{
tbSubmittedText = dialogForm.getText();
}
dialogForm.Close();
}
}
这很简单。
假设您有两个窗体Form1和Form2,您想将textbox1的记录从Form1发送到Form2,并在Form2的label1中显示该记录;
然后在Form2中创建一个名为label1的标签,转到label1的属性并设置'Modifiers'=public,在Form1中创建一个id为textBox1的文本框和一个名为submit的按钮,然后在按钮单击事件上编写以下代码
button1_Click(object sender, EventArgs e)
{
Form2 obj=new Form2();
obj.label1.text=textBox1.text.ToString();
obj.show();
}
就这样。。。
通过这种方式,您可以将数据集记录绑定到另一个表单的datagridview……构造函数是在表单或Gui对象之间传递数据的最佳方式,您可以这样做。 在form1单击按钮中,您应该具有:
Form1.Enable = false;
Form2 f = new Form2();
f.ShowDialog();
在表单2中,当用户单击按钮时,应该有如下或类似的代码:
this.Close();
Form1 form = new Form1(textBox1.Text)
form.Show();
进入表单1的表单加载后,您可以添加代码,以便在从构造函数获取值时执行任何操作。如果愿意,您可以使用不同的方法
// -------- IN THE MAIN FORM --------
// CALLING THE CHILD FORM IN YOUR CODE LOOKS LIKE THIS
Options frmOptions = new Options(UpdateSettings);
frmOptions.Show();
// YOUR FUNCTION IN THE MAIN FORM TO BE EXECUTED
public void UpdateSettings(string data)
{
// DO YOUR STUFF HERE
}
// -------- IN THE CHILD FORM --------
Action<string> UpdateSettings = null;
// IN THE CHILD FORMS CONSTRUCTOR
public Options(Action<string> UpdateSettings)
{
InitializeComponent();
this.UpdateSettings = UpdateSettings;
}
private void btnUpdate_Click(object sender, EventArgs e)
{
// CALLING THE CALLBACK FUNCTION
if (UpdateSettings != null)
UpdateSettings("some data");
}
我提供了一个类似问题的答案好的,
Form1
有一个文本框,首先您必须在textbox属性中将这个Form1
textbox设置为public
代码格式1:
Public button1_click()
{
Form2 secondForm = new Form2(this);
secondForm.Show();
}
Private Form1 _firstForm;
Public Form2(Form1 firstForm)
{
_firstForm = firstForm:
}
Public button_click()
{
_firstForm.textBox.text=label1.text;
This.Close();
}
在构造函数中将Form1
作为this
传递
代码格式2:
Public button1_click()
{
Form2 secondForm = new Form2(this);
secondForm.Show();
}
Private Form1 _firstForm;
Public Form2(Form1 firstForm)
{
_firstForm = firstForm:
}
Public button_click()
{
_firstForm.textBox.text=label1.text;
This.Close();
}
你可以用这个
Form1按钮1单击
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
this.Hide();
frm2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
info = textBox1.Text;
this.Hide();
BeginInvoke(new MethodInvoker(() =>
{
Gogo();
}));
}
public void Gogo()
{
Form1 frm = new Form1();
frm.Show();
frm.Text = info;
}
并将其添加到表单2中
public string info = "";
表单2按钮1单击
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
this.Hide();
frm2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
info = textBox1.Text;
this.Hide();
BeginInvoke(new MethodInvoker(() =>
{
Gogo();
}));
}
public void Gogo()
{
Form1 frm = new Form1();
frm.Show();
frm.Text = info;
}
如果将窗体中控件的Modifiers属性更改为Public,则其他窗体可以访问该控件。 f、 e:
使用公共事件如何 我会这样做
public class Form2
{
public event Action<string> SomethingCompleted;
private void Submit_Click(object sender, EventArgs e)
{
SomethingCompleted?.Invoke(txtData.Text);
this.Close();
}
}
private void btnOpenForm2_Click(object sender, EventArgs e)
{
using (var frm = new Form2())
{
frm.SomethingCompleted += text => {
this.txtData.Text = text;
};
frm.ShowDialog();
}
}
然后,当Form2关闭时,Form1可以从Form2获取文本
谢谢。//表格1
公共静态字符串Username=Me;
//在表格2的加载块中
字符串_UserName=Form1.UserName;
我认为这是坏的代码行为。这很好。我也会使用这个模式,我认为它不是“行为”,但是在使用这个模式之前要考虑安全性。(但是,简单的例子+ 1)也不要忘记,你还需要有Frave2而不是Fave2.Cuffe();“DialogResult=DialogResult.OK;”或者它不会检测到表单已打开。我已经测试了这段代码,如果我们不调用Form2的默认构造函数,PublicForm2(字符串qs):this(){}
表单不会很好地显示。这是我使用的选项,对我来说效果很好!你有任何例子吗?为什么要创建一个新的表单1
?为什么不将这个传递给表单2
构造函数?+1对于事件,它们的伸缩性很好。但是,你实际将值存储在哪里?静态类非常简单,但这接近于使用globa