2015-09-04 2 views
0

за исключением Я хотел бы, чтобы отключить все для панели, показанной нижеКак отключить все на формах для панели

enter image description here

Срабатывания этой панели за исключением, когда я кнопка редактирования нажал на моем DataGridView и панель будет видна .. Поэтому в основном панель не видна по умолчанию (здесь ниже код кнопки редактирования в сетке)

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     var senderGrid = (DataGridView)sender; 

     if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && 
      e.RowIndex >= 0) 
     { 

      panel1.Visible = true; 
      selectedItenOutputOrderTabGrid.Rows.RemoveAt(selectedItenOutputOrderTabGrid.CurrentRow.Index); 

       // HERE I WANT TO ADD A FUNCTION THAT WOULD DISABLE ALL IN THE FORM EXCEPT THE PANEL 
     } 

    } 
+0

возможно дубликат: http://stackoverflow.com/questions/13446129/how-to- disable-all-controls-on-the-form-except-for-a-button – Kaitlyn

+0

Следующая ссылка создает еще одну личную пустоту, которая для меня недостаточно. – Jon

+1

Почему бы вам просто не показать модальный диалог? – taffer

ответ

2
foreach (Control child in this.Controls) 
{ 
    if (child != panel1) 
     child.Enabled = false; 
} 

Убедитесь, что ваш panel1 является прямым ребенком на форме. Откройте окно «Структура документа». Вы должны увидеть что-то вроде этого:

Document outline

Или сделайте новую форму и показать его с ShowDialog(). Вы можете сделать это без полей, если вы хотите ...

+0

Если панель находится в каком-то другом элементе управления, она также отключит панель. ........ – andy

+1

@andy: на скриншоте она кажется плавающей панелью непосредственно на форме.Но именно поэтому я предложил простой модальный диалог в своем комментарии. – taffer

+0

Это отключает все элементы управления в моих формах даже с помощью кнопки numericUpDown и сохранения и отмены – Jon

2

Чтобы отключить все дочерние элементы управления формы, за исключением панели panel1, попробуйте следующее:

foreach (var control in Controls.Cast<Control>().Where(ctrl => ctrl.Name != "panel1")) 
{ 
    control.Enabled = false; 
} 
+0

Это отключает все элементы управления в моих формах даже numericUpDown и сохраняет и отменить кнопку – Jon

+0

Если панель находится в каком-то другом элементе управления, она также отключит панель. ........ – andy

+0

@andy. Согласно снимку экрана, лучший способ заключается в том, что панель должна быть дочерней формы, а не сеткой. В противном случае OP должны также включить gridview –

2

Я испытал это, и он отключает все другие элементы управления, оставляя panel1, а элементы управления все еще включены. Это код редактировался https://stackoverflow.com/a/13446223/3472690

foreach (Control c in this.Controls) 
{ 
    c.Enabled = false; 
} 


panel1.Parent.Parent.Enabled = true; 
foreach (Control c in panel1.Parent.Parent.Controls) 
{ 
    c.Enabled = false; 
} 

panel1.Parent.Enabled = true; 
foreach (Control c in panel1.Parent.Controls) 
{ 
    c.Enabled = false; 
} 

panel1.Enabled = true; 

Что делает этот код, довольно прост:

Во-первых, первый Еогеасп отключает все элементы управления в форме, но не саму форму. Затем он позволяет родительскому родительскому элементу панели, например самому tabcontrol, затем отключает все в элементе управления вкладкой.

Затем он включает вкладку, на которой находится ваша панель, и отключает все остальное на закладке.

И, наконец, это позволяет использовать панель. Это не очень оптимизированная часть кода, но она работает.

enter image description here

Это означает, что в соответствии с приведенной выше картинке, сама tabControl1 включена, но все в нем отключена за tabPage1 исключением того, что panel1 дальше, в то время как все в tabPage1 для панели1 кроме отключена.

EDIT:

Чтобы отменить отключение всех других элементов управления, просто сделать:

foreach (Control c in this.Controls) 
{ 
    c.Enabled = true; 
} 

panel1.Enabled = false; 
+0

Первый foreach отключает каждый прямой ребенок на форме. Второй из них совершенно бесполезен, если они не были отключены в дизайнере. Последняя строка снова включает панель, которая была отключена в первом foreach. – taffer

+0

@taffer Ах, правда, ты прав, мой плохой. – Kaitlyn

+0

Это также отключил все мои элементы управления, а также кнопки с моей панели – Jon

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