2014-01-17 102 views
0

我已經把兩個日期時間選擇器(dtpStartdate和dtpEndDate),兩個兩個組合框(cmbStartDate和cmbEndDate)和一個單選按鈕(rbStartHalfDay)到一個窗體。 然後我想在點擊「應用」按鈕時傳遞這些項目的值。我已經爲此編寫了代碼。如何將單選按鈕的值傳遞給另一個表單?

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    

     } 

此代碼工作的罰款對於日期時間採摘和組合框。然後我嘗試使用相同的方法傳遞單選按鈕的值。

//形式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     
     } 

}

但現在它顯示了一個錯誤。請有人給我正確的代碼,將單選按鈕的值傳遞給第二種形式。 (我的第二個問題是我不能從我的第二個表格調用單選按鈕,即使我將修改器設置爲公開。)

+1

什麼是錯誤?你想得到「真/假」作爲「字符串」? – zey

+0

什麼是錯誤?至於你的第二個問題,將其標記爲「靜態」,儘管通常不會使控件處於靜態。 – Abhinav

回答

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) 
{ 
    ...... 
+0

謝謝。現在它的工作很好。謝謝你,每個人都很快回復我。 :) –

+0

歡迎您:) – zey

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作爲方法參數名稱。

+0

備註 - 如果您需要傳遞一些事件數據,那麼您可以使用'EventHandler '委託並創建自定義EventArgs類來傳遞數據。或者你可以簡單地使用'Action '代表事件。例如。 '公共事件動作 SomethingHappened;'將整數值傳遞給事件處理程序 –

+1

謝謝。現在它的工作很好。謝謝你,每個人都很快回復我。 :) –

+1

@ThilinaSandunsiri welcome :)另一個說明 - 而不是通過選定的索引我認爲你需要通過選定的價值,這使得第二種形式更有意義 –

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

和INT wherer你叫你做這個形式的其他類:

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

也許這將解決您的問題,在所有:)

1

要transfering形式之間的值你可以使用Form的構造函數。 例如,我想將Form1的RadioBtn1的布爾值發送給Form2。

public partial class Form2 (bool Value) 
    { 
     //Codes 
    } 

    public partial class Form1() 
    { 
     //Codes 

     new Form2(RadioBtn1.Checeked).ShowDialog(); 
    } 
+0

Thanks @Hamed Shams –

相關問題