2014-01-17 5 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) Я написал следующий код получить значения Wich мимо предыдущей формы)

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     
     } 

}

Но теперь он показывает ошибку. пожалуйста, кто-нибудь даст мне правильный код для передачи значения переключателя во вторую форму. (Моя вторая проблема заключается в том, что я не могу позвонить на радиокнопку из моей второй формы, даже если я установил модификатор как общедоступный.)

+1

Какая ошибка? вы хотите получить «True/False» как «String»? – 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 ' делегат для события. Например. 'public event Действие SomethingHappened;' передаст целочисленное значение обработчику события –

+1

Спасибо. Теперь его работы прекрасны. Спасибо и каждому, кто быстро ответил мне. :) –

+1

@ThilinaSandunsiri приветствую :) еще одно примечание - вместо передачи выбранного индекса я думаю, вам нужно передать выбранное значение, что имеет смысл для второй формы. –

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

Для вашего второго вопроса, вам нужно установить переключатель от другого форме? Почему бы вам не добавить свойство для получения информации после frm.ShowDialog() из frmLeayveRequestConfirmation?Как что:

public GetButtonIsChecked { get; private set; } 
// something like constructor 
private void someMethod(bool isChecked) 
{ 
    GetButtonIsChecked = isChecked; 
} 

И ИНТ другой класс 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

Для перенося значения между формами вы можете использовать конструктор Формы. Например, я хочу отправить логическое значение RadioBtn1 из Form1 в Form2.

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

    public partial class Form1() 
    { 
     //Codes 

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

Спасибо @ Хамед Шамс –

Смежные вопросы