我有两个表格.说FormA,FormB.
从FormA我使用frmB.Show()调用FormB ;
在FormB中,我有两个文本框和一个组合框控件.假设用户在这两个文本框中输入一些数据,并从Form2中的组合框中选择一个项目,然后单击确定按钮.
点击后我想要那些文本框用户输入的值,组合框选择项目值返回到FormA.
我如何使用C#实现这一目标.
小智 6
我接近简单的方式..点缀小装饰..
在表单类中创建公共变量即
public string passVariable1 ="";
如果您有文本框转到属性,然后单击闪电并双击空TextChanged事件处理程序.这将在代码中创建一个代码片段,当文本框的内容发生变化时执行该代码片段.在此代码块中,将文本框的内容分配给相应的公共变量.
即我的公共变量是
public string issue ="";
private void txtIssue_TextChanged(object sender,EventArgs e){issue = txtIssue.Text; }
添加一个按钮并为此按钮创建一个单击事件(只需双击设计窗格中的按钮).在点击事件代码块中,将dilog结果设置为ok并隐藏
this.DialogResult = DialogResult.OK;
this.Hide();
在父窗口代码中检查对话框结果,并从子窗体的公共变量中获取窗体数据
Run Code Online (Sandbox Code Playgroud)if (f.ShowDialog() == DialogResult.OK) { string b = f.issue; string e = f.year; string f = f.month; };
在您描述的情况下,我可能会打电话frmB.ShowDialog()而不是frmB.Show()。
// Inside FormA open frmB as a modal dialog waiting for
// OK or Cancel result using the following statement
if (frmB.ShowDialog() == DialogResult.OK)
{
// Retrieve selected values from frmB here (while frmB is still not disposed)
}
Run Code Online (Sandbox Code Playgroud)
的好处ShowDialog()是您:
注意:在设计frmB时,必须将DialogResult“确定”按钮控件的属性设置为DialogResult.OK,以便在按下此按钮时表单返回正确的DialogResult(或者也可以this.DialogResult在“确定”按钮的Click事件处理程序中进行设置)
或者,您可以将一个对象从 FormA 传递到 FormB 并将其属性绑定到 FormB 中的控件。如果您希望在单击“确定”按钮时通知 FormA,您可以在数据容器类中声明一个事件,在 FormA 中订阅该事件并从 FormB 触发该事件。
是 DataContainer 您定义的某个类
public class DataContainer
{
public event EventHandler AcceptedChanges;
protected virtual void OnAcceptedChanges()
{
if ((this.AcceptedChanges != null))
{
this.AcceptedChanges(this, EventArgs.Empty);
}
}
public void AcceptChanges()
{
this.OnAcceptedChanges();
}
public string Text1 { get; set; }
public string Text2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在表格A中:
private void button4_Click(object sender, EventArgs e)
{
DataContainer data = new DataContainer();
data.Text1 = "text1";
data.Text1 = "text2";
Form2 frm = new Form2();
frm.Data = new DataContainer();
data.AcceptedChanges += new EventHandler(data_AcceptedChanges);
frm.Show();
}
void data_AcceptedChanges(object sender, EventArgs e)
{
// your code here
}
Run Code Online (Sandbox Code Playgroud)
并在表格 B 中:
public DataContainer Data { get; set; }
private void Form2_Load(object sender, EventArgs e)
{
textBox1.DataBindings.Add(new Binding("Text", Data, "Text1"));
textBox2.DataBindings.Add(new Binding("Text", Data, "Text2"));
}
private void button1_Click(object sender, EventArgs e)
{
Data.AcceptChanges();
}
Run Code Online (Sandbox Code Playgroud)
您还应该在 DataContainer 类上实现 INotifyPropertyChanging 和 INotifyPropertyChanged 以很好地使用绑定。
| 归档时间: |
|
| 查看次数: |
17103 次 |
| 最近记录: |