Я пытаюсь получить доступ к свойствам элементов управления в другой форме без необходимости изменять код другого проекта (тот, который содержит элементы управления, к которым я хочу получить доступ), поскольку он уже скомпилирован как DLL. В этой DLL, к которой я пытаюсь получить доступ, функции/подпроцедуры объявляются как частные. Будет ли какой-либо способ доступа к свойствам элементов управления без необходимости изменять DLL? В основном то, что я пытаюсь сделать, это создать своего рода консольную оболочку приложения для DLL, которая создаст новый экземпляр формы DLL, а затем проверит определенные флажки и нажимает определенные кнопки. В принципе, я пытаюсь автоматизировать форму, как она существует в настоящее время.Как получить доступ к элементам управления в другой форме?
ответ
Вы не можете получить доступ к частному свойств из любой точки, способ сделать это, чтобы изменить (что вы не хотите делать :() класс и превратить эти свойства с открытыми/глобальными рамками
Частных средств " частный». Вы не можете получить доступ к закрытым членам другого класса.
не без использования отражения, то есть.
Даже если вы можете получить доступ к частным частям с помощью отражения, вы не должны. Вы создадите непоправимый беспорядок. – MarkJ
Вы можете использовать Delegate.CreateDelegate назвать частные методы/свойства другого класса.
var foo = new Foo();
var doSomething = (Func<String, String>)
Delegate.CreateDelegate(typeof(Func<String, String>), foo, "DoSomething");
Console.WriteLine(doSomething("Hello!"));
Если контрольная DLL построена с помощью частных аксессуаров, вероятно, именно по этой причине. Но, конечно, не все программисты разрабатывают свои классы с самого начала, и иногда могут быть ситуации, когда вам нужно получить доступ к некоторым приватным свойствам, например, в вашем случае. Если вы хотите получить доступ к частному полю, вы можете сделать это с помощью рефлексии, как упомянули другие.
Попробуйте это на поле
string theFieldName = "_member";
obj.GetType().GetField(
theFieldName,
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance
).GetValue(obj);
Или это, если вы после метода
string theMethodName = "_someMethod";
obj.GetType().GetMethod(
theMethodName,
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance
).Invoke(obj, parameters);
Вы должны поставить BindingFlags получить частное содержание конкретного экземпляра.
Кажется, что это может почти работать для того, что мне нужно, но я пытаюсь получить значение свойства «Проверено» для флажка в другой форме. – DaRkMuCk
Я пробовал что-то вроде этого, но получаю ссылку на объект, не установленную в экземпляр ошибки объекта: Dim xmlGenForm As New XMLGen.FormGenerator xmlGenForm.Show() Dim CheckBoxCopyToAppcluster As String = "CheckBoxCopyToAppcluster.Checked" MsgBox (xmlGenForm [GetType]() ПолучитьПолеЗаголовка (CheckBoxCopyToAppcluster, System.Reflection.BindingFlags...NonPublic или System.Reflection.BindingFlags.Instance) .GetValue (xmlGenForm) .ToString) – DaRkMuCk
Я понял это, но по какой-то причине другая форма не обновляется флажок
Dim chk As New CheckBox
chk.Checked = False
Dim xmlGenForm As New XMLGen.FormGenerator
xmlGenForm.Show()
Dim pInfo As System.Reflection.PropertyInfo
pInfo = xmlGenForm.GetType().GetProperty("CheckBoxCopyToAppcluster", Reflection.BindingFlags.IgnoreCase Or Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
pInfo.SetValue(xmlGenForm, chk, Nothing)
If CBool(pInfo.GetValue(xmlGenForm, Nothing).CheckState) = True Then
MsgBox("checked")
Else
MsgBox("not checked")
End If
Это оказалось намного проще делать это так:
Dim xmlGenForm As New FormGenerator
xmlGenForm.Show()
Dim xmlGenFormGroupBox2 As GroupBox = xmlGenForm.Controls("GroupBox2")
Dim CheckBoxCopyToAppcluster As CheckBox = xmlGenFormGroupBox2.Controls("CheckBoxCopyToAppcluster")
CheckBoxCopyToAppcluster.CheckState = CheckState.Checked
- 1. Доступ к элементам управления в новой форме
- 2. Доступ/установка элементов управления в другой форме
- 3. Vb.Net - Доступ к тексту в элементах управления в другой форме
- 4. Как получить доступ к элементам управления в tabcontrol?
- 5. Как получить доступ к элементам управления размещенной форме в пользовательском элементе управления WinForm
- 6. Как получить доступ к элементам управления внутри управления репитером asp
- 7. Доступ к элементам управления на форме Windows C#
- 8. Как получить доступ к элементам управления в другом классе
- 9. Как получить доступ к элементам управления формы из класса C#
- 10. Доступ к элементам списка просмотра
- 11. C# Доступ к элементам управления из одной формы, которая открыта в другой форме, открывшейся этой формой
- 12. Как получить доступ к элементам управления Tridion в коде?
- 13. Как получить доступ к элементам управления в layouttemplate listview?
- 14. Как получить доступ к элементам управления других страниц в UserControl?
- 15. Как получить доступ к элементам управления в коде
- 16. Как получить доступ к элементам управления asp в файле класса
- 17. Как получить доступ к элементам управления в WPF DataGrid
- 18. Как получить доступ к элементам управления в заголовке сетки?
- 19. Как получить доступ к унаследованным элементам управления в дизайнере winforms
- 20. Как получить доступ к элементам управления html в коде за
- 21. Доступ к элементам управления RepeaterItem в EventHandler
- 22. Доступ к элементам управления asp в datalist
- 23. Vb.Net Как получить доступ к неизвестным элементам управления, объявленным в форме, но не содержащихся в Form.Controls
- 24. Доступ к элементам управления между формами
- 25. как получить доступ к элементам массива в другой массив
- 26. Доступ к элементам управления внутри ретранслятора с другой страницы
- 27. Доступ к элементам управления из разных форм
- 28. Доступ к элементам управления пользователя от родителя
- 29. Как получить доступ к элементам управления webresource из другого html webresource в форме CRM 2016?
- 30. Как получить доступ к элементам управления в форме окна, показанной на экране?
@MarkJ : Я говорил о размышлении, не мог тебя достать? – Sarfraz
Нет, вы не говорили об отражении, извините, я имел в виду этот комментарий для другого ответа. Я удалю его. – MarkJ