Как видно из темы, у меня есть некоторые проблемы с PropertyInfo.SetValue.Чтобы перейти к сути, вот мой пример - я создал свой собственный класс, и главное в нем - объект презентации:
using System;
using System.Reflection;
namespace TestingSetValue
{
public class Link
{
private object presentationObject = null;
private string captionInternal = string.Empty;
public Link (string caption)
{
captionInternal = caption;
}
public string CaptionInternal
{
get { return captionInternal; }
set { captionInternal = value; }
}
public bool Visible
{
get
{
if (PresentationObject != null)
{
PropertyInfo pi = PresentationObject.GetType().GetProperty("Visible");
if (pi != null)
{
return Convert.ToBoolean(pi.GetValue(PresentationObject, null));
}
}
return true;
}
set
{
if (PresentationObject != null)
{
PropertyInfo pi = PresentationObject.GetType().GetProperty("Visible");
if (pi != null)
{
pi.SetValue(PresentationObject, (bool)value, null);
}
}
}
}
public object PresentationObject
{
get { return presentationObject; }
set { presentationObject = value; }
}
}
}
Затем я делаю это:
private void btnShowLink_Click(object sender, EventArgs e)
{
Link link = new Link("Here I am!");
this.contextMenu.Items.Clear();
this.contextMenu.Items.Add(link.CaptionInternal);
link.PresentationObject = this.contextMenu.Items[0];
link.Visible = true;
lblCurrentVisibility.Text = link.Visible.ToString();
}
Теперь я могу себе представить, что это не выглядит слишком логичным / экономичным, но оно показывает суть моей настоящей проблемы.А именно, почему видимость объекта презентации (и значение link.Visible) не меняется после того, как я позвоню:
link.Visible = true;
Я просто не знаю, что еще нужно сделать, чтобы заставить эту работу ..Любая помощь очень ценится.
Чтобы сделать вещи еще более интересными, свойство Enabled ведет себя так, как и ожидалось ...
PropertyInfo pi = PresentationObject.GetType().GetProperty("Enabled");
Может ли это быть связано с тем, что Visible являетсяна самом деле это свойство базового базового объекта ToolStripDropDownItem, тогда как Enabled является «прямым» свойством ToolStripDropDownItem?