2011-12-14 2 views
3

В моем текущем проекте мне нужно отключить комбинированные поля из формы 2, когда кнопка редактирования нажата в форме 1. Что я хотел бы знать, так это то, как я могу отключить поле со списком, которое находится в форме 2, из Форма 1.Использование объектов извне его формы

Я попытался

IDComboBox4.Enabled = false; 

в форме 1, однако я получаю и ошибка, которая говорит

«„IDComboBox4“Имя не существует в текущем контексте».

Update:

я попытался оба ответа, однако, к сожалению, ни работали. Теперь я получаю ошибку синтаксиса

«Ссылка на объект требуется для нестатических полей, методы или свойства»

при попытке код

dlgForm.ComboBox4Enabled = false; 

в Form1 с кодом

public bool ComboBox4Enabled 
    { 
     get 
     { 
      return IDComboBox4.Enabled; 
     } 
     set 
     { 
      IDComboBox4.Enabled = value; 
     } 
    } 

в форме2, которая также является dlgForm. Я чувствую, что упускаю из виду что-то основное, но просто не могу на него наложить свой палец. Если вы хотите, чтобы некоторые фрагменты моего кода давали мне знать. Любая помощь приветствуется. Еще раз спасибо.

+1

Почему кто-то проголосовал за этот вопрос? Это вполне разумно. По крайней мере, укажите, какова ваша проблема! –

ответ

3

Вы можете просто сделать IDComboBox4 общественности и использовать form2.IDComboBox4.Enabled = false;, если вам нравится, но я бы настоятельно рекомендуем вам создать свойство на форме 2, которое позволяет вам делать это, не обращаясь к внутренним элементам формы2. Что-то вроде этого:

public bool ComboBox4Enabled{ 
    get{return IDComboBox4.Enabled;} 
    set{IDComboBox4.Enabled = value;} 
} 

Затем используйте form2.ComboBox4Enabled = false;, чтобы установить его.

Пока вы на нем - вы действительно должны переименовать свои comboboxes и т. Д., Чтобы они имели смысл для следующего разработчика, который приходит. _cbbJobTitle или что-то в этом роде.

+0

+1 для абстрагирования операции. –

+0

+1 на предложение не делать это 'public'. – Otiel

+0

Это действительно единственный правильный способ сделать это.Я подозреваю, что при отключении этого combobox в любом случае могут быть другие операции, которые также могут быть выполнены в свойстве. Возможно, установить несколько вещей в одно и то же время или изменить метку ... все, что требуется. –

3

Примечание: это пример для одной кнопки вы можете изменить это COMBOBOX

Выберите кнопку дизайнера, перейдите на его свойства и изменения «Модификаторы» имущество от частного к общественности.

alt text http://xmages.net/out.php/i170429_1.png

Тогда вы можете получить доступ к нему из другого класса, что-то вроде этого:

public static class Test 
{ 
    public static void DisalbeMyButton() 
    { 
     var form = Form.ActiveForm as Form1; 

     if (form != null) 
     { 
      form.MyButton.Enabled = false; 
     } 
    } 
} 
+0

И это изменение будет видно в файле * Form.Designer.cs *. – Otiel

+0

@Otiel он должен быть виден в файле designer.cs –

+0

Это моя точка точно. Просто комментировал это так: – Otiel

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