在C#中返回Windows窗体之间的结果
我有两个Windows窗体(MyApp,Generator),我需要从MyApp调用Generator
Form gen = new Generator(); gen.Show(); string result = gen.IDontKnowWhatToDoHere();
我的Generator.cs表单有三个TextBox和一个Button Ok,所以当用户在三个TextBox中键入一些文本时,单击Ok我想在这三个TextBox中输入Text。
你有什么想法我能做到这一点吗?
谢谢。
class Generator : Form { public string Text1 { get; private set; } void ok_Click (object sender, EventArgs) { this.Text1 = txt1.Text; ... this.Close(); } } Form gen = new Generator(); gen.ShowDialog(); string text1 = gen.Text1; ...
class TextInfo { public string Text1 { get; set; } ... } class Generator : Form { public TextInfo Textinfo { get; private set; } public Generator(TextInfo info) { this.TextInfo = info; } void ok_Click (object sender, EventArgs) { this.TextInfo.Text1 = txt1.Text; ... this.Close(); } } TextInfo info = new TextInfo(); Form gen = new Generator(info); gen.ShowDialog(); string text1 = info.Text1;
我通常使用这种模式:
TResult result = Generator.AskResult(); class Generator : Form { // set this result appropriately private TResult Result { get; set; } public static TResult AskResult() { var form = new Generator(); form.ShowDialog(); return form.Result; // or fetch a control's value directly } }
这使得它在单个语句中工作,类似于MessageBox,并且不需要公开任何控件。 您还可以将任何其他数据作为参数包含在静态方法中,并将它们传递给表单的构造函数或相应地设置属性。
另一个好处包括,如果需要,可以重用表单的实例。
如果您需要来自无模态表单的数据,则应使用事件或其他通知模式。
class OkPressedEventArgs : EventArgs { public OkPressedEventArgs(string text1, string text2, string text3) { Text1 = text1; Text2 = text2; Text3 = text3; } public string Text1 {get;private set;} public string Text2 {get;private set;} public string Text3 {get;private set;} } class SourceForm : Form { public event EventHandler OkPressed; private void OnOkPressed() { if(OkPressed != null) { OkPressed(this, new OkPressedEventArgs(textBox1.Text, textBox2.Text, textBox2.Text); } } private void okButton_Click(object source, EventArgs e) { OnOkPressed(); } } class TargetClass { void ShowFormMethod() { var form = new SourceForm(); form.OkPressed += OkPressedHandler; form.Show(); } private void OkPressedHandler(object source, OkPressedEventArgs e) { // process form data here! } }
Form gen = new Generator(); gen.ShowDialog(); string result = gen.IDontKnowWhatToDoHere();
但我认为更有效的是创建代表。
IF Generator是一个表单,因此它inheritance自Form,将行更改为:
Generator gen = new Generator(); gen.Show(); string result = gen.SomePublicVariableOrProperty;
我想你可以尝试将Current Form实例作为参数传递给Generator
表单的构造函数。
在单击事件后填写Textbox
一旦在构造函数中传递的实例的帮助下将其分配给主窗体中的属性。
Form gen = new Generator(this); gen.Show(); public Generator(Form F1) { InitializeComponent(); form1 = F1 as ParentForm; // now you have parent reference }
按钮单击Generator
表单
form1.Somproperty
分配值
希望这可以帮助