C# 获取从WinC窗体的另一个窗口返回的值

C# 获取从WinC窗体的另一个窗口返回的值,c#,winforms,C#,Winforms,我有一个网格,用户可以在其中选择行并更改行的日期。 我的问题是我不知道如何在窗口之间传递值。 我的第一个窗口form1有网格,第二个窗口form2是我选择日期的地方: 在上述情况下,应更改所选日期的日期 我有所有的信息来做更新,但我唯一遇到的问题是将选定的日期从第二个窗口传递回第一个窗口 我的做法是: 表格1: private void btn_LaunchChangeInvoiceDate_ItemClick(object sender, ItemClickEventArgs e) {

我有一个网格,用户可以在其中选择行并更改行的日期。 我的问题是我不知道如何在窗口之间传递值。 我的第一个窗口form1有网格,第二个窗口form2是我选择日期的地方:

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

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

我的做法是:

表格1:

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的方法是什么?
我当前的应用程序只是在没有太多信息的情况下卡住了…

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

如果不想使用ShowDialog,则必须使用不同的方法检索值,例如在单击“拾取日期”按钮时Form2上的事件


旁注:我不认为需要在Form2中设置日期格式,只需将SelectedDate属性的类型设置为DateTime,Form1可以按照自己的意愿设置日期格式,而无需解析字符串。

如上所述,您希望使用ShowDialog。然后,您需要检查对话框中的结果并获取所需的数据。下面是一个使用字符串而不是日期的示例,但原理是相同的。这是一种显示对话框和返回数据的更简洁的方式

主要表格1:

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;
            }
        }
    }
}