Наконец-то можно создавать формы одним выражением:
Скрытый текст
def f = Form() with
{
Font = Drawing.Font("Segoe UI", 9);
Text = "hello";
Width += 100;
Height -= 100;
Controls with
[
Panel() with
{
Controls with
[
ListBox() with
{
IntegralHeight = false;
Dock = DockStyle.Fill;
Name = "second";
},
ListBox() with
{
Dock = DockStyle.Left;
Name = "first";
Items with [3, 4, 5];
Items ::= otherItems;
IntegralHeight = false;
SelectedIndexChanged +=
(s, _) =>
{
def first = (s :> ListBox);
def second = first.Parent.Controls["second"] :> ListBox;
second.DataSource = first.SelectedItem.ToString().ToArray();
}
}
];
Dock = DockStyle.Fill;
},
Button() with
{
Text = "push me";
Dock = DockStyle.Top;
Click => _ = k.Start();
},
TextBox() with
{
Text = "type in me";
Dock = DockStyle.Bottom;
}
];
}
Здравствуйте, Ka3a4oK, Вы писали:
C>>Наконец-то можно создавать формы одним выражением:
KK>В чем профит?
Во-первых, в WinForms часто используются императивные фичи языка: события, коллекции, изменяемые классы. Эта возможность — индикатор того, насколько макрос с ними справляется.
Во-вторых, создание форм с новым макросом удобнее, чем со старым, а тем более, чем без него. Просто потому что неудобно сначала декларировать вложенные контролы, а потом внешние. Ну, и еще менее удобно потом навешивать обработчики событий. А с этим макросом я формы клепаю быстрее, чем в дизайнере на C# (особенно на ноуте, где дизайнер тормозит безбожно)
Здравствуйте, catbert, Вы писали:
C>Народ хотел инициализаторы коллекций, так что я решил поделиться
Да-да, это я хотел! Спасибо огромное, catbert! Избалованные сахаром /диабетчики/ люди, переходящие с цэшарпа, с большим трудом приспосабливаются к многословному коду.
C>5. Поддержка метода AddRange C>
Этого, как я понимаю, нет даже в цэшарпе! КрутЪ!
C>Наконец-то можно создавать формы одним выражением: C> def f = Form() with C> { C> Font = Drawing.Font("Segoe UI", 9);
Несмотря на поддержку дизайнера, мне кажется, это будет востребовано. Уж для "обычных" (и иногда "ветвистых") объектов точно!
А что нуна делать, чтобы всё это заработало? Просто скопировать в "c:\Program Files\Nemerle\CodeSnippets\Snippets" или нужно перекомпилировать?
Здравствуйте, matumba, Вы писали:
M>А что нуна делать, чтобы всё это заработало? Просто скопировать в "c:\Program Files\Nemerle\CodeSnippets\Snippets" или нужно перекомпилировать?
Собрать проект с макросом а бинарник подключить макрореференсом к проекту.
C>2. Инициализация коллекций C>3. Вложенная инициализация без создания объектов C>4. // упрощенная форма, как в компиляторе Mono C# C>5. Поддержка метода AddRange
Это особенно здорово, просто праздник какой-то! Одной макрой застыдил си-решетку.
«История жизни – это, по существу, развитие сознания, которое завуалировано морфологией.» Пьер Тейяр де Шарден
Здравствуйте, catbert, Вы писали:
C>Здравствуйте, Ka3a4oK, Вы писали:
C>>>Наконец-то можно создавать формы одним выражением:
KK>>В чем профит?
C>Во-первых, в WinForms часто используются императивные фичи языка: события, коллекции, изменяемые классы. Эта возможность — индикатор того, насколько макрос с ними справляется.
C>Во-вторых, создание форм с новым макросом удобнее, чем со старым, а тем более, чем без него. Просто потому что неудобно сначала декларировать вложенные контролы, а потом внешние. Ну, и еще менее удобно потом навешивать обработчики событий. А с этим макросом я формы клепаю быстрее, чем в дизайнере на C# (особенно на ноуте, где дизайнер тормозит безбожно)
А может стоит этот макрос совместить с дизайнером WinForms?
Здравствуйте, _FRED_, Вы писали:
_FR>Разработчики шарпа решили, что "Да", найдя для этого достаточно оснований
_FR>Если у вас есть свой вижен, то, может, позволить так же (если ещё нет) использовать и extension Add-методы?
По видимому, используется нетипизированный подход, и, с чем свяжется имя Add, уже решится механизмом выбора перегрузок. Если по сигнатуре подойдет метод-расширение, то будет использован он. Я не вижу потенциальных проблем с этим, но обоснование проверки на IEnumerable приветстувуется
Здравствуйте, hardcase, Вы писали:
H>По видимому, используется нетипизированный подход, и, с чем свяжется имя Add, уже решится механизмом выбора перегрузок. Если по сигнатуре подойдет метод-расширение, то будет использован он. Я не вижу потенциальных проблем с этим, но обоснование проверки на IEnumerable приветстувуется
ну в шарпе таким образом пытаются гарантировать, что смысл операции new SomeClass(10) { 1 } — добавление элемента в коллекцию элементов, а не например сложение двух чисел. ПОнятно, что это просто попытка, но тем ни менее..
Здравствуйте, Jack128, Вы писали:
J>ну в шарпе таким образом пытаются гарантировать, что смысл операции new SomeClass(10) { 1 } — добавление элемента в коллекцию элементов, а не например сложение двух чисел. ПОнятно, что это просто попытка, но тем ни менее..
Здравствуйте, _nn_, Вы писали:
__>А может стоит этот макрос совместить с дизайнером WinForms?
Можно, но для этого надо добавить в него еще как минимум одну фичу (присваивать полученные значения переменным класса). Кроме того, нужно разобраться с CodeDom'ом и вызовами методов посреди инициализации.
Это конечно добавит читаемости в код дизайнера, но стабильности, боюсь, не добавит .
Ну, и еще, тогда этот макрос придется перенести в стандартную библиотеку.
Здравствуйте, VladD2, Вы писали:
VD>Комплит водр работает?
Не знаю, что такое "водр" , но с правой стороны присваиваний автокомплит через Ctrl+Space работает. С левой стороны — нет, и я не представляю, как его добавить.