我有一个网格,用户可以在其中选择行并更改行的日期 我的问题是我无法弄清楚如何在窗口之间传递值 我的第一个窗口(form1)有网格,我的第二个窗口(form2)是我选择日期的地方:
在上述情况下,应更改所选日期的日期。
我有更新的所有信息,但我遇到的唯一问题是将所选日期从第二个窗口传递回第一个窗口。
我的方法是:
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
,我的方法是什么?
我当前的应用程序在没有太多信息的情况下卡住了......
答案 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;
}
}
}
}