У меня две формы (Form1 и Form2).

Form1 имеет некоторые другие элементы управления, которые сохраняются в базе данных после заполнения всех полей. Он также имеет кнопку УДАЛИТЬ, где вы можете удалить искомую информацию из базы данных, и кнопку «Доступные комнаты», при нажатии на которую загружается Form2.

Form2 имеет ряд кнопок (незанятые комнаты), из которых я могу выбирать. Теперь моя проблема в том, как оставить эту выбранную кнопку (например: 101) на Form2 отключенной, когда я нажимаю «Доступные комнаты» во второй раз или в любой другой день, а также оставлять любую другую выбранную кнопку (например, .: 102) отключается при следующей загрузке Form2 и т. Д.

Чтобы прояснить, я хочу, чтобы отключенная кнопка на Form2 была активна, только когда я нажимаю кнопку УДАЛИТЬ на форме 1. Но это я не мог сделать.

c#
0
Moni 5 Сен 2016 в 18:13

3 ответа

Лучший ответ

Использовать событие загрузки формы - https://msdn.microsoft.com/en-us/library/system.windows.forms.form.load (v = vs.110) .aspx

Когда вы загружаете Форму 2, прочтите базу данных. Вы уже знаете, в каком состоянии должна быть отключена кнопка для комнаты. Например, для простоты предположим, что вы можете считывать столбец базы данных в логическое значение C # (скажем, unAvailable) и на основе этого принимать решение, доступна ли комната. Итак, в вашей загрузке формы 2 (обработчик события загрузки формы) должно быть условие вроде -

Form_Load(System.Object sender, 
System.EventArgs e)
{
    roomButton.Enabled = unAvailable;
}

Таким образом, в зависимости от значения поля unAvailabled roomButton включается или отключается.

0
user2645830 5 Сен 2016 в 15:26

Когда вы запускаете новую форму Form2, сохраните переменную формы и используйте ее для доступа к ее значениям. У вас должен быть доступ к свойству button.Enabled вашей кнопки в Form2.

Это ваш код на Form1

Form2 secondForm;

private void button_Clicked (object sender, EventArgs e)
{
    if (secondForm != null)
    {
        secondForm.yourButton.Enabled = true;
    }
    // Any other code you want to handle
}
private void Form2_Closing (object sender, EventArgs e)
{
    secondForm = null;
}

И вот что вы должны делать каждый раз, когда открываете / показываете Form2:

secondForm = new Form2();
secondForm.Show();
secondForm.Closing += new System.EventHandler(Form2_Closing);

РЕДАКТИРОВАТЬ: Спасибо, Ганс Пассан! Я забыл об этом. Вы также должны установить значение secondForm равным нулю, если форма закрыта. Отредактировал код выше.

1
Ian H. 7 Сен 2016 в 20:11

Я должен сказать спасибо за все ваши комментарии и ответы выше. Просматривая их, мой разум был открыт для того, чтобы думать иначе, особенно с использованием события Form_Load в Form2, и когда это произошло, оно сработало как шарм !!!!.

Все, что я сделал в событии Form2_Load, - это прочитал столбец Apartment_No (в соответствии с предложенным одним участником) в базе данных и использовал каждое из значений для отключения соответствующей кнопки с помощью переключателя ... case.

Вот код ниже:

     private void Form2_Load(object sender, EventArgs e)
    {
        string constr = @"Data Source=DESKTOP-J6KRI77\SQLEXPRESS; Initial Catalog = SELLnBUY; Integrated Security = true";
        string cmdstr = "SELECT Apartment_No FROM Apartment";
        SqlConnection con = new SqlConnection(constr);
        SqlCommand com = new SqlCommand(cmdstr, con);

        con.Open();
        SqlDataReader r = com.ExecuteReader();


        while (r.Read())
        {
          int room = int.Parse(r["Apartment_No"].ToString());

            switch(room)
            {
                case 101:               
                        button1.Enabled = false;
                        break;                       
                case 102:                       
                        button2.Enabled = false;
                        break;
                    case 103:
                        button3.Enabled = false;
                        break;
                case 104:
                        button4.Enabled = false;
                        break;

            }
        }
        con.Close();
0
Moni 8 Сен 2016 в 14:57