Инициализатор вложенного свойства

204
09 мая 2017, 02:22

Я не понимаю это баг какой то, или разработчики языка просто забыли добавить это свойство? В интернете по этому поводу только одна тема в которой ответа на этот вопрос так я и не нашел.

И так, при динамическом добавлении контролов на TabControl, я не могу обратится к свойству FlatApperance для кнопки.Возможно вы скажете, что контрол создается динамически и не понятно что создается: кнопка, текстбокс и тд. Но все должно быть понятно и ясно т.к. перед созданием самого контрола указывается его тип, и следовательно должны быть переопределены все свойства для этого типа.К примеру:

tabControl1.TabPages[$"page{i}"].Controls.Add(new TextBox()
    {
        Name = "tb_rec_title",
        Text = dr["title"].ToString(),
        Font = new Font("Segoe UI Semilight", 14, FontStyle.Regular),
        Location = new Point(23, 25),
        Size = new Size(300, 25),
        WordWrap = true 
    });

В данном коде создается текстбокс и ему присваиваются свойства, в том числе WordWrap, который не имеется к примеру у кнопки. И действительно, создавая кнопку нельзя обратится к этому свойству. Тогда в чем проблема, почему нельзя обратится к свойству FlatApperance для кнопки? Вот, что мне не понятно...

tabControl1.TabPages[$"page{i}"].Controls.Add(new Button()
{
    Name = "btn_img_back",
    Text = "<",
    Font = new Font("Microsoft YaHei UI", 11, FontStyle.Regular),
    Location = new Point(406, 100),
    Size = new Size(22, 35),
    Cursor = Cursors.Hand,
    FlatStyle = FlatStyle.Flat,
    BackColor = Color.Transparent,
    /*FlatAppearance.BorderColor = Color.White*/
});

Т.к. кнопка создается динамически, к нему нельзя просто так обратится, например как тут

Button btn = new Button();
btn.FlatAppearance.BorderColor = Color.White;
Answer 1

Дело в том, что в синтаксисе

new C()
{
    name1 = value1,
    name2 = value2
}

name1/name2 должны быть именами свойств и ничем другим. В вашем коде указано FlatAppearance.BorderColor, это не имя свойства.

Для вложенных свойств есть малоизвестный специальный синтаксис, в котором можно не создавать подобъект, а только указывать его свойства. Должно сработать так:

new Button()
{
    Name = "btn_img_back",
    Text = "<",
    Font = new Font("Microsoft YaHei UI", 11, FontStyle.Regular),
    Location = new Point(406, 100),
    Size = new Size(22, 35),
    Cursor = Cursors.Hand,
    FlatStyle = FlatStyle.Flat,
    BackColor = Color.Transparent,
    FlatAppearance = // <-- тут НЕ указываем создание объекта
    {
        BorderColor = Color.White
    }
}
READ ALSO
Как сохранить изображение с PictureBox

Как сохранить изображение с PictureBox

Хочу сохранить изображение с PictureBox, но постоянно сохраняется только чёрное изображение или вылетает ошибкаПодскажите в чём проблема

255
Категории через tv объекты ModxRevo

Категории через tv объекты ModxRevo

Добрый день, на сайте есть каталог, разбитый на категории с помощью папокНо каждый товар в каждой категории относится к конкретному типу

218
VK API прерывистая работа

VK API прерывистая работа

Есть бот для группы вконтакте, он отправляет сообщение пользователям когда они выходят или входят в группу, а так же пара простых командСитуация...

303
Не заходит в php скрипт!

Не заходит в php скрипт!

При нажатии на странички кнопки "отправить" запускается скрипт, но первый оператор после <?php уже не выполняется , например <?php echo "OK";, ничего...

247