2017-01-25 4 views
-1

У меня есть приложение Windows Form C++. В нем у меня есть член, который записывает записи журнала (записи «WriteLog» для различных событий. (в публичном классе ref Form1 :) public: Void WriteLog (System :: Int32, System :: Int32, System :: String ^);Доступ к функциям класса класса Form Form Form Forms извне

Теперь я создал отдельный класс, где я хочу использовать функцию WriteLog (например, во время построения, записать в журнал, который создал объект). Но я не могу получить доступ к этой функции. .. получить на объект Form1, он не кажется, есть имя объекта Там нет FormName = gcnew Форма Единственное, что я нашел, было "Application :: Run (gcnew Form1());"

I будет ожидать, что сможет вызвать Writelog, как formname-> WriteLog (1,1, "test")

Я полностью понимаю концепцию инкапсуляции, изложенную ниже. Но я хочу получить доступ к функции-члену класса формы Referencing Windows Form elements in other classes

+0

сохраните свой экземпляр 'Form1', а не просто передайте его в' Application :: Run() '. –

+1

Сколько регистраторов вы хотите создать? Большинство программистов довольны одним, поэтому они объявляют свой журнал «static». Итак, теперь это просто, вы используете Form1 :: WriteLog (...); Следующее понимание заключается в том, что регистратор не имеет ничего общего с объектом Form, поэтому они объявляют его отдельно. Решает множество проблем с круговой зависимостью. Следующее понимание заключается в том, что ведение журнала уже является встроенной функцией в .NET, поэтому они используют Trace :: WriteLine (...); –

ответ

-1

3 опции: 1) Сделать WriteLog и все задействованные члены статической функцией-членом Form1. Затем вызовите Writelog без объекта.

2) Создайте отдельный объект WriteLog вне Form1 (очиститель)

3) использовать встроенные функции Write Трейс :: WriteLine

Я выбрал первый, так как я уже код, написанный таким образом, и Writelog также обновляет текстовые поля формы одновременно. (Я знаю, тоже не чист). Было бы больше работать над переписыванием. Спасибо, Ханс, вы все это сказали.

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