如何将单选按钮的值传递给另一个表单?

时间:2014-01-17 07:49:48

标签: c# winforms

我已将两个日期时间选择器(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                
        }

}

但现在它显示错误。请有人给我正确的代码,用于将单选按钮的值传递给第二个表单。 (我的第二个问题是我无法从我的第二个表单调用单选按钮,即使我将修饰符设置为公共。)

4 个答案:

答案 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();
     }
相关问题