我已将两个日期时间选择器(dtpStartdate和dtpEndDate),两个两个组合框(cmbStartDate和cmbEndDate)和一个单选按钮(rbStartHalfDay)放到Windows窗体中。 然后我想在单击“应用”按钮时传递这些项的值。我已经为此写了代码。
private void btnApply_Click(object sender, EventArgs e)
{
frmLeaveRequestConfirmation frm = new frmLeaveRequestConfirmation(dtpStartdate.Value, dtpEndDate.Value, cmbStartDate.SelectedIndex.ToString(), cmbEndDate.SelectedIndex.ToString() );
frm.ShowDialog();
}
在下一个表单中(frmLeaveRequestConfirmation)我已经编写了以下代码获取的值,这些值通过了前一个表单)
public frmLeaveRequestConfirmation(DateTime SDate, DateTime EDate, string SDFH, string EDFH)
{
InitializeComponent();
lblStartDateInfo.Text = SDate.ToString("dddd, dd MMMM yyyy"); ;
if (SDate == EDate)
{
//some codes are here
}
此代码适用于dateTime选择器和组合框。然后我尝试使用相同的方法传递单选按钮的值。
//表单1(frmLeaveRequest)
private void btnApply_Click(object sender, EventArgs e)
{
frmLeaveRequestConfirmation frm = new frmLeaveRequestConfirmation(dtpStartdate.Value, dtpEndDate.Value, cmbStartDate.SelectedIndex.ToString(), cmbEndDate.SelectedIndex.ToString(), rbStartHalfDay.Checked.ToString() );
frm.ShowDialog();
}
//表格2(frmLeaveRequestConfirmation)
public frmLeaveRequestConfirmation(DateTime SDate, DateTime EDate, string SDFH, string EDFH, string RBHD)
{
InitializeComponent();
lblStartDateInfo.Text = SDate.ToString("dddd, dd MMMM yyyy"); ;
if (SDate == EDate)
{
//some codes are here
}
}
但现在它显示错误。请有人给我正确的代码,用于将单选按钮的值传递给第二个表单。 (我的第二个问题是我无法从我的第二个表单调用单选按钮,即使我将修饰符设置为公共。)
答案 0 :(得分:3)
我的建议是,您应将单选按钮值传递为Boolean
。
frmLeaveRequestConfirmation frm =
new frmLeaveRequestConfirmation(dtpStartdate.Value, dtpEndDate.Value,
cmbStartDate.SelectedIndex.ToString(), cmbEndDate.SelectedIndex.ToString(),
rbStartHalfDay.Checked);
frm.ShowDialog();
以你的第二种形式,
public frmLeaveRequestConfirmation(
DateTime SDate, DateTime EDate, string SDFH, string EDFH, Boolean RBHD)
{
......
答案 1 :(得分:2)
首先,为什么要将单选按钮的已检查标志从bool解析为字符串?有什么缘故吗?如果单选按钮不为空,则喊出它的正确值。
所以你能做的就是这样:
private void btnApply_Click(object sender, EventArgs e)
{
frmLeaveRequestConfirmation frm = new frmLeaveRequestConfirmation(dtpStartdate.Value, dtpEndDate.Value, cmbStartDate.SelectedIndex.ToString(), cmbEndDate.SelectedIndex.ToString(), rbStartHalfDay.Checked );
frm.ShowDialog();
}
以第二种形式:
public frmLeaveRequestConfirmation(DateTime SDate, DateTime EDate, string SDFH, string EDFH, bool RBHD)
{
InitializeComponent();
lblStartDateInfo.Text = SDate.ToString("dddd, dd MMMM yyyy"); ;
if (SDate == EDate)
{
//some codes are here
}
}
对于第二个问题,您是否需要从另一个表单中设置单选按钮?为什么不在frmLeayveRequestConfirmation中添加一个属性来获取frm.ShowDialog()之后的信息?像那样:
public GetButtonIsChecked { get; private set; }
// something like constructor
private void someMethod(bool isChecked)
{
GetButtonIsChecked = isChecked;
}
在另一个你调用表单的类中,你执行此操作:
private void btnApply_Click(object sender, EventArgs e)
{
frmLeaveRequestConfirmation frm = new frmLeaveRequestConfirmation(dtpStartdate.Value, dtpEndDate.Value, cmbStartDate.SelectedIndex.ToString(), cmbEndDate.SelectedIndex.ToString(), rbStartHalfDay.Checked );
frm.ShowDialog();
this.rbStartHalfDay.Checked = frm.GetButtonIsChecked;
}
也许这会解决你的问题:)
答案 2 :(得分:1)
不要使用字符串来传递整数和布尔值。如果您想通知第一个表单发生了什么事情,请将您的第二个表单提升events:
public event EventHandler SomethingHappened;
public frmLeaveRequestConfirmation(DateTime startDate, DateTime endDate,
int startDayIndex, int endDayIndex,
bool isHalfDayStart)
{
InitializeComponent();
lblStartDateInfo.Text = startDate.ToString("dddd, dd MMMM yyyy");
if (startDate == endDate)
{
// some codes are here
}
}
// When something happened (e.g. user clicked a button)
private void SomeButton_Click(object sender, EventArgs e)
{
if (SomethingHappened != null)
SomethingHappened(this, EventArgs.Empty);
}
以这种方式创建表单:
void btnApply_Click(object sender, EventArgs e)
{
frmLeaveRequestConfirmation frm =
new frmLeaveRequestConfirmation(dtpStartdate.Value, dtpEndDate.Value,
cmbStartDate.SelectedIndex,
cmbEndDate.SelectedIndex,
rbStartHalfDay.Checked);
frm.SomethingHappened += RequestConfirmation_SomethingHappened;
frm.ShowDialog();
}
void RequestConfirmation_SomethingHappened(object sender, EventArgs e)
{
// check radiobutton
rbStartHalfDay.Checked = true;
}
注意:使用PascalNames作为类名和方法。使用camelCase作为方法参数名称。
答案 3 :(得分:1)
要在表单之间传输值,可以使用Form的构造函数。 例如,我想将RadioBtn1的布尔值从Form1发送到Form2。
public partial class Form2 (bool Value)
{
//Codes
}
public partial class Form1 ()
{
//Codes
new Form2(RadioBtn1.Checeked).ShowDialog();
}