2013-05-16 2 views
0

Я пытаюсь вызвать метод из другого класса, но без успешных действий.Создание метода для операции в отдельном файле класса

У меня есть CheckBox checkBox1 в моей программе, и у меня есть кнопка, которая при нажатии на нее я хочу снять флажок checkBox1.

Если я ставлю I метода в том же файл, как это все работает:

public void close() 
{ 
    checkBox1.IsChecked=false; 
} 

Но если я создаю отдельный файл класса (класс Close), и поставить там (в том же пространстве имен, и с " используя «требуемые элементы». Там нет способа заставить его работать. Я пытался, например класс, как:

Close operation = new Close(); 
operation.close(); 

Я также попытался поставить близкий метод как статический, но было невозможно, потому что в моей реальной программе у меня есть много переменных, что дает мне ошибку, потому что они «не static "(?).

Я заметил, что MessageBox.Show("Hello"); работает, если я вызываю метод таким образом, но checkBox1 все еще не изменился. Что я могу сделать?

+0

Так вы получаете ошибку компиляции? Есть ли в классе 'Close' элемент' CheckBox'? – PoweredByOrange

+0

Честно говоря, я не понимаю ваш вопрос: можете ли вы быть более полным/конкретным? –

ответ

2

Основным принципом объектно-ориентированного программирования является Encapsulation. Это означает, что класс знает и работает только с внутренними переменными-членами класса.

В вашем случае класс Close ничего не знает об управляющей переменной с именем checkBox1, и поэтому метод close (как указано выше) не может работать. Его даже не удалось собрать !. Вместо этого, когда метод close является частью класса Window он работает, как ожидалось, так как переменная checkbox1 управления является переменная-член класса окна

Однако, если я понимаю ваши намерения, я советую вам, чтобы избежать создания отдельных классов для обработки операций пользовательского интерфейса. Пусть код, который работает с элементами интерфейса, останется с классом, где определены элементы.

+0

Но если я поместил «: MainWindow» после определения класса (в другом файле), он может распознать checkBox, но все равно работать не может. Странный. Что вы мне посоветуете для получения четкого кода? В этот момент мой код беспорядок, и у меня есть только 10-15 кнопок/меню. – Sturm

-1

CheckBox.IsChecked возвращает значение типа bool, если вы пытаетесь фактически изменить значение флажка (то есть отмечено или не проверено), вам нужно использовать другое свойство.

Try:

public void close() 
    { 
     checkBox1.Checked = true; 
    } 

Это предполагает, что Close класс действительно имеет CheckBox контроль внутри него ... Ваш вопрос довольно расплывчатым, и откровенно называя метод близко, вероятно, не лучшая практика, как .Close() - довольно распространенный метод для многих классов в WinForms.

+0

Для downvoter, я пересмотрел этот ответ ... нажал «Post», прежде чем я хотел. Если это поможет прояснить, пожалуйста, удалите голосование. В противном случае вы не могли бы рассказать мне, как я могу улучшить свой ответ? –

+1

Я не сделал этого, но могу сказать, почему. Прочитайте ответ Стива. 'В вашем случае класс Close ничего не знает о контрольной переменной с именем checkBox1'. – PoweredByOrange

+0

Имеет смысл, за исключением того, что мы фактически не видим код для всего класса 'Close', просто метод внутри указанного класса. Я смиренно соглашусь с нисходящим, хотя это делает меня печальной пандой;). Спасибо за ваш отзыв! –

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