[Важно понять, что техника ISite ниже только работает во время проектирования. Поскольку ContainerControl общедоступен и присвоен значение, VisualStudio запишет код инициализации, который устанавливает его во времени выполнения. Сайт установлен во времени выполнения, но Вы не можете добраться, ContainerControl от него]
Вот статья , которая описывает, как сделать это для невидимого компонента.
В основном необходимо добавить свойство ContainerControl к компоненту:
public ContainerControl ContainerControl
{
get { return _containerControl; }
set { _containerControl = value; }
}
private ContainerControl _containerControl = null;
и переопределение свойство Site:
public override ISite Site
{
get { return base.Site; }
set
{
base.Site = value;
if (value == null)
{
return;
}
IDesignerHost host = value.GetService(
typeof(IDesignerHost)) as IDesignerHost;
if (host != null)
{
IComponent componentHost = host.RootComponent;
if (componentHost is ContainerControl)
{
ContainerControl = componentHost as ContainerControl;
}
}
}
}
, Если Вы делаете это, ContainerControl будет инициализирован для ссылки на содержание формы разработчиком. Связанная статья объясняет его более подробно.
А хороший способ видеть, как сделать, вещи состоят в том, чтобы посмотреть на реализацию Типов в Платформе.NET, которые имеют поведение, подобное тому, что Вы хотите с инструментом, таким как Отражатель Лутца. В этом случае, Система. Windows. Формы. ErrorProvider является хорошим примером для взгляда на: Компонент, который должен знать его содержание Формы.
Распространенной ошибкой является попытка расшифровать с использованием открытого ключа.
Я столкнулся с этой точной проблемой. UnicodeEncoding.Getbytes
не всегда является обратным в UnicodeEncoding.getString
.
byte[] a = new byte[32];
RandomNumberGenerator gen = new RNGCryptoServiceProvider();
gen.GetBytes(a);
UnicodeEncoding byteConverter = new UnicodeEncoding();
byte[] b = byteConverter.GetBytes(byteConverter.GetString(a));
//byte array 'a' and byte array 'b' will not always contain the same elements.
Вот почему RsacryptoserviceProvider.decrypt
не удается. Многие примеры шифрования / расшифровки в Интернете используют кодировку Unicode. Не используйте кодировку Unicode. Используйте Convert.Frombase64String
и и
Вместо этого Convert.tobase64String
.