Jez*_*ark 175 .net c# parameter-passing winforms
我有一个主窗体(让我们称之为frmHireQuote),它是主MDI窗体(frmMainMDI)的子窗口,当单击一个按钮时,它通过ShowDialog()显示另一个窗体(frmImportContact).
当用户在frmImportContact上单击"确定"时,我想将一些字符串变量传递回frmHireQuote上的某些文本框.
请注意,可能有多个frmHireQuote实例,显然重要的是我回到调用此frmImportContact实例的实例.
这样做的最佳方法是什么?
Ric*_*end 342
像这样在子表单上创建一些公共属性
public string ReturnValue1 {get;set;}
public string ReturnValue2 {get;set;}
Run Code Online (Sandbox Code Playgroud)
然后在你的子表单中设置 ok按钮单击处理程序
private void btnOk_Click(object sender,EventArgs e)
{
this.ReturnValue1 = "Something";
this.ReturnValue2 = DateTime.Now.ToString(); //example
this.DialogResult = DialogResult.OK;
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
然后在你的frmHireQuote表单中,当你打开子表单时
using (var form = new frmImportContact())
{
var result = form.ShowDialog();
if (result == DialogResult.OK)
{
string val = form.ReturnValue1; //values preserved after close
string dateString = form.ReturnValue2;
//Do something here with these values
//for example
this.txtSomething.Text = val;
}
}
Run Code Online (Sandbox Code Playgroud)
另外如果您希望取消子表单,只需在表单中添加一个按钮并将其DialogResult设置为Cancel
,您也可以将表单的CancelButton属性设置为所述按钮 - 这将使退出键能够取消形式.
GvS*_*GvS 14
我通常在表单/对话框上创建一个静态方法,我可以调用它.这将返回成功(确定按钮)或失败,以及需要填写的值.
public class ResultFromFrmMain {
public DialogResult Result { get; set; }
public string Field1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并在表格上:
public static ResultFromFrmMain Execute() {
using (var f = new frmMain()) {
var result = new ResultFromFrmMain();
result.Result = f.ShowDialog();
if (result.Result == DialogResult.OK) {
// fill other values
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
打电话给你的表格;
public void MyEventToCallForm() {
var result = frmMain.Execute();
if (result.Result == DialogResult.OK) {
myTextBox.Text = result.Field1; // or something like that
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
发现这个代码的另一个小问题...或者至少当我试图实现它时它是有问题的.
frmMain中的按钮没有返回兼容值,使用VS2010我添加了以下内容,一切开始正常.
public static ResultFromFrmMain Execute() {
using (var f = new frmMain()) {
f.buttonOK.DialogResult = DialogResult.OK;
f.buttonCancel.DialogResult = DialogResult.Cancel;
var result = new ResultFromFrmMain();
result.Result = f.ShowDialog();
if (result.Result == DialogResult.OK) {
// fill other values
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
添加两个按钮值后,对话框工作得很好!谢谢你的例子,它确实有帮助.
归档时间: |
|
查看次数: |
225846 次 |
最近记录: |