Как я могу создавать переменные элементы управления во время выполнения? - PullRequest
1 голос
/ 04 марта 2011

Я пытаюсь создать элементы управления во время выполнения, используя Reflection.В моем случае я получаю строку типа Label или Button и хочу создать для нее объект Label или Button.

Assembly WinFormasm = Assembly.Load("System.Windows.Forms,Version=2.0.000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

Control label = (Control)Activator.CreateInstance(WinFormasm.GetType("System.Windows.Forms."+type));

При выполнении этого я получаю сообщение об ошибке:

Имя файла или сборки 'System.Windows.Forms, версия = 2.0.000.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089' или одна из его зависимостей не найдена.

Iне знаю, что там не так.Я также попытался:

try
{
    Type cntrl = Type.GetType("System.Windows.Forms.Button,System.Windows.Forms, Culture=neutral, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089", true);
    label1.Text += cntrl.ToString() + " ";
}
catch(Exception e)
{
    label1.Text += e.ToString() + " ";
}

При попытке получить ошибку выполнения: он не может создать тип и возвращает null.Если я изменю строку gettype на System.Int32, она будет работать.

Как создать элемент управления с использованием строки?

Ответы [ 5 ]

2 голосов
/ 04 марта 2011

Что не так со следующим?

Button cntrl = new Button();

Если вы жестко программируете значения, зачем вам нужно использовать отражение?

1 голос
/ 04 марта 2011

Ваш номер версии неверен для System.Windows.Forms:

var assembly = Assembly.Load("System.Windows.Forms, version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

Затем, чтобы создать нужный тип элемента управления, просто укажите имя типа:

var type = "Button";
var control = (Control)Activator.CreateInstance(assembly.GetType("System.Windows.Forms." + type));
0 голосов
/ 31 марта 2011
        string ControlType = "TextBox";

        Assembly FormAssembly = Assembly.GetAssembly(typeof(Form));
        Control MyControl = (Control)FormAssembly.CreateInstance("System.Windows.Forms." + ControlType);

Просто измените ControlType значение.

0 голосов
/ 04 марта 2011

http://bytes.com/topic/c-sharp/answers/236152-how-create-control-instance-dynamicly-text была довольно интересная идея, чтобы решить проблему с небольшим исправлением, которое сработало для меня.

Я получаю тип формы (элементы управления стоят в форме справа) от этого типа я получаю сборку.
Из сборки я получаю объект, вызывая функцию gettype с параметрами желаемого типа элемента управления.
Наконец я приведу его к типу управления.

private Control createcontrol(string type)
{
    Type typen = typeof(Form);
    Assembly assem = typen.Assembly;
    //Assembly assem = Assembly.LoadFrom(typeof(Form).ToString());
    Type controlType = assem.GetType("System.Windows.Forms."+type); // GetType(controlType);
    object obj = Activator.CreateInstance(controlType);
    Control control = (Control)obj;
    return control;
}

Спасибо за помощь, ребята!

0 голосов
/ 04 марта 2011

для создания элементов управления из строкивам нужно использовать Activator класспроверить эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...