【问题标题】:Passing value from dialog form to main form [duplicate]将值从对话框表单传递到主表单[重复]
【发布时间】:2011-08-27 02:43:42
【问题描述】:

可能重复:
How do you pass an object from form1 to form2 and back to form1?

我习惯于通过简单地将变量作为参数传递来在 Windows 窗体之间传递变量。 现在我有一个已经打开的表单(我们称之为FormMain)和另一个应该像对话框一样的表单(FormTask)。用户在填写FormTask 上的信息之前无法与主表单交互。 FormTask 只包含一个文本框,这个文本框的值应该返回给FormMain,并作为变量进行跟踪。 FormTask 需要一个参数 exerciseType。当FormTask 打开时,它会检查此参数的值并相应地设置文本框的默认值。这已经奏效了,我只是对如何将我的字符串值返回到已经打开的MainForm 毫无头绪。 这些对话框似乎只能返回DialogResults,这不是我想要的。我也不是太有经验,我宁愿避免摸索着制作自己的自定义对话框。

FormMain:

FormTask formTask = new FormTask(exerciseType);
formOpgaveInvoker.ShowDialog();

FormTask:

private void button1_Click(object sender, EventArgs e)
{
    string opgave = textBoxOpgave.Text;
    // return string value to MainForm here
}

【问题讨论】:

  • 由于键盘前的每个人都已经发布了答案,我自己不会尝试这样做。但请记住,您仍应检查调用ShowDialog 返回的DialogResult 值。您希望允许用户取消(即关闭表单而不输入任何内容)的情况,并且您不想将他们在文本框中输入的任何内容视为实际输入。

标签: c# forms dialog


【解决方案1】:

在 FormTask 中创建公共属性

public string Opgave { get {return textBoxOpgave.Text;}}

并在 ShowDialog() 之后检查它;

FormTask formTask = new FormTask(exerciseType);
formOpgaveInvoer.ShowDialog();
formOpgaveInvoer.Opgave;  // here it is

【讨论】:

  • 感谢您的回答,我现在觉得自己很愚蠢:P
  • FormTask 不会被这样处理。要么调用Dispose(),要么(更好)使用using 块。
  • 像魅力一样工作。
【解决方案2】:

最简单的方法是向表单类添加一个公共属性以返回字符串。

public string opgave
{
    get;
    private set;
}

在对话框关闭时分配给该属性,然后从调用ShowDialog()的代码中读取该属性:

private void button1_Click(object sender, EventArgs e)
{
    opgave = textBoxOpgave.Text;
}

...

FormTask formTask = new FormTask(exerciseType);
formOpgaveInvoker.ShowDialog();
DoSomething(formTask.opgave);

【讨论】:

  • 或者,您可以简单地设置属性并返回textBoxOpgave.Text。节省了大量不相关的代码行。当您显示带有ShowDialog 的表单时,保证不会释放控件,因此您可以准确地读取它们的值。这就是为什么您需要将此类表单的创建包含在 using 语句中。
【解决方案3】:

表单只是普通的类。这意味着,您可以在其中创建属性。
所以:创建一个属性并为其赋值。

【讨论】:

    【解决方案4】:

    将属性添加到FormTask 例如String1 喜欢

    public string String1 {get; set;}
    

    button1_Click为例,设置String1的值,

    您可以在 MainForm 中访问该属性,例如

    FormTask formTask = new FormTask(exerciseType);   
    formOpgaveInvoer.ShowDialog(); 
    string str = formTask.String1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多