获取从另一个Window WinForms C#返回的值

时间:2018-02-16 22:06:21

标签: c# winforms

我有一个网格,用户可以在其中选择行并更改行的日期 我的问题是我无法弄清楚如何在窗口之间传递值 我的第一个窗口(form1)有网格,我的第二个窗口(form2)是我选择日期的地方:

enter image description here

在上述情况下,应更改所选日期的日期。

我有更新的所有信息,但我遇到的唯一问题是将所选日期从第二个窗口传递回第一个窗口。

我的方法是:

Form1中:

private void btn_LaunchChangeInvoiceDate_ItemClick(object sender, ItemClickEventArgs e)
{
    DateTime UpdatedDate;
    if(gridView.SelectedRowsCount > 0 )
    {
        Form2 DatePicker = new Form2();
        DatePicker.Show();
        UpdatedDate = DateTime.Parse(DatePicker.SelectedDate);
    }
}

窗体2:

 public String SelectedDate;

    public MonthPicker()
    {
        InitializeComponent();
    }

    private void btn_PickDate_Click(object sender, EventArgs e)
    {
        SelectedDate = dateTimePicker1.Value.ToString("yyyy-MM-dd");           
    }
}

SelectedDate推送到Form1,我的方法是什么? 我当前的应用程序在没有太多信息的情况下卡住了......

2 个答案:

答案 0 :(得分:4)

我认为问题在于您正在使用DatePicker.Show()而不是DatePicker.ShowDialog()。 ShowDialog停止在该行执行的代码,直到表单关闭。 Show将立即继续执行代码。结果是当Form1查看它时,您的SelectedDate为null。

如果您不想使用ShowDialog,则必须使用另一种检索值的方法,例如Form2上的事件,以便单击“选择日期”按钮。

旁注:我没有看到需要在Form2中格式化日期,只是让SelectedDate属性的类型为DateTime,而Form1可以格式化它,但它想要而不是必须解析字符串。

答案 1 :(得分:1)

如上所述,您想使用ShowDialog()。然后,您要检查对话框中的结果并获取所需的数据。下面是使用String而不是Date的示例,但原理是相同的。这是一种显示对话框和返回数据的更简洁方法。

主要表格Form1:

namespace DlgExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();

            // look a good result
            if (form2.ShowDialog() == DialogResult.OK)
            {
                // get the data and put it where you need it
                form1TextBox.Text = form2.myString;
            }

        }
    }
}

被叫对话框Form2

namespace DlgExample
{
    public partial class Form2 : Form
    {
        private String _string = string.Empty;

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // get the data from the control
            _string = form2TextBox.Text;

            // DialogResult.OK result
            DialogResult = System.Windows.Forms.DialogResult.OK;

            // close this dialog
            this.Close();
        }

        // public property
        public String myString
        {
            get
            {
                return _string;
            }
        }
    }
}